분류 전체보기
-
[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과 어노테이션들을 활용해 자동으로 파라미터로 값을 받아오는 어노테이션을 ..
-
[CS] Dispatcher ServletComputer Science 2022. 3. 8. 23:05
Servlet이 web application에서 작동하려면 web.xml이라는 파일이 필요하다. web.xml은 특정 url과 해당 servlet에 대한 매핑을 가지고 있어서, 어떠한 요청이 들어왔을 때 Servlet Container에서 해당 Servlet을 매핑시키는데 사용되는 파일이다. 매핑된 Servlet에서는 Parameter 정보를 받고, Service 로직을 수행한 뒤, 경우에 따라서 View를 만들어서 Client에게 반환해주는 일련의 과정을 거친다. Spring Web MVC pattern에서는 Servlet이라는 개념을 Dispatcher Servlet으로 이용하고 있다. Spring은 Tomcat이라는 Servlet Container을 갖고 있다. Spring은 모든 request을 ..
-
[CS] Servlet의 개념과 동작 과정Computer Science 2022. 3. 8. 22:23
Servlet Servlet이란 서버 쪽에서 실행되며 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스이다. Request가 오면 해당 요청을 자바를 활용하여 처리하는 것을 Servlet이라 한다. Spring framework에서는 기본적으로 data의 위치를 직접적으로 명시하는 방식의 URL의 접근을 막아놨으며, 식별자를 이용하여 접근을 요청하는 URI의 접근방법을 사용한다. 따라서 어떠한 request가 들어오면 Tomcat이 이를 가져오며, Tomcat은 Servlet을 활용하여 Java를 거쳐 Request을 처리한다. Servlet의 생명 주기와 동작과정 Servlet의 생명주기는 크게 세가지로 나눌 수 있다. Init : Servlet instance 생성 Service : 실..