728x90 320x100 💻 뚝딱뚝딱/북북클럽48 [개발일지 #046] 도커(Docker)로 MSA 통합 실행 환경 구축하기 (+ 자동화 스크립트) ✨ 왜 도커(Docker)로 MSA 통합 실행 환경 구축하는지현재 BookBookClub 프로젝트는 MSA 기반으로 구성되어 있어서 서비스가 user, post, notification, gateway 등 여러 개로 나뉨.근데 개발하거나 테스트할 때 각각 IntelliJ에서 따로 켜는 게 너무 번거롭고 비효율적이여서 Docker + docker-compose로 한 번에 통합 실행되게 설정함!Docker: 애플리케이션을 컨테이너라는 단위로 포장해 어디서든 실행 가능하게 해주는 도구.Docker Compose: 여러 컨테이너를 정의하고 한 번에 실행할 수 있는 설정 파일(docker-compose.yml) 포맷. 🛠️ 구현 방법1. 각 서비스에 Dockerfile 작성# 1. Java 17이 설치된 베이.. 2025. 6. 18. [개발일지 #045] Spring Cloud Gateway를 이용한 인증 구조 통합하기 🎯 오늘의 개발 내용 (요약)Spring Cloud Gateway를 이용한 인증 구조 통합하기 ✅ Spring Cloud Gateway란?API 요청의 진입점(Gateway)을 담당하는 경량 프록시 서버임.API 요청 흐름을 제어하거나, 공통 처리를 전담하는 데 사용되며, 그 중에서도 GlobalFilter 를 통해 모든 요청에 공통 로직(JWT 인증 등)을 적용할 수 있음. ✅ 도입이유 기존에는 각 서비스(user, post 등)가 직접 JWT 토큰을 검증했기 때문에 중복된 인증 로직이 생기고 코드가 분산되어 관리가 어렵고 마이크로서비스가 늘어날수록 유지보수가 힘들어지는 구조임.그래서! JWT 인증 책임을 Gateway로 통합하여 코드 중복 제거 인증 흐름 중앙 집중화 구조를 더 단순하고 안정적으로 .. 2025. 6. 18. [개발일지 #044] 알림 서비스 만들기 (Kafka 활용) 🎯 오늘의 개발 내용 (요약)Kafka 알림 시스템 구현 🧩 도입 배경BookBookClub은 책에 대한 피드와 소셜 기능을 제공하는 SNS로, 피드 작성, 좋아요, 팔로우 이벤트에 대해 사용자에게 실시간 알림을 제공하고자 알림 기능을 구현하게 되었음. 🏛️ 아키텍처 구조[post-service / user-service] --> Kafka Event 발행 --> [notification-service] 소비 및 저장 post-service: 피드 작성/좋아요 발생 시 Kafka 이벤트 발행user-service: 팔로우 생성 시 Kafka 이벤트 발행notification-service: Kafka Listener로 이벤트 수신 → DB 저장즉, notification-service로 별도 모듈을.. 2025. 6. 17. [개발일지 #043] 리팩토링 (5) - CustomUserDetails, FeignClient 그리고 record 🎯 오늘의 개발 내용 (요약)CustomUserDetails 변경하기DTO에 record 사용하기🛠️ 개발내용CustomUserDetails 리팩토링 배경기존의 CustomUserDetails 즉, JWT토큰 안에 유저 아이디를 비롯해 유저의 다양한 정보 등을 모두 담고 있어 그정보를 활용하여 조회를 하곤 했다. 그러나 닉네임이나 이미지 같은 경우는 자주 바뀌는 정보인데 JWT로 발급되면 바뀌지 않아 유저가 프로필 이미지를 바꿔도 이전 정보가 계속 담겨있거나 JWT에 너무 많은 정보를 담으면 노출 리스크가 커져서 위험해질 수 있음 그래서 토큰에는 유저 아이디 같이 최소한의 정보만 담고, 나머지 정보는 FeignClient 통신을 통해 가져올 수 있도록 수정하였음. CustomUserDetailsCus.. 2025. 6. 17. [개발일지 #042] 리팩토링 - (4) Feed 도메인 (단위 테스트, Postman 테스트 포함) 🎯 오늘의 개발 내용 (요약)FeedCommandService, FeedQueryService로 역할 분리 (커서기반 조회 적용)FeedCommandController, FeedQueryController로 역할 분리 🛠️ 개발내용 Feed/** * 피드(게시글) 엔티티 */@Entity@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)@AllArgsConstructor@EntityListeners(AuditingEntityListener.class)public class Feed { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(.. 2025. 6. 16. [개발일지 #041] 리팩토링 - (3) Follow 도메인 (단위 테스트, Postman 테스트 포함) 🎯 오늘의 개발 내용 (요약)Follow 엔티티에서 User와의 JPA 연관관계 제거FollowCommandService, FollowQueryService로 서비스 분리FollowCommandController, FollowQueryController로 서비스 분리 🛠️ 개발내용 Follow기존의 연관관계가 되어있었으나 MSA 환경에서 적절하게 사용하기 위해 연관관계를 제외하였다./** * 사용자 간 팔로우 관계를 나타내는 엔티티 */@Getter@Entity@NoArgsConstructor(access = AccessLevel.PROTECTED)public class Follow { /** 팔로우 고유 ID */ @Id @GeneratedValue(strategy = Generat.. 2025. 6. 16. 이전 1 2 3 4 ··· 8 다음 728x90 320x100