프로젝트 README.md v1.0
개요 주요 아키텍처 패턴 멀티 모듈 Gradle 프로젝트 헥사고날 아키텍처 (Ports & Adapters) DDD (Domain-Driven Design) 원칙 적용 마이크로서비스 아키텍처 기반 모듈 설계 계층 분리: Presentation (API) → Application → Domain ← Infrastructure...
개요 주요 아키텍처 패턴 멀티 모듈 Gradle 프로젝트 헥사고날 아키텍처 (Ports & Adapters) DDD (Domain-Driven Design) 원칙 적용 마이크로서비스 아키텍처 기반 모듈 설계 계층 분리: Presentation (API) → Application → Domain ← Infrastructure...
I. 문제 상황: Presentation 모듈의 정체성 혼란 1. 기존 구조 프로젝트 초기 구조는 다음과 같았다. connectors-backend/ ├── core/ ├── setting/ │ ├── cache/ │ ├── database/ │ ├── storage/ │ └── external/ ├── presentation/ ...
I. 문제 상황 Course(강의) 엔티티와 Skill(기술) 엔티티는 다대다 관계로 연결되어 있다. 하나의 Course는 여러 Skill을 가질 수 있고, 각 Skill도 여러 Course에 연결될 수 있다. 이 관계는 course_skill이라는 매핑 테이블로 관리된다. course 테이블 course_skill 테이블 ...
I. 문제 상황 Spring Batch를 활용해 강의 데이터를 처리하는 배치 작업을 구현했다. 약 5000여건의 강의 데이터를 Chunk Size 1000으로, MySQL 및 Opensearch에 저장하는 구조로 구성했다. 특히 Opensearch에 저장되는 데이터 중 제목, 설명, 난이도 등을 OpenAI Embedding API로 벡터화한 후 저...
I. 문제 상황 (그림 I-1) 기능 개선 전, 배치 실행 결과 공공 API로부터 전국의 기업 정보를 동기화하는 배치 기능을 구현했다. 약 120만 건의 데이터를 페이지네이션 방식으로 가져와 데이터베이스에 저장하는 단순한 작업이지만, 처리 시간은 예상보다 훨씬 길었다. 총 데이터: 약 1,200,000건 페이지당 데이터: 1,000건 총 페이지...
이전 글에서 CI 최적화를 통해 변경된 모듈만 테스트하는 방법을 다뤘다면, 이번에는 CD(Continuous Delivery)를 최적화 방법을 정리해보려 한다. I. 문제 상황: 불필요한 배포 멀티모듈 프로젝트에서 CD를 구성할 때 마주하는 가장 큰 문제는 불필요한 배포가 너무 자주 발생한다는 것이다. 예를 들어 프로젝트 구조가 다음과 같다고...
멀티모듈 프로젝트가 커질수록 CI 파이프라인의 실행 시간이 기하급수적으로 증가한다. 특히 단일 모듈만 수정했을 뿐인데 전체 모듈의 테스트가 실행되면, 개발자는 불필요하게 긴 시간을 기다려야 한다. 이번 글에서는 GitHub Actions를 활용해 변경된 모듈만 감지하고, Matrix Strategy로 병렬 테스트를 수행하는 방법을 정리해보려 한다. ...
멀티모듈 및 DDD로 구성한 사이드 프로젝트 진행 중 BE 팀원에게 이런 질문을 받았다. 어플리케이션 계층에 Repository의 Interface가 존재하는 이유가 뭔가요? 인프라 계층에서 Interface를 정의하고 구현하면 되지 않을까요? 어플리케이션 계층과 도메인 계층에서 공통적으로 서비스 패키지가 존재하는 이유가 뭔가요? 역할...
I. GHSA-j288-q9x7-2f5v gradle 설정 시, springdoc-openapi-starter-webmvc-ui에 대해 다음과 같은 취약점이 확인되었다. (그림 I-1) IntelliJ alert OSV 를 통해 확인했을 때, Apache Commons Lang 3 라이브러리가 원인이었다. 입력을 받았을 때 무한 재귀하는 문제...
1. 목적 SpringBoot 기반 프로젝트의 실시간 통신 시스템 구현. 순수 WebSocket과 STOMP, Redis Pub/Sub을 활용해 확장 가능하고 안정적인 실시간 통신을 목표로 한다. 예시로 구현한 사용자별 알림 기능뿐만 아니라, LLM + RAG를 통한 사용자 정보 분석 등 엔드 유저의 대기가 발생하는 모든 기능에 대응할 수 있도록...