최근 들어 마이크로 서비스에 관련하여 책을 읽고, 관련 자료를 찾아보고 있다. 그런데 찾아보면서 도메인 주도 설계(DDD)라는 용어가 나오게 되었다. 그래서 DDD에 대해서 한 번 정리해보려고 한다. DDD란? 도메인 주도 설계(DDD, Domain-Driven Design)는 해당 도메인과 일치하도록 소프트웨어를 모델링하는 데에 중점을 둔 소프트웨어 설계 접근 방식이다. 요약하면 도메인 위주로 모델링, 즉 설계해 나아가는 방식을 말한다. Domain이란? 도메인은 소프트웨어나 애플리케이션에서 해결해야하는 문제를 나타낸다. 예를 들어, 택배를 관리하는 프로그램을 만든다고 가정하자. 택배를 주문하는 고객이 있을 수 있고, 판매하는 업체가 있을 수 있으며, 택배 물품을 관리하는 택배사가 존재할 수 있다. 위..
필자는 Back-End를 공부하는 입장에서 어떻게 하면 구조를 좋게 잡을지 고민이 많았다. 기존에는 하나의 프로그램에 모든 기능을 넣어서 실행하는 방식으로 진행해왔다. 실제로 프로젝트를 진행하면서 윗 줄의 내용처럼 진행을 하니, 한쪽에서 문제가 생겨 프로그램이 죽는다면 다른 모든 기능들을 사용할 수 없게 된다. 추가적으로 프로젝트의 규모가 조금씩 커지면서, 유지보수를 할 때 연관되어있는 부분이 있다면 함께 수정해야되서 비교적 까다로웠다. 그래서 프로그램을 개발할 때, 어떻게 구조를 가져가면 좋을지 알아보던 중, MSA라는 아키텍쳐를 알게 되었다. 그래서 이번에 MSA에 대해서 알게된 것, 기존 프로그램의 방식과의 차이점이 무엇인지 알아보려고 한다. 기존의 프로그램 구조, 모놀리식(Monolithic) ..
API란? API는 Application Programming Interface(응용 프로그램 프로그래미 인터페이스)의 약자이다. 응용 프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있는 인터페이스를 말한다. 쉽게 얘기하면 프로그램들이 상호작용 할 수 있게 도와주는 매개체 역할을 한다. API의 동작 원리 고객이 점원을 통해 음식을 주문한다. 점원에게 주문을 받은 요리사는 음식을 조리한다. 요리사가 음식 조리를 완료하면 점원에게 전달한다. 점원은 전달받은 요리를 고객에게 전달한다. 위 상황에서는 고객이 점원을 통해 음식을 주문하고, 요리사는 점원을 통해 고객에게 음식을 전달한다. 이를 프로그래밍에 접목을 하면 다음과 같이 설명할 수 있다. Client는 API를 통..
이진탐색트리란? 이진탐색트리는 다음의 조건을 만족하는 이진트리이다. 모든 노드는 각각 유일한 키(key)를 가진다. 루트 노드의 왼쪽 서브 트리는 루트 노드 보다 작은 키 값으로 이루어져 있다. 루트 노드의 오른쪽 서브 트리는 루트 노드 보다 큰 키 값으로 이루어져 있다. 좌우 서브 트리 모두 이진탐색트리이다. 이진트리에 정보가 필요하다면 참고하길 바란다. 2023.11.29 - [자료구조/비선형 자료구조(Non-Linear)] - [자료구조] 이진트리(Binary-Tree)란? [자료구조] 이진트리(Binary-Tree)란? 이진트리란? 각 노드가 최대 2개의 자식을 갖는 트리이다. 하나의 노드의 자식이 3개 이상은 이진트리로 볼 수 없다. 이진트리의 특징 각 노드는 최대 2개의 자식을 가질 수 있으며..
URI란? URI는 Uniform Resource Identifier의 약자로, 통합 자원 식별자로 불린다. URI는 인터넷에 있는 자원을 나타내는 유일한 주소이다. URI는 인터넷에 붙어다니는 기본 조건으로, 인터넷 프로토콜에 붙어다닌다. URI의 하위 개념으로 URL과 URN이 존재한다. URI는 다음과 같은 형태를 띄게 된다. scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment] URI와 구성 부분은 다음과 같이 나온다. hierarchical part ┌───────────────────┴────────────────────┐ authority path ┌───────────────┴──────────────┐┌───┴────┐ a..
이진트리란? 각 노드가 최대 2개의 자식을 갖는 트리이다. 하나의 노드의 자식이 3개 이상은 이진트리로 볼 수 없다. 이진트리의 특징 각 노드는 최대 2개의 자식을 가질 수 있으며, 왼쪽과 오른쪽 자식노드로 구분한다. 순회 방법은 전위 순회, 중위 순회, 후위 순회가 있다. 이진트리의 종류 전이진트리(Full Binary Tree or Strict Binary Tree) 모든 노드의 자식이 0개, 또는 2개의 자식을 갖는 트리를 말한다. 왼쪽 이미지의 경우, J의 노드가 K라는 자식을 갖고 있기 때문에 전이진트리가 성립하지 않는다. 오른쪽 이미지의 경우, 각 노드가 0개 또는 2개의 자식을 갖고있으므로 전이진트리가 성립한다. 완전이진트리(Complete Binary Tree) 마지막 레벨을 제외하고 모든..
트리란 트리는 그래프의 일종으로, 노드로 이루어진 계층적 구조이다. 한 노드를 시작으로 다른 노드를 순회하며 자기 자신에게 돌아오는 순환 없는 연결 그래프이다. 트리의 용어 루트 노드(Root Node): 트리 구조의 최상위 노드로, 모든 다른 노드들은 이 루트 노드에서 시작된다. 부모 노드(Parent Node): 다른 노드에게 연결된 상위 노드를 가리킨다. 자식 노드(Child Node): 부모 노드에 의해 직접적으로 연결된 하위 노드를 말한다. 잎 노드(Leaf Node): 자식 노드가 없는 노드로, 트리 구조의 끝에 위치한다. 서브 트리(Subtree): 트리 안에서 다른 트리를 포함하는 부분 트리를 의미한다. 형제(Sibling): 같은 부모를 가진 노드를 의미한다. 간선(edge): 노드를 연..
연결리스트란? 연결리스트는 데이터를 순차적으로 저장하는 단방향 선형구조이다. 각 요소는 노드로 구성되어 있으며, 각 노드는 자신의 데이터와 다음 노드를 가리키는 포인터(혹은 링크)로 이루어져 있다. 연결리스트의 특징 각 노드는 포인터(혹은 링크)를 갖고 있어 데이터가 일렬로 연결되는데, 한 방향으로만 탐색이 가능하다. 연결리스트의 시작을 알리는 헤드가 있는데, 이 헤드 노드는 첫 번째 노드를 가리키는 역할을 한다. 동적으로 크기를 조절할 수 있어 삽입과 삭제가 배열보다 간단하고 메모리 효율도 좋다. 특정 요소에 접근하기 위해서는 헤드부터 순차적으로 탐색해야 한다. 연결리스트의 연산으로는 노드 추가, 노드 삭제, 탐색이 있다. 연결리스트의 시간복잡도 노드 추가 노드 추가에는 크게 head에 추가, 마지막에..
덱이란? 덱은 "double-ended queue"의 줄인말로, 양끝에서 삽입 삭제가 가능한 큐를 의미한다. 즉, 덱은 큐와 스택의 특징을 모두 지닌다. 덱의 종류 스크롤(scroll) : 삽입이 한쪽 끝으로만 가능하도록 설정한 데크(입력 제한 데크) 셀프(self) : 삭제가 한쪽 끝으로만 가능하도록 설정한 데크(출력 제한 데크) 덱의 특징 덱은 양 방향에서 삽입과 삭제가 동시에 일어날 수 있다. 종류에 따라 스크롤 덱과 셀프 덱을 구현할 수도 있다. 동적으로 크기를 조절할 수 있다. 덱의 연산은 덱의 앞에 원소 추가, 덱의 뒤에 원소 추가, 덱의 앞에 있는 원소 삭제, 덱의 뒤에 있는 원소 삭제, 덱의 앞에 있는 원소 읽기, 덱의 뒤에 있는 원소 읽기, 사이즈 확인, 비어있는지 확인이 있다. 덱의 시..
WWW란? WWW(World Wide Web, W3)는 인터넷에서 정보를 공유하고 접근할 수 있는 시스템이다. 흔히 웹(Web)이라고 부르며, 전 세계적인 정보 공간을 일컫는다. 문서, 사진, 비디오 등의 정보가 하이퍼텍스트(Hypertext)로 연결되어 있으며, 하이퍼링크(Hyperlink)를 통해 다른 웹 페이지로 넘어갈 수 있다. 웹의 특징 분산된 정보 : 전 세계의 컴퓨터 네트워크에 연결된 다양한 서버에 분산된 정보를 의미하며, 각각의 정보는 웹을 통해 접근할 수 있다. 하이퍼텍스트와 하이퍼링크 : 웹의 정보는 하이퍼텍스트로 이루어져 있으며, 텍스트나 문서, 사진 등이 링크로 이루어져 있음을 의미한다. 검색과 탐색 : 웹 브라우저를 통해 검색 엔진을 사용하여 정보를 찾을 수 있으며, 하이퍼링크를 ..