9월, 2022의 게시물 표시

Spring Boot Admin Server, Client config 설정하기

이미지
 Spring Boot로 많은 프로젝트를 진행하게 됩니다. 많은 모니터링 도구가 있지만, Spring Boot 어플리케이션을 쉽게 모니터링 할 수 있는 방법을 소개하려고 합니다.   코드 중심으로 살펴보겠습니다. 1. 어드민 서버 구축 1-1. 디펜던시 추가 dependencies { // https://mvnrepository.com/artifact/de.codecentric/spring-boot-admin-starter-server implementation 'de.codecentric:spring-boot-admin-starter-server:2.5.4' } 1-2. 어드민 서버 설정 활성화 @SpringBootApplication @EnableAdminServer public class ServerApplication { public static void main (String[] args) { SpringApplication. run (ServerApplication. class, args) ; } } EnableAdminServer를 하면 됩니다. 2. 클라이언트 서버 설정  예제는 book-client, member-client 2가지 클라이언트, member-client가 2개의 인스턴스 실행으로 작성했습니다.  2-1 디펜던시 추가 dependencies { // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web implementation 'org.springframework.boot:spring-boot-starter-web:2.5.4' // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-actuator implementation 'org.spring...

crontab 시간 설정 방법

이미지
 crontab나 jenkins에서 주기적으로 실행해야 할 때가 많이 있습니다. 예를 들어 매일 랭킹을 추출하는 경우가 있습니다.  시간 설정 방법을 예제를 통해 알아보겠습니다.  기본 명령어 crontab -l # 등록된 목록 출력 crontab -e # 수정 crontab -r # 삭제 등록 예제 5 * * * * /directory/exe_file.sh 시간 요소 시간 설정은 5가지 요소로 이루어져있습니다. * * * * * 분(0-59), 시간(0-24), 날(1-31), 월(1-12), 요일(0-6) 0은 일요일 위의 예제는 1분 마다 실행 시간 예제 0 * * * * 0분에 1시간마다 실행 -> 00시00분, 01시00분, 02시00분... */5 * * * * /로 나눠서 실행 주기를 설정할 수 있습니다. 5분마다 실행 -> 00시00분, 00시05분, 00시10분...   0 3 * * * 매일 3시에 실행  -> 5월10일 03시00분, 5월11일 03시00분, 5월12일 03시00분... * 9-18 * * * -를 사용하여 범위를 지정할 수 있습니다. 매일 9-18시 사이에 1분마다 실행 -> 09시00분, 09시01분, 09시00분, ... 18시58분, 18시59분, ... 다음날 09시00분,... 30 9-18/2 * * * 매일 9-18시 사이에 30분에 2시간마다 실행 -> 09시30분, 11시30분, 13시30분... 30 9,18 * * * ,를 사용하여 필요한 숫자를 지정할 수 있습니다. 매일 9시30분, 18시30분에 실행 0 1 1 * * 매달 1일 1시00분 마다 실행 -> 9월1일 01시0분, 10월1일1시01분, 11월1일1시01분... 10 3 * * 6 매주 토요일 3시10분에 실행 -> 2022년9월10일 03시10분, 2022년9월17일 03시10분, 2022년9월24일 03시10분... 참고로 젠킨스에서는 분설정 부분에...

자바 리스트 정렬 방법 java list sorting

  리스트 정렬 방법에 대해 간단히 알아 보겠습니다.  예제에서 사용할 Book 클래스 import lombok. AllArgsConstructor ; import lombok. Builder ; import lombok. Getter ; import lombok. ToString ; import java.time.LocalDateTime ; @AllArgsConstructor @Getter @Builder @ToString public class Book { private Integer id ; private String title ; private LocalDateTime createdDate ; } Book 객체 생성하는 함수입니다. private Book makeBook ( int id , int day) { return Book. builder () .id(id) .createdDate(LocalDateTime. of ( 2022 , 5 , day , 10 , 0 )) .build() ; } id와 day를 파라미터로 받아 Book 객체를 생성합니다. 리스트 정렬을 하기 위해 stream을 생성하고, sorted 함수를 사용했습니다. 조건1개를 오름차순으로 정렬하는 예제 @Test public void 조건 1 개 _ 오름차순 _ 정렬 () { // given List<Book> books = new ArrayList<>() ; books.add(makeBook( 1 , 7 )) ; books.add(makeBook( 2 , 5 )) ; books.add(makeBook( 3 , 9 )) ; books.add(makeBook( 4 , 10 )) ; books.add(makeBook( 5 , 4 )) ; // when List<Book> result ...

자바 JUnit Mock 테스트

 복잡한 로직의 코드를 작성할때, 리팩토링을 해야할때 잘 짜여진(경우의 수를 반영한) 테스트 코드가 있으면 코드의 결과에 대한 확신이 생깁니다.  이때 Mocking을 활용하면 테스트 코드를 더 원활하게 작성할 수 있습니다. Mocking이란 단위 테스트를 작성할때 데이터베이스와 같이 외부에 의존하지 않고, 실행될 함수를 테스트에 직접 정의하여 대체하는 기법입니다. 1. 의존성 주입 dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' testCompile group : 'junit' , name : 'junit' , version : '4.12' testImplementation 'org.mockito:mockito-core:3.6.0' testImplementation 'org.easytesting:fest-assert:1.4' } mockito를 사용했습니다. fest-assert는 테스트 검증을 쉽게 할 수 있도록 도와줍니다. (필수 아님). lombok나 string-boot는 편의를 위해 사용했습니다. 2. Book관련 클래스 정의 import lombok. AllArgsConstructor ; import lombok. Builder ; import lombok. Getter ; import lombok. ToString ; @AllArgsConstructor @Getter @Builder @ToString public class Book { private Integer id ; private String title ; } 데이터 클래스 입니다. import lombok.extern.slf4j. Slf4j ; import org.springf...

LocalDateTime atStartOfDay 날짜 시작 시간으로

개발하다보면 해당 날짜에 00시00분00초가 필요한 경우가 많습니다. 예를들어 오늘 작성된 댓글을 조회하고 싶은경우 날짜의 시작부터 다음날까지 조회를 하게 됩니다. 날짜만 사용하는 경우가 되지요. 이때 필요한 함수가 atStartOfDay입니다. 함수명에서 잘 나타나있는데요. 이 함수는 LocalDate에 있기때문에 한번 변환과정이 필요합니다. 예제 LocalDateTime ldt = LocalDateTime. now () ; System. out .println(ldt) ; LocalDateTime onlyDate = ldt.toLocalDate().atStartOfDay() ; System. out .println(onlyDate) ; 실행결과 2022 - 09 - 06 T22: 25 : 56.904512100 2022 - 09 - 06 T00: 00 시작날짜 종료날짜 예제 LocalDateTime ldt = LocalDateTime. now () ; System. out .println(ldt) ; LocalDateTime startDate = ldt.toLocalDate().atStartOfDay() ; LocalDateTime endDate = startDate.plusDays( 1 ).toLocalDate().atStartOfDay() ; System. out .println( "startDate === " + startDate) ; System. out .println( "endDate === " + endDate) ; plusDays를 활용하여 내일날짜를 가져옵니다. 실행결과 2022 - 09 - 06 T23: 35 : 04.765255100 startDate === 2022 - 09 - 06 T00: 00 endDate === 2022 - 09 - 07 T00: 00