IntelliJ HTTP Client를 활용한 Jenkins CI/CD 무중단 배포 및 자동 롤백 전략 (Docker & K8s)

개발자들에게 친숙한 IDE인 인텔리제이(IntelliJ IDEA)에는 강력한 API 테스트 도구인 .http 클라이언트가 내장되어 있습니다. 많은 분들이 이를 단순히 로컬 개발 환경에서 API를 호출해보는 용도로만 사용하지만, 사실 이 도구는 CI/CD 파이프라인의 핵심 안정성 검증 도구로 확장될 수 있는 잠재력을 가지고 있습니다. 특히 서비스 배포 과정에서 “배포 후 정상 작동 여부”를 사람이 직접 확인하는 것이 아니라, 스크립트를 통해 자동으로 검증하고 … 더 읽기

Spring Security 필터 체인(Filter Chain) 완벽 해부 및 커스텀 필터 적용 실무 가이드

Springsecurity

Spring Security의 진입 장벽이 높은 가장 큰 이유는 바로 ‘필터 체인(Filter Chain)‘이라는 독특한 아키텍처 때문입니다. 이 구조를 이해하지 못하면 단순히 코드를 복사해서 붙여넣는 수준을 벗어날 수 없습니다. 오늘은 이 블랙박스를 열어 내부 구조를 파악하고, 원하는 위치에 나만의 로직을 심는 방법을 마스터해 보겠습니다. Spring Boot로 개발을 진행하다 보면, spring-boot-starter-security 의존성을 추가하는 순간 모든 API 요청이 차단되고 로그인 페이지로 … 더 읽기

Spring Boot 테스트 완벽 가이드: JUnit5 단위 테스트부터 TestContainers 통합 테스트까지

Spring

소프트웨어 개발 수명 주기(SDLC)에서 ‘테스트’가 차지하는 비중은 날이 갈수록 커지고 있습니다. 과거에는 일정에 쫓겨 “기능 구현만 되면 배포”하는 문화가 만연했지만, 이제는 서비스의 복잡도가 증가하고 배포 주기가 짧아지면서 테스트 코드 없는 배포는 곧 재앙을 의미하게 되었습니다. 버그를 발견하는 시점이 늦어질수록, 즉 개발 단계에서 발견하는 것보다 운영 단계에서 발견했을 때 수정 비용이 수십 배에서 수백 배까지 증가한다는 … 더 읽기

Prometheus와 Grafana 완벽 가이드: Docker로 구축하는 서버 성능 모니터링 시스템

java

이전 포스팅에서 다룬 ELK Stack이 “과거에 무슨 일이 있었는지(Logs)“를 분석하는 도구라면, 오늘 다룰 Prometheus와 Grafana는 “현재 서버의 상태가 어떤지(Metrics)“를 진단하는 청진기와 같습니다. 지난 시간에 우리는 ELK Stack을 통해 대용량 로그를 통합 관리하는 방법을 배웠습니다. 이제 여러분은 특정 에러가 언제 발생했는지 로그를 통해 추적할 수 있는 능력을 갖추게 되었습니다. 하지만 로그만으로는 시스템의 전체적인 건강 상태를 파악하는 … 더 읽기

ELK Stack 완벽 가이드: Elasticsearch, Logstash, Kibana로 구축하는 대용량 로그 통합 관리 시스템

devops

지난 포스팅에서 Logback을 이용해 단일 서버 환경에서 로그를 파일로 남기고, 치명적인 에러가 발생했을 때 슬랙(Slack)으로 알림을 받는 방법까지 알아보았습니다. 서비스 초기 단계나 트래픽이 많지 않은 단일 서버 아키텍처(Monolithic Architecture)에서는 이 정도 설정만으로도 충분히 운영이 가능합니다. 개발자가 필요할 때 서버에 접속해서 vim이나 cat, grep 명령어로 로그 파일을 열어보면 되기 때문입니다. 하지만 서비스가 성장하여 서버가 10대, 100대로 늘어나거나, 마이크로서비스 아키텍처(MSA)를 도입하여 수십 … 더 읽기

Spring Boot 빈(Bean) 생명주기와 스코프(Scope) 총정리: 싱글톤부터 프로토타입까지

java

앞선 포스팅에서 스프링의 핵심 엔진인 DI(의존성 주입)와 IoC(제어의 역전)를 통해 객체 관리를 프레임워크에 위임한다는 사실을 배웠습니다. 그렇다면 스프링 컨테이너에 맡겨진 이 객체(Bean)들은 도대체 언제 태어나서, 언제 죽는 것일까요? 또, 요청할 때마다 매번 새로운 객체가 만들어지는 걸까요, 아니면 하나를 계속 돌려 쓰는 걸까요? 이 질문에 대한 답이 바로 오늘 다룰 빈 생명주기(Bean Lifecycle)와 빈 스코프(Bean Scope)입니다. 이 두 … 더 읽기

Spring Boot 핵심 원리: 의존성 주입(DI)과 제어의 역전(IoC) 완벽 분석

java

자바 개발자로서 스프링 부트(Spring Boot) 프레임워크를 접하게 되면 가장 먼저 마주치는 낯선 용어들이 있습니다. 바로 IoC(Inversion of Control, 제어의 역전)와 DI(Dependency Injection, 의존성 주입)입니다. 많은 초급 개발자들이 @Autowired 어노테이션을 붙이면 마법처럼 객체가 연결된다는 사실은 알지만, 내부적으로 어떤 원리로 동작하는지, 왜 굳이 내가 직접 new 연산자로 객체를 만들지 않고 프레임워크에게 맡기는지에 대해서는 깊이 고민하지 않는 경우가 많습니다. 하지만 이 두 … 더 읽기

Jenkins Docker 권한 문제 해결: 볼륨 마운트 시 “Operation not permitted” 오류 완벽 가이드

Docker를 활용해 CI/CD 환경을 구축할 때, Jenkins 데이터를 영구적으로 보관하기 위해 호스트 디렉토리를 볼륨으로 마운트하는 것은 필수적입니다. 하지만 이 과정에서 많은 개발자들이 Jenkins Docker 권한 문제 해결에 어려움을 겪곤 합니다. Jenkins가 마운트된 디렉토리에 파일을 쓰지 못해 플러그인 설치가 실패하거나, 설정이 저장되지 않는 등의 문제가 발생하기 때문입니다. 이번 포스팅에서는 로그 파일에 가득 찬 java.nio.file.FileSystemException: … Operation not permitted에러의 … 더 읽기