Computer Science 29

CQRS 개요

Command and Query Responsibility Segregation : Command(명령)과 Query(쿼리) 책임 분리 직역하여 명령이라는 것과 쿼리라는 것의 책임을 분리한다는 것으로, 가장 핵심이 되는 말이다. CQRS가 등장하기 이전에 많은 아키텍처에서 다음과 같은 문제점을 볼 수 있었다. DB에서 데이터 조회 및 업데이트에 같은 데이터 모델을 사용 : 복잡한 어플리케이션에서는 유지보수가 어렵다. 읽기와 쓰기의 부하가 다름 : 쓰기 작업이 복잡할 경우 응답이 느려짐, 같은 데이터 동시 작업 시 데이터 일관성 문제 정보 조회 시 복잡한 쿼리들이 성능에 부정적 영향을 준다. >> 이에 '읽기'와 '쓰기'를 각기 다른 모델로 분석하는 CQRS를 도입하게 되었다. 명령을 통해 데이터를 쓰고,..

리더-팔로워 구조

* 이 글을 읽기 전에 어느 정도 DCD(데이터 중심 구조)에 대해 이해하고 오길 바람. 복제 : 네트워크로 연결된 여러 장비에 동일한 데이터의 복사본을 유지한다는 의미 복제가 필요한 이유 지리적으로 가깝게 유지해 지연 시간을 줄임 장애가 발생해도 지속적으로 동작하여 가용성 높임 장비의 수를 확충하여 읽기 처리량을 늘림 복제를 위한 알고리즘 Single Leader (단일 리더) 이 알고리즘은 하나의 리더 노드가 전체 복제본의 주도권을 가지고 있다. 리더는 쓰기 작업을 처리하고, 이를 팔로워에게 복제한다. 팔로워는 리더의 상태를 동기화하여 일관성을 유지한다. 읽기 작업은 주로 팔로워에서 처리되며, 리더의 부하를 줄이고 응답 시간을 최적화한다. 주로 일관성과 가용성을 균형있게 제공하며, 복제 관리가 비교적..

데이트팝 기술면접 풀이

https://blog.datepop.co.kr/python-interview/ 데이트팝 Python 주니어 개발자 인터뷰 후기 데이트팝 Python 주니어 개발자 인터뷰 후기 blog.datepop.co.kr 위 블로그에서 기술면접 인터뷰 후기를 보게 되었고, 데이트팝 면접 질문들에 관해 스스로 공부했던 것을 대답하기로 했다. 비록 도달하진 못했지만 내가 지금 어느 정도인지도 확인할 필요가 있었는데, 생각보다 합격의 길이 먼듯 멀지 않은듯.. 한 걸음만 더 걸으면 되겠다고 생각했는데 왜 아직 모르는 게 있지?라는 생각을 면접 때마다 하게 되는 것 같다. 우선은 위 기술블로그를 보고 정확하게 질문에 대한 대답을 이해하기 위해 아래에 최선의 답을 적어보았다. 파이썬은 Garbage Collection는 메..

OSI 7계층과 TCP/IP 4계층 비교

TCP/IP (Transmission Control Protocol / Internet Protocol)는 컴퓨터 네트워크에서 데이터 통신을 위한 표준 프로토콜 이다. 브라우저 표시줄에 https://www.naver.com을 쳤을 때, 이것이 네이버의 서버에 도달해 내 컴퓨터 화면 앞에 네이버를 띄워줄 때까지, TCP/IP의 약속을 따라 진행된다는 것이다. 이 TCP/IP에서는 내가 www.naver.com을 치고 그 화면을 받을 때까지, 데이터가 4계층에 걸쳐서 만들어지고, 다시 그 4계층을 역으로 거치는 과정이 일어난다. 그리고 이 과정에서 각 단계마다 캡슐화 라는 과정이 일어난다. 이는 데이터가 다음 계층에 의해 감싸지는 것이다. 이러한 캡슐화된 데이터는 운영체제에서 만들어지는데 운영체제는 사용자..

원형연결리스트

원형연결리스트는 말 그대로 연결리스트가 원형 형태로 이루어진 것으로, 가장 큰 특징으로는 마지막 노드와 첫 번째 노드가 만난다는 점이다. 이러한 원형의 특징을 가졌기에 원형연결리스트, 다른 말로 순환연결리스트라고도 부른다. 이 원형 연결리스트는 시작과 끝이 없기 때문에 헤드 포인터를 설정해주지 않으면 무한히 순환할 수 있다. 그래서 이 부분에 주의해야 한다. 원형 연결 리스트는 하나의 노드에서 모든 노드로의 접근이 가능하다는 장점을 가지고 있다. 구현 코드에 주석을 달아놓았으니 이해하기 어렵지 않을 것이다. # 노드를 정의하며, # 각 노드는 데이터 (data)와 다음 노드를 가리키는 링크 (link)를 포함함 class ListNode: def __init__(self, data): self.data ..

이중연결리스트

정의 : 하나의 노드가 선행 노드와 후속 노드에 대한 두 개의 링크를 가지는 리스트 핵심은 노드와 노드가 서로 연결되어 있다는 점이다. 아래 그림을 보면 단순 연결 리스트(linked list)와는 다르게 노드가 이전 노드(previous)와 다음 노드(next)로 구성되어 있다. 이것의 가장 큰 장점은 양방향으로 연결되어 있기 때문에 노드를 탐색하는 방향이 양쪽으로 가능하다는 것이다. 삽입 구현 과정 다음과 같이 head와 tail 노드만 존재하고 있을 때, 새로운 데이터를 가진 노드(new)를 넣고 싶다면 1. tail의 Llink가 가리키는 노드의 Rlink가 new를 가리키게 한다. (tail->Rlink->Rlink = new) 2. newnode의 Llink를 tail의 Llink가 기리키는 ..

에자일 방법론이란?

1. 애자일(Agile)방법론이란 '애자일(Agile)'이란 용어는 소프트웨어 개발 방식의 하나로, 작업 계획을 짧은 단위로 세우고 제품을 만들고 고쳐 나가는 사이클을 반복함으로써 고객의 요구 변화에 유연하고도 신속하게 대응하는 개발 방법론이다. 좋은 것을 빠르게 취하고, 유연하고 효율적으로 개발을 할 수 있도록 만드는 다양한 방법론을 통칭해 일컫는 말이다. 애자일은 어떠한 규정이나 툴이 아니며, 개발 업무는 어떤 방식으로 진행되는 것이 좋은지에 대한, 협업과 워크플로우를 바라보는 관점, 가치체계, 문화라고 보는 것이 더 가깝다. 즉, 위의 프레임워크들이 지향하는 것을 통칭하는 상위 개념이 애자일이라고 할 수 있다. 미리 정해진 몇 개의 단계에 따라 엄격한 순서대로 이루어지는 일직선의 과정인 폭포수(Wa..

Primary Key, Foreign Key 차이

관계형 데이터베이스에서 핵심은 테이블 간 적절히 관계를 맺어주면서 데이터 중복을 최소화하여 구조를 짜임새 있게 만드는 것이다. Primary Key 모든 레코드가 서로 다른 값을 가지고 있어 각 레코드를 식별할 수 있다. NULL값이 존재할 수 없다. 레코드의 값은 중복이 불가능하다. 테이블에는 하나의 기본키만 가질 수 있지만 경우에 따라 1개 이상의 기본키를 정의할 수도 있다. (다수 열 기본 키, 복합 기본 키) PK 생성 CREATE TABLE user { id int PRIMARY KEY } PK로 사용하기를 원하는 컬럼에 PRIMARY KEY 붙여준다. 단, 이 때 기본키의 값을 가진 컬럼은 중복값과 NULL값이 없어야 한다. 기본키를 설정해두면 해당 컬럼에 중복값을 INSERT하려고 할때 작동..

버블 정렬

정의 Bubble Sort는 Selection Sort와 유사한 알고리즘으로 서로 인접한 두 원소의 대소를 비교하고, 조건에 맞지 않다면 자리를 교환하며 정렬하는 알고리즘 이다. 이름의 유래로는 정렬 과정에서 원소의 이동이 거품이 수면으로 올라오는 듯한 모습을 보이기 때문에 지어졌다고 한다. Process 1회전에 첫 번째 원소와 두 번째 원소를, 두 번째 원소와 세 번째 원소를, 세 번째 원소와 네 번째 원소를, … 이런 식으로 (마지막-1)번째 원소와 마지막 원소를 비교하여 조건에 맞지 않는다면 서로 교환한다. 1회전을 수행하고 나면 가장 큰 원소가 맨 뒤로 이동하므로 2회전에서는 맨 끝에 있는 원소는 정렬에서 제외되고, 2회전을 수행하고 나면 끝에서 두 번째 원소까지는 정렬에서 제외된다. 이렇게 정..