Jenkins (5) - Docker 이미지 빌드와 로컬 배포하기
1. 개요 앞선 글에서는 Jenkins Pipeline으로 Spring Boot 프로젝트를 테스트했다. 이번에는 테스트를 통과한 JAR를 Docker 이미지로 만들고, 기존 컨테이너를 새 이미지로 교체해 로컬에서 실행한다. 이 글의 Jenkins는 Docker Desk…

1. 개요 앞선 글에서는 Jenkins Pipeline으로 Spring Boot 프로젝트를 테스트했다. 이번에는 테스트를 통과한 JAR를 Docker 이미지로 만들고, 기존 컨테이너를 새 이미지로 교체해 로컬에서 실행한다. 이 글의 Jenkins는 Docker Desk…

1. 개요 Spring Boot 프로젝트를 처음 만들면 JPA의 ddl auto: update 로 테이블을 만드는 경우가 많다. 엔티티만 고치면 개발용 DB 구조가 따라오므로 시작하기 편하다. 하지만 프로젝트가 커지고 개발·테스트·운영 DB가 나뉘면, 같은 코드라도 D…
1. 개요 앞선 글에서는 테스트를 통과한 Spring Boot 애플리케이션을 Docker 이미지로 만들어 Docker Hub에 푸시했다. 이미지를 저장소에 올리는 것만으로는 EC2에서 실행 중인 컨테이너가 바뀌지 않는다. 이 글에서는 main 브랜치에 푸시하면 테스트,…
1. 개요 GET /schedules/{scheduleId}/seats 는 컨트롤러만 정상이라고 해서 충분하지 않다. 요청 경로가 컨트롤러에 연결되고, 서비스가 회차와 좌석을 조회하고, JPA가 DB에서 데이터를 읽고, 마지막으로 JSON 응답까지 만들어져야 한다. 이…
1. 개요 테스트가 통과한 Spring Boot 애플리케이션을 실행 가능한 형태로 전달하려면, JAR와 JRE를 함께 묶은 Docker 이미지가 편리하다. 이 글에서는 Gradle 테스트 Job이 성공했을 때만 Spring Boot 이미지를 빌드하고 Docker Hub…
1. 개요 앞 글의 단위 테스트는 서비스 클래스 하나의 규칙을 빠르게 확인했다. Spring Data JPA 저장소를 사용할 때는 엔티티 매핑과 쿼리도 함께 검증해야 한다. 이 글에서는 H2 인메모리 데이터베이스를 사용하는 @DataJpaTest 를 만들고 GitHub…
1. 개요 첫 워크플로가 실행되는 것을 확인했다면, 실제 Spring Boot 프로젝트의 테스트를 연결할 차례다. 이 글에서는 서비스 클래스의 JUnit 단위 테스트를 예시로, main 브랜치에 푸시하거나 풀 리퀘스트를 열 때마다 Gradle의 test 태스크를 실행한…
1. 개요 코드를 원격 저장소에 올린 뒤 매번 직접 빌드와 테스트를 실행하면 확인을 빼먹기 쉽다. GitHub Actions는 push , 풀 리퀘스트 같은 이벤트가 발생할 때 저장소의 작업을 자동으로 실행하는 도구다. 이 글에서는 GitHub Actions의 구성 요…
1. 개요 공연 예매 API의 GET /schedules/{scheduleId}/seats 는 회차의 좌석 목록을 돌려준다. 그런데 없는 회차 ID로 요청하면 어떻게 응답해야 할까? 처음 구현에서는 서비스가 IllegalArgumentException 을 던졌고, 이를…
1. 개요 공연 예매 서비스에서 Performance 는 공연 제목과 공연장 정보를 가진 엔티티다. 이 엔티티를 데이터베이스에 저장하거나 ID로 다시 찾으려면 SQL을 직접 작성할 수도 있지만, Spring Data JPA의 JpaRepository 를 사용하면 기본적…