# Spring Boot · 14개
Flyway로 Spring Boot 스키마 버전 관리
운영 DB 스키마를 누가 언제 어떻게 바꿨는지 추적이 안 돼서 곤란했던 경험은 대부분 있을 것이다. 개발 DB에서는 되던 쿼리가 운영에서 컬럼이 없다고 터지고, ALTER 문은 누군가의 로컬 메모나…
Testcontainers로 Spring Boot 통합 테스트에 진짜 DB와 Kafka 띄우기 - @ServiceConnection, 컨테이너 재사용, CI 설정
통합 테스트를 H2 인메모리 DB로 돌려놓고 운영은 PostgreSQL로 하는 프로젝트를 자주 본다. 나도 예전엔 그렇게 했다. 빠르고 편하니까. 문제는 방언(dialect) 차이에서 터진다. H2…
Spring Boot에서 Logback JSON 구조화 로깅
운영 중인 서비스에서 장애 원인을 좇다 보면 로그가 텍스트 한 줄로 흩어져 있어 특정 요청만 뽑아보기 어려운 경우가 많다. 톰캣 접근 로그와 애플리케이션 로그를 grep으로 맞춰 보다가 시간만 쓴 …
Java 17과 Java 25의 차이 - 두 LTS 사이에 바뀐 것과 업그레이드 확인 목록
운영 중인 서비스의 JDK 버전을 물어보면 아직 17이라는 답을 제일 많이 듣습니다. 8에서 17로 넘어오면서 한 번 크게 고생한 기억이 남아 있으면 당분간 런타임에 손대기 싫어지는 것도 당연하죠.…
Apache Tomcat과 Spring Boot의 차이 - WAS와 프레임워크, 내장 톰캣까지 관계 정리
톰캣 설치나 커넥터 설정을 정리해두면 현장에서 꼭 따라오는 질문이 있다. 스프링 부트를 쓰는데 톰캣을 따로 깔아야 하는지, 둘 중 무엇을 먼저 익혀야 하는지 같은 것들이다. 신입 개발자만 묻는 것도…
Spring Boot @Async 스레드 폭증과 큐 적체 잡기: ThreadPoolTaskExecutor 설정과 MDC 전파
@Async 하나 붙였다가 운영에서 스레드가 이상하게 늘거나 응답이 밀리는 상황은 자주 온다. 그런데 그 원인을 검색하면 "@Async는 요청마다 스레드를 무한 생성해서 서버가 죽는다"는 설명이 많…
Spring Boot JPA N+1 쿼리 진단과 해결: generate_statistics, fetch join, @EntityGraph, @BatchSize
코드 리뷰나 성능 점검을 하다 보면 JPA N+1 얘기를 반복해서 하게 된다. 목록 화면 하나 열었을 때 쿼리가 몇 개 나가는지 물어보면 답이 바로 안 나오는 경우가 많고, 원인을 찾은 뒤에도 fe…
JavaDockerizing Spring Boot Application
Spring Boot 애플리케이션을 Docker 환경에 배포하기 위해서는 크게 4가지의 과정이 필요하다. Spring Boot 애플리케이션 만들기 Dockerfile 만들기 Dockerfile을 빌…
[Spring Boot] security를 사용할 때 ajax post 403에러 발생
1. 개요 Spring boot를 사용한 개발 중 ajax post 통신시에 403에러가 계속 발생. 해당 에러를 해결하는 방법 제시. 2. 환경 * Java - 1.8.0_202 * Spring …
Cloud Computing & MSA[Spring Boot] security를 사용한 user 생성 및 권한부여 - 2(mariaDB 사용)
1. 개요 [Spring Boot] security를 사용한 user 생성 및 권한부여 -1 에서는 메모리에 user 정보를 올리고 사용하는 위험한 행동을 했었다.. 그래서 mariaDB를 설치하고…
[Spring Boot] security를 사용한 user 생성 및 권한부여 - 1
1. 개요 actuator를 설정하고 보니 정보 유출이 걱정돼서 접근제어를 구현하려고 한다. 일전에 IP를 통한 접근제어를 시도했는데, PC의 IP를 코드에 넣는 것은 위험하다고 생각되어 사용자를 …
[Spring Boot] embedded tomcat SSL 설정
1. 목적 Spring boot에서 https 를 사용하기 위한 embedded tomcat SSL 설정 및 테스트용 인증서 발급 2. 테스트용 인증서 발급 -. CMD (관리자 모드에서 진행) k…
Spring Boot MyBatis mapUnderscoreToCamelCase 설정
1. 개요 DB 컬럼명에 _ (Underscore)가 포함되어 있을 때 이를 자동으로 카멜 표기법의 DTO와 매핑해주기 위해 설정을 추가한다. 예: USER_NAME 컬럼 - getUserName(…
SpringBootApplication annotation
1. 상위문서 Spring Annotation 2. @SpringBootApplication 스프링 부트 초기에는 없던 어노테이션이다. 1.2부터 생겼다고 한다. 세가지 속성 값을 지니고 있다. @…