본문 바로가기
Feign Client Feign Client Feign Client는 Netflix에서 개발한 http client이다. Feign Client는 http client를 인터페이스를 통해 선언하는 방식으로 코드를 작성하기 때문에 유지보수하기가 좋다. Feign Client를 사용하는 방법은 아래 좋은 글이 많이 있으니 참고하면 된다. (Spring Cloud) Feign Feign REST 기반 서비스 호출을 추상화한 Spring Cloud Netflix 라이브러리 선언적 방식 인터페이스를 통해 클라이언트 측 프로그램 작성 Spring이 런타임에 구현체를 제공 supawer0728.github.io 우아한 feign 적용기 - 우아한형제들 기술 블로그 안녕하세요. 저는 비즈인프라개발팀에서 개발하고 있는 고정섭입니다.이 글에서.. 2020. 10. 8.
스프링 - 비동기 처리 @async 스프링 비동기 (Asynchronous) 외부 API에 작업 요청하고 외부 API서버에서 요청을 처리하는데 오랜시간이 걸리는 경우 `비동기 방식`으로 처리하면 효율적이다. 스프링에서 비동기처리를 어떻게하는지 알아보자. 1) @EnableAsync 자바에서는 ExecutorService를 통해서 비동기를 처리할 수 있다. 요청마다 Thread를 찍어내는 방법도 있지만 매 요청 마다 쓰레드가 생성되면 쓰레드 관리가 되지 않아서 위험하다. `ExecutorService`를 사용하면 원하는 크기만큼의 쓰레드 풀을 생성하고 풀에서 쓰레드를 꺼내서 사용하고 다시 반납하는 방식으로 처리한다. 애플리케이션에서 비동기 메서드가 많이 필요한 경우 method를 비동기에 맞게 수정해야하는 번거로움이 있다. 스프링에서는 개발.. 2020. 8. 16.
컨트롤러 테스트 @WebMvcTest vs @SpringBootTest Spring 에서 Test 하는 방법 스프링 프레임워크를 테스트 할때 스프링의 `ApplicationContext` 전체를 불러와서 테스트 하는 방법과 특정 레이어만 불러와서 테스트하는 방법이 있다. 전체 테스트는 프로젝트의 크기가 커지면 테스트 속도가 느려지기 때문에 통합테스트가 아닐때는 불필요하다. 유닛테스트를 할때는 특정 레이어만 테스트하는게 좋은 방법이다. 특정 레이어를 테스트할때는 레이어에 해당하는 빈만 들고오기 때문에 의존관계에 있는 다른레이어는 `Mock`을 이용해서 테스트를 해야한다. 기본적으로 통합테스트를 할때는 `@SpringBootTest` 애노테이션을 붙여서 테스트를 진행하면된다. 반면, 원하는 레이어만 테스트 할때는 `@MockMvcTest` 와 같이 특정 레이어를 테스트하기 위한.. 2020. 7. 16.
RequestContextHolder RequestContextHolder, HttpServletRequest `RequestContextHolder`를 알아보자. Spring 프레임워크의 전 구간에서 `HttpServletRequest`에 접근할 수 있게 도와주는 구현체이다. request를 서비스레이어까지 전달하지 않더라도 `RequestContextHolder`를 이용하면 된다. `HttpServletRequest`는 HTTP URI, Method, body, header, cookie, session 등의 정보를 포함하고 있다. `RequestContextHolder`가 없으면 컨트롤러 레이어에서 서비스 레이어로 내려주는 방식으로 해야하는데 코드가 더러워지고 DRY원칙을 지키지 못한다. `RequestContextHolder`를 활용.. 2020. 6. 29.
스프링 웹 프로그래밍 (2) Spring MVC Spring MVC는 스프링 프레임워크를 구성하는 모듈이다. 정싱 명칭은 Spring Web MVC이다. 서블릿 API를 기반으로 작성된 웹 프레임워크이고 `프론트 컨트롤러 패턴`과 `MVC 아키텍처 패턴`을 사용한다. 견고한 웹 애플리케이션을 만드는데 도움이 되는 풍부한 기능을 제공하고 `annotation`과 `reflection API`를 적극 사용한다. 위의 그림처럼 프론트 컨트롤러인 `DispatcherServlet`을 중심으로 동작하고 MVC(Model-View-Controller)가 협력해서 웹 요청과 응답을 처리하는 방식이다. HTTP요청이 들어오면 DispatcherServlet으로 전달을 한다. DispatcherServlet은 적절한 컨트롤러를 찾아서 요청을 위임하.. 2020. 2. 22.
스프링 웹 프로그래밍 (1) 자바 웹 애플리케이션 웹 애플리케이션? 인터넷을 통해 웹 브라우저에서 이용할 수 있는 서비스이다. URL를 기반으로 보고 싶은 컨텐츠를 HTTP요 요청을하고 서버는 요청을 처리한 후 응답을 한다. (SNS,웹 메일, e-commerce등의 다양한 서비스) 웹 브라우저는 사용자가 원하는 컨텐츠를 HTTP 요청으로 작성해서 웹 애플리케이션 서버에게 전송하고 돌려받은 HTTP 응답을 브라우저 화면에 출력한다. 웹 애플리케이션 서버는 브라우저가 전송한 HTTP요청을 분석후 사용자가 원하는 컨텐츠를 HTTP 응답으로 작성해서 브라우저에게 전송하는 기능을 제공한다. 브라우저와 서버간에는 HTTP 프로토콜을 이용한다. 클라이언트가 요청을 보내면 서버가 응답하는 단순한 구조로 만들어졌다. HTTP 요청에는 컨텐츠주소(.. 2020. 2. 22.