Study/Spring 15

Spring Batch에서 병렬 처리하기

다중 스레드 스텝 스프링 배치에서 step은 기본적으로 단일 스레드로 처리된다. 다중 스레드 스텝은 잡의 실행을 병렬화하기 가장 쉬운 방법이다. 잡 안의 step 내에서 청크 단위로 다중 스레드 작업을 하는 방식이다. 스프링 배치의 다중 스레드 스텝 개념을 적용하면, 스탭 내의 각각의 청크들이 자체 스레드에서 실행되게 할 수 있다. org.springframework.core.task.TaskExecutor 추상화를 사용하면 된다. 각 청크를 독립적으로 처리하면서 하나의 스레드 풀 내에서 처리되게 구성하고, 청크가 처리될 때 에러가 발생하면 롤백되거나 종료된다. @Bean public Step step1(){ return this.stepBuilderFactory().get("step1") .chunk(..

Study/Spring 2022.06.20

Servlet programming 처리 과정

servlet 처리 과정 (1) client 요청 (2) dispatcher servlet 에서 해당 요청 처리 (3) client request에 대한 Handler mapping (3.1) Request Mapping : RequestMappingHandlerAdpator가 수행 (3.2) Interceptor 처리 (3.3) Argument Resolver 처리 : 실제 데이터를 Controller에 넘겨주는 인터페이스 (3.4) message Converter 처리 filter vs interceptor vs AOP - filter, interceptor : 서블릿 단위로 처리 vs AOP : 메소드 앞에서 Proxy 형태로 처리 - filter, interceptor : 주소로 처리 대상 지정 ..

Study/Spring 2022.06.20

데코레이터 패턴, 프록시패턴 그리고 다이나믹 프록시

AOP는 IoC/DI , 서비스 추상화와 함께 스프링의 3대 기반 기술 중 하나이다. 스프링이 DI를 사용하는 이유가 무엇이었나 한번 생각을 해보자. 만약 Client쪽에서 어떠한 클래스를 직접 참조하게 되면 그 클래스의 비즈니스 로직을 수정이 수정되면 client쪽 서비스가 정상 작동하지 않을 수 있다. 그렇기 때문이 이 두 오브젝트의 결합도를 낮추기 위해 인터페이스를 사용하여 의존관계를 주입해주고, 오브젝트간의 결합도를 낮춘다고 했다. AOP에서도 이러한 DI가 중요하게 사용되는데, 기존에 Client가 UserService라는 객체를 직접 참조했다고 가정해보자. 이는 강한 결합도를 띄고 있는 상태이므로 Client

Study/Spring 2022.04.13

[스프링 웹 MVC 활용] 03. URI 패턴 및 요청 매개변수(단순 타입)

핸들러 메소드에서 인자로 받는 클래스들에 대해 조금 더 구체적으로 알아보자. 그 첫번째는 URI 패턴의 일부를 핸들러 메소드의 인자로 받는 방법이다. I. URI 패턴 - @PathVariable, @MatrixVariable로 클라이언트가 요청을 보낼 때 uri에 매개변수를 넣어서 요청할 수 있다. // # 1. testCode @RunWith(SpringRunner.class) @WebMvcTest public class SampleControllerTest { @Autowired MockMvc mockMvc; @Test public void helloTest() throws Exception { // 테스트를 할 때는 꼭 void형식으로 해줘야 한다. mockMvc.perform(get("/even..

Study/Spring 2022.03.01

[스프링 웹 MVC 활용] 02. 핸들러 메소드의 Argument와 Return 타입

1. 메소드 Argument와 Return Type : 주로 요청 그 자체 또는 요청에 들어있는 정보를 받아오는데 사용한다. https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-arguments Web on Servlet Stack Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes from the name of its source mo..

Study/Spring 2022.03.01

[스프링 웹 MVC 활용] 01. HTTP Request 맵핑하기

스프링 MVC 의 핵심 기술이었던 DispatcherServlet이 핸들러를 찾아서 요청들을 수행하는지 실제로 활용을 해보자. I. HTTP Method로 맵핑하기 첫번째로 HttpRequest를 처리하는 Handler를 작성하는 방법이다. Handler는 기본적으로 Controller Class 안에 메소드들이라고 생각하면 쉽다. 그리고 그 메소드에 어떤 HttpReqeust를 처리할 것인지, 어떤 값을 리턴해줄 것인지(뷰 모델인지, ResponseBody인지) 등을 설정해주면 DispatcherServlet의 HandlerAdaptor가 이를 처리해 줄 것이다. @Controller public class SampleController { @RequestMapping("/hello") /* * #1...

Study/Spring 2022.03.01

[스프링 웹 MVC 설정] 01. @EnableWebMvc와 WebMvcConfigurer

스프링에서 기본적인 전략은 DispatcherServlet.properties에서 제공해주지만, 개발자가 직접 스프링 MVC의 구성요소를 Bean으로 등록할 수 있다. 아래의 예시는 row-level에서 직접 Bean을 등록해주는 방식으로 실무에서 이렇게 사용하는 경우는 없다고 보면된다. 단지 원리를 익히자면 그런 것이다 라고 보고 넘어가면 되는 예시코드이다. // #Controller코드 @Controller public class HelloController { @Autowired HelloService helloService; /* * /hello/1?name=gayoung&age=25 * @param id * @param name * @return * */ @GetMapping("/hello/{i..

Study/Spring 2022.03.01

[스프링 웹 MVC 동작원리] Servlet과 DispatcherServlet의 동작원리

I. Servelet 소개 1. Servlet 이란? - 자바 엔터프라이즈 에디션에서 웹 애플리케이션 개발을 위한 스펙과 API를 제공하는데, 그 중 가장 중요한 것이 HttpServlet이다. - 요청마다 프로세스를 생성하는 것이 아니라 한 프로세스 내에 자원을 공유하는 쓰레드로 요청을 처리함. > 이식성이 좋다. 2. Servlet 엔진 또는 서블릿 컨테이너(톰캣, 제티 등) - 세션관리 - 네트워크 서비스 - MIME 기반 메세지 인코딩, 디코등 - 서블릿 생명주기 관리 3. Servlet의 생명주기 - init: 서블릿 컨테이너가 서블릿 인스턴스를 초기화 - service: 서블릿 초기화 이후에는 모든 요청이 쓰레드 단위로 처리되고, 인스턴스의 service()메소드가 호출된다. :이 안에서 HT..

Study/Spring 2022.03.01

스프링 핵심기술 06. AOP

이제 스프링 AOP에 대해 알아보자. AOP란 Aspect-Oriented Programming으로 흩어진 Aspect들을 모듈화하는 프로그래밍 기법을 말한다. 자바에서는 AspectJ나 스프링AOP를 통해 구현하며, 컴파일시점 / 로드타임 / 런타임에 AOP를 적용시킬 수 있다. AOP 관련 개념이 잘 설명된 포스팅을 좀 찾아보았다. https://tecoble.techcourse.co.kr/post/2021-06-25-aop-transaction/ AOP 입문자를 위한 개념 이해하기 이 글은 AOP 개념이 생소한 입문자들을 위한 포스팅입니다. 1. OOP의 한계 image… tecoble.techcourse.co.kr https://atoz-develop.tistory.com/entry/Spring-..

Study/Spring 2022.02.13

스프링 핵심기술 05. 추상화

스프링이 제공하는 추상화 기술에 대해 알아보자. 순서는 다음과 같다. Resource 추상화 Validation 추상화 Data Binding 추상화 1. Resource 추상화 Resource 추상화란 무엇인가? java.net.URL이라는 클래스를 Spring.core.io.resource라는 클래스로 감싸서 Low-level에 있는 리소스에 접근하는 기능이다. (java.net.URL을 classpath기준으로가져오기 위해서) @Override public void run(ApplicationArguments args) throws Exception { Resource resource = resourceLoader.getResource("classpath:test.txt"); // #1. Resou..

Study/Spring 2022.02.13