Spring
-
[Spring] Spring Data JPA의 save 함수 구조Spring 2022. 6. 17. 21:09
Spring Data JPA의 save함수의 구조는 다음과 같다. public S save(S entity) { if (entityInformation.isNew(entity)) { // 1 em.persist(entity); // 2 return entity; // 3 } else { // 4 return em.merge(entity); // 5 } } 1번의 isNew 함수를 통해 매개변수로 들어온 entity가 새로운 entity인지, 이미 저장된 entity인지 체크한다. - 레퍼런스 타입(String, Long...)일 경우 null값이면 새로운 entity로 판단한다. - 기본 타입(Primitive Type)[int, long, char etc..]일 경우 값이 0이면 새로운 entity로 ..
-
[Spring boot] spring boot batch 관계도Spring 2022. 5. 10. 16:33
spring boot batch는 JobRepository라는 큰 구조에서 JobLauncher, Job, Step 3단계로 나눠볼 수 있다. Step 기본구조는 Step에서 정의된다. 1개의 Step은 읽고, 처리하고, 저장하는 구조를 가지고 있는 가장 실질적인 배치처리를 담당하는 도메인 객체이다. 그리고 이 Step들이 이루어져 Job을 표현한다. Job 하나의 Job은 여러개의 Step으로 이루어져 있다. Job 객체는 JobBuilderFactory에서 생성된 JobBuilder를 통해 Job을 생성할 수 있다. 1) JobBuilerFactory public class JobBuilderFactory { private JobRepository jobRepository; public JobBuil..
-
[Spring boot] spring boot batch 기본 구조Spring 2022. 5. 4. 23:22
서비스를 만들던 도중 주기적으로 대용량 데이터를 업데이트 하거나 생성해야하는 일이 생겼다. 때문에 이 일을 쉽게 만들어 줄 시스템을 찾아 다녔고 스프링에서 제공하는 springbootbatch를 찾게 되었다. spring boot batch란? spring boot batch의 장점들은 다음과 같다. - 자동화 : 매번 단순 반복 작업을 쉽고 빠르게 자동화 시켜준다. - 대용량 처리 : 대용량 데이터를 가장 최적화된 성능을 보장한다. - 견고성 : 예측하지 못한 상황이나 동작에 대한 예외처리도 정의할 수 있다. - 재사용성 : 공통적인 작업을 단위별로 재사용할 수 있다. 이와 같은 장점들이 있음에도 불구하고 spring boot batch를 사용하기 전에 배치처리 특성상 몇가지 고려사항이 있다. - 단순..
-
[Spring] Swagger 2.9.2 Jwt 설정 통일하는 법Spring 2022. 3. 31. 17:46
그동안 jwt 설정을 apiImplicitParam을 이용해 하나하나 다 설정해주며 쓰고 있었다. 하지만 매함수에 항상 같은 매개변수설정이 있는것에 대한 불만이 있었고 검색을 해본 결과 2.9.2버전부터 이 문제를 개선할 수 있는 방법이 있다는 것을 알았다. swaggerConfig을 다음과 같이 설정해준다. @Profile({"local"}) @Configuration @EnableSwagger2 public class SwaggerConfig { private String version; private String title; private String description; @Bean public Docket swaggerTest() { version = "1.0.0"; title = "SpinOf..
-
[Spring] Swagger 2.9.2 NumberFormatException 해결법Spring 2022. 3. 31. 17:17
스웨거를 쓰다보면 로그에 계속 NumberFormatException이 로그에 남게된다. 구글링을 하다보면 대부분 2가지 툴을 다운그레이드해서 이 문제를 해결하는 방법을 제시하는데, 좀더 구글링을 해 다운그레이드하지 않고 해결하는 법을 찾았다. 해당 오류는 결국 파라미터로 받아오는 값이 불분명해서 오는 오류이다. 때문에 exception이나 defaultvalue를 지정해주면 해당 로그가 안나오게 할 수 있다. @ApiImplicitParam 혹은 @ApiParam의 example을 이용해 파라미터 값의 예시를 정해주면 해당 로그가 사라진다.
-
[Spring] Spring Security 로그인된 유저 뽑아오기Spring 2022. 3. 14. 19:21
spring security을 프로젝트에 적용하다 로그인된 유저 정보를 어떻게 받아오는가를 찾아보게 되었다. 이렇게 SecurityContextHolder에서 UserDetails을 상속받은 객체의 정보를 불러올 수 있었다. 하지만 거의 매 함수에 이 과정을 반복해야만 하는게 너무 지저분해보였고, 좀더 깔끔하게 할 수 있는 방법을 찾았다. 이런식으로 어노테이션 @AuthenticationPrincipal을 이용해 반복되는 코드를 줄일 수 있었다. 하지만 대부분 유저의 id만 필요로 하는데 계속 memberdetail을 받아와 memberId를 뽑아오는게 조금 반복적으로 느껴져 어노테이션을 직접 만들어 수정을 했다. expression과 어노테이션들을 활용해 자동으로 파라미터로 값을 받아오는 어노테이션을 ..
-
[Spring] 로깅 알아보기Spring 2022. 3. 5. 21:06
운영 시스템에서는 system.out.println()과 같은 시스템 콘솔을 사용해서 필요한 정보를 출력하지 않고, 별도의 로깅 라이브러리를 사용해서 로그를 출력한다. 스프링부트에서는 기본으로 제공하는 인터페이스 Slf4j을 구현한 logback을 대부분 사용한다. logback을 사용하는데에는 다른 방법도 있으나 lombok의 @Slf4j을 사용하여 편히 쓸 수 있다. log는 5가지 종류가 잇다. trace, debug, info, warn, error 각 종류는 error로 갈수록 공개 범위가 좁아진다고 보면된다. application.yml의 로그 범위 설정 방법이다. root는 기본적으로 info로 설정되있으며, debug로 범위를 풀면 알수없는 글들이 마구 쏟아지기 때문에 info로 두는 것 ..