From 5281c0973755eb82f3c639ddea5e8f45abbc4da9 Mon Sep 17 00:00:00 2001 From: ChoiMinSang Date: Thu, 9 Apr 2026 23:39:52 +0900 Subject: [PATCH] =?UTF-8?q?keyword:=204=EC=A3=BC=EC=B0=A8=20=ED=82=A4?= =?UTF-8?q?=EC=9B=8C=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keyword/chapter04/images/image.png | Bin 0 -> 54030 bytes keyword/chapter04/keyword.md | 150 +++++++++++++++++++++++++++++ 2 files changed, 150 insertions(+) create mode 100644 keyword/chapter04/images/image.png create mode 100644 keyword/chapter04/keyword.md diff --git a/keyword/chapter04/images/image.png b/keyword/chapter04/images/image.png new file mode 100644 index 0000000000000000000000000000000000000000..2c894cc9ecaefa302200293eea01efd94a5223e7 GIT binary patch literal 54030 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 literal 0 HcmV?d00001 diff --git a/keyword/chapter04/keyword.md b/keyword/chapter04/keyword.md new file mode 100644 index 0000000..3ada5c4 --- /dev/null +++ b/keyword/chapter04/keyword.md @@ -0,0 +1,150 @@ +- 아키텍처 구조란? + + > 프로젝트의 구조와 원칙을 정의하는 과정으로 폴더 구조를 정리하는 것을 넘어, 각 구성 요소가 어떻게 상호작용하고 유지보수될 지를 명확히 하는 것 + > + + **[아키텍처 설계의 핵심 요소]** + + - 프로젝트의 목적과 요구 사항의 명확한 정의 + - 설계 원칙을 문서화하고 공유 + - 설계 원칙은 유연해야 한다 + - 설계 원칙은 구체적이어야 한다 + + **[아키텍처 설계의 장점]** + + - 팀원 간의 원활한 소통 + - 프로젝트의 일관성 유지 + - 유지보수의 용이성과 확장성 + + **[대표적인 아키텍처 패턴]** + + - **모놀리식 아키텍처(Monolithic)**: FE, BE, DB를 하나로 통합하여 단순하고 빠른 초기 배포 + - **마이크로서비스 아키텍처(MSA)**: 기능을 작은 서비스 단위로 분리하여 독립적인 배포 및 확장이 가능 + - **계층형 아키텍처(Layered Architecture)**: 표현, 비즈니스, 데이터 계층 등으로 역할을 분리 + + +- Swagger란? + + > Swagger란 웹 서비스 명세를 자동으로 문서화해주는 오픈소스 소프트웨어 프레임워크 + > + + **[API 명세를 만드는 이유]** + + - FE, BE가 분리된 환경에서 데이터를 주고 받기 위해 API를 개발하는데, 이때 둘 사이의 소통을 위해 문서로 API의 사용법과 명세를 남기는 것이 효율적이기 때문 + + **[Swagger 라이브러리 종류]** + + - **Spring-fox**: 2020년 이후로 업데이트가 중지됨(SpringBoot 3버전 이상 사용시 문제 발생 가능성) + - **Spring-Doc**: 꾸준히 업데이트 중 + + **[Swagger의 단점]** + + - 프로그램 배포 전에는 다른 팀에서 접근이 불가 + + **[Swagger 외의 명세서 작성법]** + + 1. **노션** + - 마크다운을 통한 자유로운 작성 + - 프로그램 배포 전에도 FE팀에서 접근 가능 + - Swagger와 달리 수정과 추가를 직접 관리해야 함 + 2. **Postman** + - 설계, 테스트, 문서화 등 API 개발을 위한 다양한 기능 + - api 구현 전에 문서화 가능 + + +- 도메인형 아키텍처란? + + > 비즈니스 로직에 중점을 둔 아키텍처, 도메인(비즈니스 기능) 중심으로 코드를 작성 + > + + **[패키지 구조 예시]** + + ![image.png](./images/image.png) + + **[도메인형 아키텍처 장점]** + + - 도메인별 응집도가 높아진다 + - 도메인의 흐름을 파악하기 쉽다 + - 도메인과 관련된 변경이 있을 때, 변경 범위가 적다 + - 유스케이스별로 세분화해서 표현이 가능하다 + + **[도메인형 아키텍처 단점]** + + - 애플리케이션의 전반적인 흐름을 한 눈에 파악하기가 어렵다 + - 흐름 파악을 위해 여러 패키지를 왔다갔다 해야할 가능성이 높다 + - 관점에 따라 패키지 구분이 애매한 클래스들이 존재 + - ex) 최초 화면 페이지 + + +- DDD vs 도메인형 아키텍처 + + > DDD는 ‘모델링’에 도메인형 구조는 ‘코드 조직화’에 초점 + DDD를 적용하기 위해 도메인형 패키지 구조를 채택한다. + > + + **[DDD(Domain-Driven Design)]** + + - DDD(Domain-Driven Design)는 복잡한 비즈니스 로직 해결을 위한 설계 방법론(철학) + - 구성요소 + - 엔티티(Entity), 밸류 객체(Value Object), 도메인 서비스(Domain Service), 레포지토리(Repository) 등 + + **[도메인형 아키텍처]** + + - DDD를 구현하기 위해 도메인(기능)별로 코드를 구성하는 방식 + - 코드의 디렉토리 구조를 도메인 기능 단위로 묶는 방식 + - 관련 기능의 높은 응집도, 계층간의 낮은 결합도를 유지 + - 계층형 아키텍처의 단점인 ‘기술 위주의 패키지 분리’를 극복하기 위해 사용되며, 특정 도메인 변경이 다른 도메인에 영향을 미치지 않도록 설계 + + **[결론]** + + - DDD는 "무엇을 어떻게 모델링할 것인가"에 대한 지침이고, 도메인형 아키텍처는 그 모델을 "어떻게 코드 구조로 보여줄 것인가"에 대한 답변입니다 + + +- 왜 DTO를 사용하는가? + + > DTO는 Data Transfet Object의 약자로 ‘데이터 전송 객체’를 의미한다. + > + + 계층(View, Controller, Service 등) 간 데이터 전송을 위해 도메인 모델 대신 사용되는 객체 + + **[Entity와 DTO의 역할 차이]** + + - **Entity**: DB와 직접 연결되는 핵심 모델 + - **DTO**: View나 API를 위한 가공된 데이터 객체 + + **[Entity(도메인 모델) 대신 DTO 사용 이유]** + + 1. **관심사의 분리** + - Entity는 데이터가 저장되는 DB와 직접적으로 관련되어 있는 객체로, 테이블의 구조에 맞게 설계된 Entity는 최대한 수정하지 않는 것이 안정적인 모델이다. + - 그에 반해, 표현 계층에서 View의 요구사항에 따라 전달되는 데이터의 구조가 자주 바뀔 수 있다. + - 또한 Entity는 View에 노출하면 안되는 민감 정보를 가지고 있어, View에 전달하면 안된다. + + > 즉, 각 계층의 관심사가 달라서 생기는 차이이고, 각 계층에 맞게 데이터를 담는 객체도 구분해주는 것이 필요하다. + > + + 2. **서버(Controller)의 호출을 최소화하기 위해** + - 원격 인터페이스로 작업을 할 때, 호출에 따른 비용은 매우 비싸다. + - 요청에 대한 모든 데이터를 보관할 수 있는 데이터 전송 객체를 만들어서 이를 해결한다. + - DTO를 통해 한 번의 호출로 여러 매개변수를 일괄 처리해서 서버의 왕복을 줄인다. + + +- 컨버터는 왜 사용하는가? + + > 컨버터(Converter)란 DTO를 Entity로, 혹은 Entity를 DTO로 변환하는 로직 + > + + **[컨버터가 필요한 이유]** + + - Entity는 실제 DB 테이블과 매핑되는 클래스, DTO는 API를 통해 client에 전달할 데이터 양식이다. + - 둘의 목적이 다르기 때문에 형태를 바꿔줘야 하는데, **이 변환 작업을 담당하는 코드**를 컨버터라고 한다. + + **[주요 역할]** + + - **계층간 분리**: Entity가 변경되어도 API 스펙은 그대로 유지할 수 있어서 유지보수가 용이해진다. + - **보안**: DB에 저장된 민감 정보가 노출되는 것을 방지한다. + - **데이터 가공**: DB에는 따로 저장이 되어 있지만, 화면에 합쳐서 보여줘야할 때 컨버터에서 이 로직을 처리한다. + + **[실제 사용 방법]** + + 1. **수동변환**: `toEntity()`, `fromEntity()` 같은 메서드를 만들어서 옮겨 담는다. + 2. **라이브러리 활용**: MapStruct나 ModelMapper 같은 라이브러리를 통해 설정해서 사용한다. \ No newline at end of file