일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 1차원 DP
- 2차원 dp
- 99클럽
- @BeforeAll
- @BeforeEach
- @Builder
- @Entity
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Query
- @Table
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- api gateway 설계
- api gateway 필터
- ApplicationEvent
- assertThat
- async/await
- AVG
- AWS
- aws eks
- AWS 프리티어
- Azure
- bind
- bitnami kafka
- Today
- Total
목록Web/Spring (30)
기록
보호되어 있는 글입니다.
이전 포스팅에서는 도메인별로 나눠진 멀티 모듈 구조(service-membership, service-movie 등)를 소개했었다.하지만 실제 실습을 진행하면서 몇 가지 한계를 느꼈다.Redis 캐싱 최적화와 같은 기능 중심 개발을 하기에 도메인별 분리는 오히려 복잡했다.도메인 간 기능이 얽힐 때, 레이어 경계를 넘는 작업이 불필요하게 많아졌다.유지보수성과 테스트 효율성을 위해 더 명확한 계층 분리가 필요했다.그래서 이번엔 도메인 중심이 아닌 Layer 중심의 구조로 재설계했다. 이 글은 그 구조와 설계 의도를 간단히 정리한 글이다.🧱 새로운 프로젝트 구조platform (루트 프로젝트)├── bootstrap # 애플리케이션 실행 모듈 (모든 모듈 통합 실행)├── ..
이번 포스팅에서는 영화 정보를 관리하는 service-movie 모듈을 헥사고날 아키텍처(Hexagonal Architecture) 기반으로 설계하고 구현한 과정을 자세히 소개한다. 이번에는 도메인 중심으로 책임을 분리하는 헥사고날 아키텍처의 힘을 실제 프로젝트에 적용해봤다.🎯 왜 헥사고날 아키텍처를 적용했는가?일반적인 계층형 구조에서는 Controller, Service, Repository로 기능을 나누지만, 시간이 지나면서 Service에 모든 책임이 몰리고, 비즈니스 규칙과 기술 코드가 뒤섞이기 쉬웠다.헥사고날 아키텍처는 다음과 같은 명확한 목표를 가지고 있다:핵심 도메인 로직 보호: 비즈니스 핵심 규칙은 외부 기술(JPA, Redis 등)에 의존하지 않아야 한다.기술 독립성 확보: 외부 시스템..
최근에 영화 예매 시스템을 멀티 모듈 구조로 구성해봤다. DDD + 헥사고날 아키텍처를 바탕으로 각 기능을 명확히 분리하고, 유지보수성과 확장성을 고려한 구조다. 이 글에서는 프로젝트 구조, 각 모듈의 역할, 그리고 설계 의도를 정리해본다.📦 프로젝트 구조platform├── bootstrap # 모든 모듈을 실행하는 엔트리 포인트├── common # 공통 모듈 (DTO, 설정, 예외, 유틸 등)├── service-membership # 회원 관리 서비스├── service-movie # 영화 정보 및 상영 일정 관리└── service-reservation # 좌석 예약 및 예약 상태 관리platfo..
시작점최근에 영화관 서비스의 관리자 화면 API를 설계하면서 이런 요구사항이 생겼다.영화 상세 정보를 조회할 때, 해당 영화의 상영 일정 리스트를 함께 내려주자.예를 들어, MovieInfoDetailDto 라는 DTO 안에 List가 포함된 구조다.public class MovieInfoDetailDto { private Long movie_id; private String title; private String description; private Long movie_info_id; private LocalDate releaseDate; private String director; private List schedules;}내가 처음 든 생각은 "QueryDSL로..
시작하면서Spring에서 multipart/form-data 요청을 처리할 때, 파일과 리스트(List) 데이터를 함께 전송하는 방법이 일반적인 application/json 요청과 다르다.특히, List 같은 배열 데이터를 JSON으로 보내도 Spring이 자동 변환하지 못하는 경우가 있다.이 글에서는 Spring이 multipart/form-data 요청에서 List를 자동 변환하도록 처리하는 방법을 정리한다.📌 문제 상황: multipart/form-data에서 리스트(List)를 받을 수 있을까?multipart/form-data는 파일과 데이터를 함께 전송할 수 있는 HTTP 요청 방식이다.그러나, 아래와 같이 리스트(List) 데이터를 JSON으로 보내도 Spring이 자동 변환하지 않는다...
1. 오류 상황Spring Boot + JPA/Hibernate 환경에서 아래와 같은 오류를 만났다.org.springframework.dao.InvalidDataAccessApiUsageException:org.hibernate.TransientObjectException: object references an unsaved transient instance -save the transient instance before flushing: com.example.model.AnswerHistoryEntity이 오류는 영속화되지 않은(transient) 엔티티를 다른 엔티티와 함께 저장하려고 할 때 발생한다.예제 코드@Transactionalfun createQuizChallenge(req: Challen..
테스트 코드에서 assertThat을 사용할 때 가장 큰 장점은 가독성과 다양한 조건 메서드입니다. 아래 글에서는 assertThat과 함께 자주 사용하는 주요 메서드를 정리하고 예제 코드를 통해 각각의 메서드가 어떤 상황에 적합한지 설명하겠습니다.1. 기본 비교 메서드1-1. isEqualTo(expected)실제 값이 기대 값과 같은지 비교합니다. 가장 기본적인 비교 메서드입니다.assertThat(10).isEqualTo(10);assertThat("Hello").isEqualTo("Hello");1-2. isNotEqualTo(expected)실제 값이 기대 값과 같지 않은지 비교합니다.assertThat(10).isNotEqualTo(5);assertThat("Hello").isNotEqualT..