일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- JPA
- 프로그래머스
- Redis
- S3
- 디자인 패턴
- GIT
- Lv.0
- 배열
- spring boot
- 알고리즘
- mysql
- 일정관리 프로젝트
- Java
- 연습문제
- docker
- 일정관리프로젝트
- 코테
- LV02
- LV01
- 데이터 베이스
- SQL
- 이것이 자바다
- Til
- CoffiesVol.02
- LV03
- Join
- LV.02
- 포트폴리오
- LV1
- LV0
- Today
- Total
목록포폴 (37)
코드 저장소.

목차1.DLQ를 적용하기 위한 이유2.적용3.후기 1.DLQ를 적용하기 위한 이유Kafka 기반의 알림 시스템을 운영하면서, 메시지 컨슈머에서 특정 상황에서 예외가 발생하는 문제를 마주했습니다. 예를 들어 DB 저장 실패, WebSocket 전송 실패, 직렬화 오류 등 다양한 이유로 Consumer에서 예외가 발생할 수 있습니다. Kafka에서는 기본적으로 Consumer가 예외를 던지면 해당 파티션의 메시지 소비가 멈춰버립니다. 이런 구조에서는 일시적인 오류 하나로 인해 전체 알림 시스템이 영향을 받을 수 있습니다. 이를 해결하기 위해 DLQ(Dead Letter Queue) 를 도입했다. DLQ는 실패한 메시지를 별도의 토픽으로 격리시켜 메시지 유실을 방지하고, 이후에 재처리 로직을 통해 운영..

목차1.기존의 코드의 문제점2.왜 Kafka를 사용을 했는가?3.적용4.후기 1.기존 코드의 문제점현재 일정관리프로젝트에서는 스프링 이벤트 드라이븐을 사용해서 단일 인메모리 이벤트 처리로 후처리를 하고 있지만 해당 방식에는 다음과 같은 문제가 있습니다. 비동기 처리라 해도 같은 서버 내에서만 작동→ 서버가 죽거나 장애가 발생하면 스프링 이벤트는 영속성이 없어서 유실이 된다는 점입니다. 후처리 로직이 많아질수록 하나의 서비스에 부하 집중서비스 간 확장 어려움→ 향후 알림 시스템을 별도 분리하고자 할 때 제약이 됩니다. 결론적으로, 비동기 이벤트 처리의 영속성, 확장성, 결합도 측면에서 한계를 드러내기 시작했다.2.왜 Kafka를 사용을 했는가?카프카는 분산 메시징 시스템입니다. 물론 Kafka의 대안으로..
목차1.문제점2.고민3.적용4.후기5.향후 개선 예정 1.문제점프로젝트에서 일정 등록 기능을 구현하면서 가장 까다로웠던 부분은 일정 간의 충돌 여부를 어떻게 판별할 것인가였습니다. 처음에는 단순히 시작시간 기존 시작시간이면 충돌이라고 생각했지만, 실제 서비스에선 다음과 같은 문제가 발생했다:하루 종일 일정과 시간대 일정이 겹치는 경우 어떻게 볼 것인가?이틀 이상 걸친 일정(MULTI_DAY)과 단일 일자의 겹침은 충돌인가?기존 일정을 수정할 때, 자기 자신도 충돌로 판단되어 등록이 안 되는 문제결국, 일정이라는 도메인은 단순한 시간 범위의 겹침 문제가 아니라 일정의 “의미와 목적”에 따라 판단 기준이 달라져야 한다는 점을 깨달았다.2.고민기존 충돌 로직의 한계를 넘기 위해, 일정 자체에 타입(Sched..

목차1.모듈을 변경하게 된 이유2.적용 후3.마무리 1.모듈을 변경하게 된 이유 프로젝트를 시작을 했을때 멀티모듈과 헥사고날 아키텍처를 도입했다. 도메인과 외부 세계를 분리하려는 시도였고, 이론적으로는 나쁘지 않았습니다. 아래는 당시의 구조입니다.member/├── api│ └── controller├── core│ ├── service│ ├── enumerate│ ├── exception│ ├── model├── connector│ ├── api-model│ ├── in-connector│ ├── out-connector│ └── interfaces├── infrastructure│ ├── api-client│ └── rdb 헥사고날 아키텍처의 철학을 반영하려 했..

목차1.왜 이벤트 드리븐인가? (비동기, 느슨한 결합의 필요성)2.이벤트 드리븐 아키텍처란? 3.일정 관리 프로젝트 구조에 적용하기. 1.왜 이벤트 드리븐인가? (비동기, 느슨한 결합의 필요성)기존의 웹 애플리케이션은 대부분 RESTful API 기반의 동기식 통신 구조를 사용합니다. 이 방식은 구조가 단순하고 개발이 쉽지만, 다음과 같은 단점이 있습니다.:서비스 간 강한 결합도 발생기능 추가/변경 시 기존 코드 수정이 필요처리 속도 저하 (모든 후처리를 요청 스레드에서 처리함)예를 들어, 내가 개발 중인 일정 관리 프로젝트에서는 단순히 일정을 생성하는 것뿐 아니라, 다음과 같은 후처리 작업이 필요했습니다:실시간 WebSocket 알림 전송반복 일정 자동 생성회원가입시의 이메일 발송일정 변경/삭제에 따른..
목차1.도입 배경2.기술 스택 및 선택 이유3.전체 구성4.OpenFeign로 OpenAi 연동하기5.프롬프트 설계 및 응답 처리6.예외 및 장애 대응7.결과 및 테스트8.회고 및 다음단계1.도입 배경일정관리 프로젝트를 진행하면서 사용자의 하루 일정에서 비어 있는 시간대를 찾아 AI가 추천 일정을 제공해주는 기능이 필요했다. 이를 위해 OpenAI의 Chat Completions API를 사용해 프롬프트 기반 일정 생성을 시도했고, 통신은 OpenFeign + Spring Cloud를 사용해 안정적으로 구성했다.2.기술 스택 및 선택 이유Spring Boot 3.2: 기본 백엔드 프레임워크OpenFeign: 외부 API(OpenAI) 호출 간결화Resilience4j: 장애 발생 시 fallback 처..