Backend/Spring4 @ElementCollection으로 다중 선택 값 관리하기 들어가며동행 플랫폼을 개발하면서 동행 글 작성 시 활동 유형(ActivityType) 과 나이 조건(AgeCondition) 을 여러 개 선택할 수 있도록 구현해야 했다. 이를 어떻게 저장할지 고민하다가 JPA의 @ElementCollection을 활용한 경험을 공유한다.문제 상황동행 글 생성 요청 DTO는 아래와 같다.{ "title": "같이 여행 가요", "activityTypes": ["DRINK", "FOOD"], "ageConditions": ["TWENTIES", "THIRTIES"]}activityTypes와 ageConditions가 복수 선택이 가능한 구조다. 이를 DB에 저장하는 방법은 크게 세 가지가 있다.저장 방법 비교방법 1. 단일 컬럼에 문자열로 직렬화@Column(nam.. 2026. 2. 21. JPA Single Table Inheritance로 작성자/참여자 관리하기 들어가며동행 플랫폼을 개발하면서 동행 글의 작성자와 참여자를 어떻게 관리할지 고민하게 됐다. 둘 다 "동행 글에 속한 유저"라는 공통점이 있지만, 역할이 다르다. 이를 JPA의 Single Table Inheritance 전략으로 해결한 경험을 공유한다.문제 상황동행 글(Companion)에는 두 종류의 유저가 존재한다.작성자(Author): 동행 글을 생성한 사람참여자(Participant): 동행 글에 참여한 사람이를 별도 테이블로 관리하면 아래처럼 된다.companion_authors companion_participants───────────────── ─────────────────────id idcompanion_id co.. 2026. 2. 21. Spring Modulith로 모듈 간 의존성 관리하기 + DIP 적용기 들어가며모놀리식 서버를 개발하다 보면 어느 순간 모듈 간 의존성이 엉켜있는 걸 발견하게 된다. A 모듈이 B 모듈을 참조하고, B가 C를 참조하고, C가 다시 A를 참조하는 순환 의존이 생기거나, 특정 모듈이 너무 많은 모듈에 의존하게 되는 문제가 발생한다.이번 포스팅에서는 Spring Modulith로 모듈 경계를 강제하고, DIP(의존성 역전 원칙) 를 적용해 모듈 간 직접 참조를 제거한 경험을 공유한다.문제 상황여행 동행 플랫폼을 개발하면서 companion 모듈이 user 모듈을 직접 참조하고 있었다.// CompanionServiceImpl.java@Service@RequiredArgsConstructorpublic class CompanionServiceImpl implements Compan.. 2026. 2. 21. Spring Security와 JWT 기반 인증 필터 검색만 해도 나오는 Spring Security의 기본적인 흐름은 위 그림과 같다..실질적 구성은 해당 내용을 참조만 하여 커스텀하였다.토큰 기반 인증 흐름 구성1. 사용자 로그인 요청2. 서버에서 JWT 발급3. 클라이언트는 요청 시 JWT를 헤더에 포함4. JwtAuthenticationFilter에서 토큰 검증5. 인증 성공 시 SecurityContext에 인증 정보 저장6. 리소스 접근 허용SecurityConfig@Configuration@EnableWebSecurity@RequiredArgsConstructorpublic class SecurityConfig { private final JwtAuthenticationFilter jwtAuthenticationFilter; private fi.. 2025. 11. 26. 이전 1 다음