[CI/CD] CI/CD Pipeline 구축 (4) - Docker 빌드 & 레지스트리
해당 프로젝트의 전체소스는 여기 에서 확인하실 수 있습니다. 1. Docker 도입 배경 Spring Boot 애플리케이션을 직접 jar로 배포하는 방식에는 몇 가지 한계가 있었습니다. 서버 환경(OS, JDK 버전, 네트워크 세팅)이 다르면 실행 환경 불일치 발생 배포할 때마다 빌드/실행 환경을 맞춰야 하는 번거로움 여러 서버(E...
해당 프로젝트의 전체소스는 여기 에서 확인하실 수 있습니다. 1. Docker 도입 배경 Spring Boot 애플리케이션을 직접 jar로 배포하는 방식에는 몇 가지 한계가 있었습니다. 서버 환경(OS, JDK 버전, 네트워크 세팅)이 다르면 실행 환경 불일치 발생 배포할 때마다 빌드/실행 환경을 맞춰야 하는 번거로움 여러 서버(E...
해당 프로젝트의 전체소스는 여기 에서 확인하실 수 있습니다. 5. IAM Role & Policy 설계 EC2 인스턴스가 SSM을 통해 원격 명령을 받으려면, 인스턴스에 적절한 IAM Role을 부여해야 합니다. EC2 Role (Instance Profile) AmazonSSMManagedInstanceCore...
해당 프로젝트의 전체소스는 여기 에서 확인하실 수 있습니다. 1. EC2 인스턴스 생성 CI/CD 파이프라인을 구축하기 위한 실행 환경으로 EC2 인스턴스를 생성합니다. 운영 서버로 사용할 것이기 때문에, 다음과 같이 환경을 구성했습니다. OS 키페어 나중에 로컬에서 인스턴스 서버에 직접 접속하여 헬스 체크, 서버 로그 등을 확인하기 위...
프로젝트 개발 과정에서 AWS의 여러 서비스를 적용해보면서, 단순한 배포를 넘어 CI/CD 파이프라인까지 직접 구축하게 되었습니다. 이번 포스팅의 시리즈에서는 제가 경험한 과정을 기록하고, 배운 점들을 정리해보려고 합니다. 해당 프로젝트의 전체소스는 여기 에서 확인하실 수 있습니다. 이번 시리즈는 AWS의 S3 Bucket과 RDS My...
TaskFlow 과제를 진행하면서 겪은 트러블슈팅의 과정들에 대한 기록입니다. 해당 프로젝트의 전체소스는 여기 에서 확인하실 수 있습니다. 트러블슈팅 ⭐️ 주제 @PreAuthorize 권한 실패 시 500 에러 발생 왜 AccessDeniedHandler가 아닌 GlobalExceptionHandler가 호출되었을까? 🔥 발생 ...
Spring 심화 과제를 진행하면서 겪은 트러블슈팅의 과정들에 대한 기록입니다. 해당 프로젝트의 전체소스는 여기 에서 확인하실 수 있습니다. 트러블슈팅 ⭐️ 주제 @WebMvcTest에서 커스텀 HandleMethodArgumentResolver(AuthUserArgumentResolver)를 @MockBean으로 대체했는데도 진짜 Reso...
NPE이란? NullPointerException의 약자로, null인 것으로부터 필드나 메서드 등을 호출하려 할 때 발생하는 RuntimeException이다. 에러 메세지로 어디서 null이 발생했는지 파악하기가 어렵다. 서비스 운영 중 장애로 이어질 수 있다. null 체크를 위한 코드로 인해 가독성이 떨어진다. Optio...
뉴스피드 프로젝트를 진행하면서 겪은 트러블슈팅의 과정들에 대한 기록입니다. 해당 프로젝트의 전체소스는 여기 에서 확인하실 수 있습니다. 트러블슈팅 ⭐️ 주제 EmbeddedId로 복합키를 사용할 때 JPA save() 시 불필요한 SELECT 쿼리 발생 문제와 Persistable을 통한 해결 🔥 발생 BoardLike Entity에서 E...
커스텀 예외 기본 예제 및 설명은 여기에서 확인하실 수 있습니다. Spring에서 커스텀 예외가 필요한 이유 응답 일관성: 모든 실패를 같은 JSON 스키마로 반환 관심사 분리: Controller/Service는 throw만, 포맷팅은 전역 핸들러가 담당 테스트 용이성: 케이스별 예외 타입으로 분기 테스트가 쉬움 패키지 ...
스트림이란? 스트림(Stream)은 Java8에서 도입되었으며, 컬렉션(Collection), 배열(Array), I/O 자원 등에 저장된 요소들을 함수형 스타일로 처리할 수 있게 해주는 API이다. 반복문을 대체할 수 있는 강력한 도구로, 간결한 코드, 가독성 향상, 병렬 처리 지원이라는 장점을 가진다. 하지만 재사용 불가, 디버깅 어려움,...