본문 바로가기

Java/Spring Boot31

스케줄러 cron 설정을 Global Properties 값으로 변경 스케줄러의 실행 시점을 설정해주는 cron 설정에 Enum상수의 필드값을 사용할 수 없었습니다.private String every30Minutes = ServerProperties.SCHEDULER_CRON.getValue();@Scheduled( cron = every30Minutes, zone = "Asia/Seoul" ) @Transactional public void findExpiredMembers(){실행 결과 : error: element value must be a constant expression @Scheduled( cron = every30Minutes, zone = "Asia/Seoul" ) ^이는 컴파일 타임에 @Sched.. 2024. 7. 1.
@TransactionalEventListener @transactionalEventListener 가어떻게 이벤트를 인식하여 리스너를 실행하는지 알아보겠습니다. Spring에서의 Spring event의 실행 단계 : 생성 주체에서 이벤트를 발생하면 이벤트 디스패처에게 전달이벤트 디스패처가 이벤트 핸들러를 연결이벤트 핸들러에서 이벤트에 담긴 데이터를 통해 원하는 기능을 실행이번에 사용한 @TransactionalEventListener 는 적용할 메서드의 매개변수에 이벤트 객체를 정의해주면 지정한 이벤트가 발생했을 때 수신해서 처리할 수 있습니다. (이 점은@EventListener 와 동일)또한 이벤트 발행자의 트랜잭션을 기준으로 이벤트 실행 시점을 조절할 때 사용할 수 있습니다.option :AFTER_COMMIT (default) : 트랜잭션이 .. 2024. 7. 1.
Lombok 의존성 설정 시 왜 compileOnly, annotationProcessor로 설정되는걸까? - gradle 의존성 구성 정보 알아보기 gradle 3.0의 Dependency Configurations참고로 gradle 3.0 이전 버전과의 차이는 다음과 같습니다compile → implementation / apitestCompile → testImplementationdebugCompile → debugImplementationprovided → compileOnlycompileOnly : compile 시점에만 필요한 의존성을 정의하는 데 사용. 사용하려는 라이브러리가 컴파일 타임에만 필요하고, 런타임 시점에는 필요하지 않을 때 사용합니다. compileClassPath에만 추가되어 결과적으로 build 결과물의 크기를 줄일 수 있습니다.(JAR파일에 포함되지 않기 때문). (ex)LombokruntimeOnly : 라이브러리가 .. 2024. 6. 13.
Scheduler 관련 내용정리 SchedulerScheduler를 사용하면 정해진 시간마다 특정 동작을 수행할 수 있다Scheduler를 구현하기 위한 대표적인 방법 2가지Spring Framework에서 제공하는 SchedulerQuartz 라이브러리1. Spring Framework에서 제공하는 Scheduler적용 시 장점:Scheduler는 기본적으로 Spring Boot에 포함되어 있기 때문에 추가적으로 Gradle에 의존성을 추가할 필요없이 Application 클래스에 @EnableScheduling를 추가하여 Scheduler를 활성화할 수 있다스케줄러를 사용하면 직접 스레드를 관리하지 않아도 된다2. Quartz 라이브러리적용 시 장점 : Spring Framework의 Scheduler보다 정교하게 Job Sched.. 2024. 6. 3.
유효성 검사 / 데이터 검증 (Validation) Spring boot 2.3 버전부터는 starter-validation 라이브러리를 추가해야한다.Validation 관련 어노테이션- @Size : 문자의 길이 조건- @NotNull : null 값 불가- @NotEmpty : @NotNull + ""값 불가- @NotBlank : @NotEmpty + ""값 불가- @NotBlank : 값이 null인지를 체크함과 동시에 공백인지 여부도 확인해서 유효성 검사를 한다.(LocalDateTime이나 int 타입에서는 사용 불가) - @Past : 과거 날짜- @PastOrPresent : @Past + 오늘 날짜- @Future : 미래 날짜- @FutureOrPresent : @Future + 오늘 날짜 - @Pattern : 정규식을 통한 조건 - .. 2024. 5. 31.
View에 사용자 이름을 전달하는 Controller 중복 코드 제거 문제 현재 Header메뉴에 사용자 이름을 표시하고자 사용자 인증이 완료된 경우 GET요청을 처리하는 ViewController에서 Model에 사용자 이름을 담아 view에 전달하고 있는데, 이 코드가 로그인이 필요한 메서드에 모두 포함되고 있어서 filter를 활용하여 코드 중복을 제거하고자 함 상기 코드에서 Model.addAttribute(“username”,findUsername); 부분이 중복되고 있습니다. 해결 과정 OncePerRequestFilter Class 활용 Http Request의 한 번의 요청에 대해 한 번만 실행하는 Filter인 OncePerRequestFilter를 상속받아 UsernameFilter Class를 생성했습니다. 이를 활용하여 request에 data(사용자.. 2024. 3. 19.