본문 바로가기

programing

(7)
알고리즘 (배열 커서 연결 리스트) 이번 알고리즘은 저번 리스트에 이어서 각 노드를 배열 안의 요소에 저장하고 그 요소를 이용해 연결 리스트를 구현하는 방식으로 해보자. 이전 알고리즘 리스트 구현에서 장점은 노드의 삽입, 삭제를 데이터 이동 없이 수행한다라는 장점이 있지만 삽입, 삭제를 수행할 때마다 노드용 객체를 위한 메모리 영역을 확보하고 해제하는 과정이 필요하다. 메모리 영역을 확보하고 해제하는데 필요한 비용은 사용할수록 점점 커져갈 것이다. 데이터 수가 크게 바뀌지 않거나 데이터의 최대 개수를 미리 알 수 있다면 배열을 통해 연결 리스트를 구성하는 것이 효율적인 운용이 가능하다.다음 예제를 통해서 어떻게 효율적인지 알아보자. 위는 논리적인 구조를 이미지로 나타낸 것이다.아래는 물리적인 구조를 나타내는 이미지이다. 다음 노드가 가리키..
알고리즘 LIST 이번 포스팅은 LIST 알고리즘에 대해 알아보고 공부해 보도록 하겠다. 리스트란?데이터를 순서대로 나열하는 자료구조이다.선형 리스트 부터 알아보자. 선형 구조를 갖는 리스트에는 선형 리스트와 연결 리스트가 있다. 선형 리스트는 데이터가 배열처럼 연속하는 메모리 공간에 저장되어 순서를 갖는다. 연결 리스트는 데이터가 메모리 공간에 연속적으로 저장되어 있지 않더라도 각각의 데이터 안에 다음 데이터에 대한 정보를 갖고 있어 서로 연결된다. 위는 연결 리스트이다.리스트의 개별 요소는 노드(node)라고 한다. 노드의 구성 요소는 데이터와 다음 노드를 가리키는 포인터이다. 처음에 있는 노드는 머리 노드 맨 끝 노드는 꼬리 노드라 한다. 앞쪽 노드는 뒤쪽 노드의 데이터를 가리키는 포인터를 가지고 있다. 연결 리스트..
kafka connect에 대해 이번 포스팅에서는 카프카 커넥트에 대해서 알아보도록 하자. Kafka Connect는 데이터베이스, 키-값 저장소, 검색 인덱스 및 파일 시스템 간의 간단한 데이터 통합을 위한 중앙 집중식 데이터 허브 역할을 하는 Apache Kafka의 무료 오픈소스 구성 요소이다.kafka와 다른 데이터 시스템 간 데이터를 스트리밍 하고 대규모 데이터 셋을 이동시켜 주는 커넥터를 빠르게 생성할 수 있다. 카프카는 프로듀서와 컨슈머를 통해 데이터 파이프라인을 만들 수 있다. 만약 A서버의 DB에 저장한 데이터를 카프카 프로듀서와 컨슈머를 통해 B서버의 DB로 보낼 수 있는데 이러한 파이프 라이닝 여러 개라면 반복적으로 파이프라인을 구성해줘야 한다.이런 반복적인 파이프 라인 구성을 쉽고 간편하게 만들 수 있게 만들어진 ..
멀티 모듈-3 이번 포스팅에서도 멀티 모듈에 대해서 다뤄 보도록 하겠다.이전에 포스팅한 내용과 중복되는 부분이 있더라도 다른 분의 견해를 다시 소개하는 것이니 중복되는 부분은 복습하는 차원에서 보고 새로운 설계법이 있다면 참고하게 되면 좋을 것 같다. 이 포스팅을 마지막으로 멀티 모듈에 대한 개념을 잡을 것으로 마지막 단락에서 공부한 것을 토대로 나의 멀티 모듈 설계에 대한 견해를 작성할 생각이다. 물론 필자가 틀릴 수 있다. 이전 포스팅에서 말한 결정되지 않는 사항을 최대화해서 대략적인 틀을 잡아 큰 폭으로 서비스를 나누고 세부적인 모듈은 다음 포스팅에 필자 프로젝트를 소개하면서 나눠보도록 하겠다. https://www.youtube.com/watch?v=nH382BcycHc&t=1shttps://techblog.w..
멀티 모듈 - 2 이전 포스팅과 같이 멀티 모듈 설계에 대해서 진행해 보겠다.이전 포스팅에서 말한 것 같지만 멀티 모듈을 설계할 때 이렇게 해야 한다.라는 구조가 있지 않지만 지켜져야 할 것이 있고 지켜져야 할 부분에 맞춰 관점을 두고 명확하게 분리하는 것이 좋은 멀티 모듈 설계라 생각한다. https://www.youtube.com/watch?v=uvG-amw2u2s&t=357s해당 포스팅은 위 영상을 보고 정리한 포스팅입니다. 자세한 설명이 필요할 것 같으시다면 확인해 주세요. 멀티 모듈이 필요할 때는 작업 수정 및 히스토리의 파악이 어려울 때, 서비스 분리가 어려울 때(애플리케이션을 만들거나 검수하거나 사용하는 사람이 사용하는 각 서비스) 주의해야 할 점SRP를 위반하기 쉽다. 이 SRP는 하나의 일만을 수행해야 한..
멀티 모듈에 대해 이번 포스팅은 멀티 모듈에 대해서 알아보는 포스팅이다.목표는 필자의 프로젝트를 멀티 모듈로 구성하는 것으로 모놀리식 아키텍처에서 MSA 아키텍처로 나아가게 해서 모든 모듈을 각각 실행하게끔 만들 수 있을지 자신은 없지만 적어도 각 계층을 모듈화 하고 REST API와 애플리케이션 실행 부분은 분리해서 배포하게끔 하겠다. 멀티 모듈에 대해 알아보기 전 필자가 말한 모놀리식 아키텍처와 MSA를 알아보고 넘어가자.둘은 소프트웨어 시스템을 구성하는 두가지 주요 아키텍처 패턴이다. 모놀리식 아키텍처(Monolithic Architecture)특징 - 모든 기능이 하나의 코드베이스에 포함되고 애플리케이션은 하나의 단일 배포 단위로 구성된다. 보통 하나의 데이터 베이스를 공유하고 애플리케이션 전체를 한 번에 빌드하고..
kafka KRaft 이번 포스팅에서는 저번 카프카를 다룰 때 주키퍼가 제거된다는 것을 말했었고 현재는 3.7이지만 지금 버전이 주키퍼를 사용할 수 있는 마지막 버전이다. 그러므로 크래프트에 대해 알아보고 마이그레이션도 알아보자. KRaft가 생긴 이유아파치 카프카의 분산 시스템을 관리하기 위해 도입된 메커니즘이다.아파치 주키퍼를 사용해서 클러스터 메타 데이터의 관리와 조정을 했지만 주키퍼의 의존성은 카프카 확장성과 유지보수에 제약을 갖게 했다. 해결하기 위해서 카프카 자체로 내부에서 분산 시스템의 상태를 관리하는 방식을 도입하고자 만들어졌다. 1. 브로커는 모든 토픽과 파티션에 대한 메타데이터를 주키퍼에서 읽어야 하며, 메타데이터의 업데이트는 주키퍼에서 동기방식으로 일어나고 브로커에는 비동기 방식으로 전달됐다. 이 과정에서..