Backend/SpringBoot 81

Spring batch + 스케줄링

Spring batch는 대용량의 데이터를 처리할때 사용하는 Spring의 공식 배치 처리 솔루션이다. 예를들어 100만건의 데이터를 읽어 오거나 값을 수정해야 하는 작업을 해야 할 때 매우 유용하게 이용할 수 있다. 또한, 특정 시간대에 주기적으로 스케줄링 하여 동작할때, @Scheduled 와 같이 사용한다. 이 글에서는 Spring boot 3.xx 버전, batch 5.x 버전 기준으로 작성한다. 일단, Gradle에 다음을 추가 한다. dependencies { ... implementation 'org.springframework.boot:spring-boot-starter-batch' ...} Batch를 실행하기전, Batch 관련 DB 에 테이블들이 반드시 존재 해야 한다. ..

Backend/SpringBoot 2025.11.27

Spring Actuator 로 health체크 하기

서버가 올라가면, 살아있는지 아닌지 확인하는것이 필요하다. AWS 에 올린 후 로드벨런서를 달아놓게 된다면, 해당 설정에서 health check를 위한 경로를 입력하는 것이 있다. Gradle에 다음을 추가한다.dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator'} application.yaml 에서 설정management: endpoints: web: exposure: include: health, info, metrics, env endpoint: health: show-details: always 사실, health 말고 다른 항목들도 많이 있다...

Backend/SpringBoot 2025.11.10

각종 설정 오버라이드 (WebMvcConfigurer)

Spring MVC의 설정을 커스터마이즈 하기 위해 사용되는 인터페이스 이다. Spring MVC 는 Request와 Response를 처리하는 프레임워크 이다. 즉, 웹 요청이 왔을때, 그리고 응답할때 어떻게 할지 에 대한 세부 설정을 할 수 있는 인터페이스라고 보면 된다. 할 수 있는 설정을 목록화 하면 다음과 같다. 여기서는 이걸 모두 다루기 보다는 기억해 두었다가 필요할때 검색하여 반영하는것을 목적으로 한다. 메서드기능대표 예시addResourceHandlers정적 리소스 경로 매핑/uploads/** → file:/data/uploads/addCorsMappingsCORS 허용/제한특정 도메인 허용addInterceptors요청 전후 인터셉터 등록인증, 로깅 등addViewControlle..

Backend/SpringBoot 2025.11.07

Admin 페이지 설정하기

Django와 마찬가지로, spring boot 에도 admin 페이지가 있다. 실시간 자원 사용량 등 더 많은 정보를 포함하고 있어, 나름 괜찮은 선택지 인것 같다. 1. 모듈 추가 하기프로젝트에 추가로 새 모듈을 추가한다. SpringBoot 프로젝트를 신규 생성하는데, 서브 프로젝트 개념으로 보면 된다. 따라서 기존 스프링부트 프로젝트 생성과 동일하게 진행한다.dependency 에 codecentric's spring boot admin [server] 를 체크 한다추가한 모듈의 메인 class 에 @EnableAdminServer 어노테이션을 붙인다.@SpringBootApplication@EnableAdminServerpublic class AdminApplication { public s..

Backend/SpringBoot 2025.11.05

@Valid, @Validated

두개 모두 인자값 검증에서 사용되나 차이점이 있다. @ValidJava 표준이다. DTO, Entitiy 등 검증에는 사용할 수 있으나, 단순 메서드 인자값 검증에는 사용할 수 없다. 그룹 기능을 사용 할 수 없다. 대부분 컨트롤러의 입력값 검증에 주로 사용@ValidatedSpring Framework 전용이다. @Valid 외, 단순 메서드 인자값 검증에 사용할 수 있다. 그룹 기능을 사용 할 수 있다. 그룹, 메서드 인자값 검증에 주로 사용 그룹 기능에 대해 예를들자면, public interface CreateGroup {}public interface UpdateGroup {}public class UserDto { @NotBlank(groups = CreateGroup.class) ..

Backend/SpringBoot 2025.11.03

@JoinTable

엔티티의 관계가 n:m 일 경우, 보통은 중간에 테이블을 더 두어 1:N, N:1 관계로 풀어 쓰는것이 좋다고 알고 있다. 그러나, n:m 관계를 유지한채 엔티티를 구성 하고 싶을경우, 일반적으로 사용하는 @JoinColumn 이 아닌 @JoinTable 을 통해 구성 할 수도 있고, 1:N 관계 이더라도 경우에 따라서는 JoinTable을 이용할 수 있다. 스프린트 미션을 진행하면서, 다음의 테이블 관계가 미리 정의된 채로 코드를 작성해야 하는 때가 있었다. A , B, C 테이블이 있다. A 테이블과 B 테이블은 1:1 관계, B 테이블과 C 테이블은 1:N 관계이다. A 테이블에는 B 테이블의 id를 FK로 참조한다. 원래대로 라면 B 테이블은 C 테이블의 id를 FK로 참조해야 한다. 그러나 이 ..

Backend/SpringBoot 2025.10.31

BaseEntity 사용 및 time 정보 자동 생성

C#이나 여타 다른 언어들, 플랫폼에서는 코드 중복되는것을 굉장히 굉장히 싫어한다. 나 또한 그렇고, 코드 중복을 최대한 피하려고 한다. 그러나 스프링부트에서는 코드중복을 용인하는 경우가 참 많은거 같다. 다른 플랫폼과 다르게 스프링부트는 자동화가 많이 되어 있고, 그 구조가 짜임새 있게 짜여 있기 때문에 구조를 맞추다 보면 그런 경우가 있다. 최대한 공통된 항목으로 묶어서 엔티티를 구성하기 위해 BaseEntity를 사용하는 법을 정리한다. 엔티티 구성은 보통, 각 엔티티별로 필드들을 구성하나, BaseEntity를 부모 엔티티로 두고, 공통된 필드들을 정의한다. 그리고 다른 엔티티에선 BaseEntity를 상속받아 사용한다. 그리고 시간정보는 (예 : createdAt) 자동 생헐 한다. 이 때, ..

Backend/SpringBoot 2025.10.31

Custom Annotation (Custom validation)

어노테이션을 커스텀으로 만들 수 있다. 예를들어, Validation을 하려 하는데, 기본 설정값보다 복잡하여 커스텀한 항목을 만들어야 할때 사용한다. 커스텀 어노테이션 클래스 생성커스텀 어노테이션의 제약조건을 validate 할 수 있는 클래스 생성두개로 나뉘어 진다. 혹은, 커스텀 어노테이션의 제약조건을 validate 할 수 있는 클래스를 생성하지 않고, 여러 어노테이션을 묶어서 사용할 수도 있다.예를들어 @NotNull 어노테이션과 @Size 을 묶어서, 한번에 커스텀 어노테이션을 통해 검증을 진행 할 수도 있다. 먼저, 커스텀 어노테이션 클래스의 경우.import jakarta.validation.Constraint;import jakarta.validation.Payload;import ja..

Backend/SpringBoot 2025.10.29

Json 형식으로 로깅 하기 + MDC

로깅을 json 형식으로 하여, 분석을 보다 용이하게 할 수 있다. 토스에서도 이런 방식으로 사용한다고 한다. 기본적인 로깅 설정은 https://dean83.tistory.com/315 여기에 명시해 두었다. 라이브러리를 추가 하여 이용하는것이 일반적이다. gradle 에 다음을 추가 한다.implementation 'net.logstash.logback:logstash-logback-encoder:7.4'일단, logback 설정 파일의 예를들면 다음과 같다. 개발환경에서는 json 형식으로 콘솔에만 출력파일은 7일 후 삭제, 분 단위로 파일로 저장 ..

Backend/SpringBoot 2025.10.29

EC2 에 배포한 서버에 Https 적용하기

크게 두가지 방법으로 구성 할 수 있다.nginx 에서 https 를 적용 하고 처리하는 방법. AWS 서비스를 통해 적용하는 방법. 둘 다 정리를 할 필요가 있어 보인다. 일단 둘 다, 도메인은 이미 구입 하고, route53 에 설정했다는 가정하에 적는다. nginx 에서 처리 하는 방법EC2 에서, 다음의 명령을 통해 nginx 설치sudo apt updatesudo apt install nginx -ylets encrypt를 이용해 인증서 발급만일 ec2가 우분투 라면 다음의 커멘드 실행sudo apt updatesudo apt install -y certbot python3-certbot-nginxnginx 플러그인을 이용해 자동으로 설정//실제 url을 적어야 한다.sudo certbot --..

Backend/SpringBoot 2025.09.22