Spring 18

@Log4j2 vs @Slf4j with log4j2

@Log4j2 vs @Slf4j with log4j2 프로젝트 진행 도중 @Log4j2 을 사용할지 @Slf4j로 log4j2.xml 을 설정해서 같이 사용할지 고민을 했었다. SLF4j(Simple Logging Facade For Java) 애플리케이션이 문자열을 기록하도록한다. Log4j2 API는 텍스트를 로깅하려는 경우 모든 CharSequence 로깅을 지원하지만 모든 개체를 있는 그대로 로깅하는 것도 지원한다 Log4j2 메시지 개체 로깅, Java 8 람다식 및 가비지 없는 로깅을 지원한다(CharSequence 개체 로깅시 문자열 생성방지) 뭘 써야할까? Log4j2와 slf4j는 똑같은 기능을 제공한다고 한다. Log4j2가 API와 구현 모듈로 분리되어서 SLF4J를 사용하지 않아도 ..

Spring/Spring Boot 2021.01.22

Spring Boot AutoConfiguration 자동 설정, 원리

Spring Boot AutoConfiguration 자동 설정, 원리 Spring Boot는 Spring과 마찬가지로 component-scan을 통해서 component들을 찾아서 bean을 생성한다. 이 과정으로 설정한 bean들(@Repository, @Service, @Controller, @RestController, @Configuration에 등록한 @Bean과 같은 설정들)이 생성된다 Spring Boot에서 미리 작성된 autoconfiguration에 의해 추가적인 bean들도 같이 생성된다. @SpringBootApplication @SpringBootApplication public class Application { public static void main(String[] ar..

Spring/Spring Boot 2021.01.03

[Spring] HTTP 요청 맵핑 - 커스텀 애노테이션

Custom Annotation 직접 커스터마이징 하는것이 커스텀 애노테이션이다. @RequestMapping 애노테이션을 메타 애노테이션으로 사용하기 @GetMapping 같은 커스텀한 애노테이션을 만들 수 있다. 메타(Meta) 애노테이션 애노테이션에 사용할 수 있는 애노테이션 스프링이 제공하는 대부분의 애노테이션은 메타 애노테이션으로 사용할 수 있다. 조합(Composed) 애노테이션 한개 혹은 여러 메타 애노테이션을 조합해서 만든 애노테이션 코드를 간결하게 줄일 수 있다. 보다 구체적인 의미를 부여할 수 있다. @Retention 해당 애노테이션 정보를 언제까지 유지할 것인지. Source: 소스 코드까지만 유지. 즉, 컴파일 하면 해당 애노테이션 정보는 사라진다는 이야기이다 Class: 컴파인 ..

Spring/Spring MVC 2020.11.15

[Spring] HTTP 요청 맵핑 - HEAD와 OPTIONS

HEAD와 OPTIONS 우리가 구현하지 않아도 스프링 웹 MVC에서 자동으로 처리하는 HTTP Method HEAD OPTIONS HEAD GET 요청과 동일하지만 응답 본문을 받아오지 않고 응답 헤더만 받아온다. (테스트 하기 위함) 예시 @Controller public class SampleController { @GetMapping( value = "/hello", params = "name=sungjun" ) @ResponseBody public String hello() { return "hello"; } } @WebMvcTest public class SampleControllerTest { @Autowired MockMvc mockMvc; @Test public void helloTest..

Spring/Spring MVC 2020.11.15

[Spring] HTTP 요청 맵핑 - 헤더와 매개변수

헤더와 매개변수 특정한 헤더가 있는 요청을 처리하고 싶은 경우 @RequestMapping(headers = “key”) @Controller public class SampleController { @GetMapping( value = "/hello", headers = HttpHeaders.AUTHORIZATION ) @ResponseBody public String hello() { return "hello"; } } @WebMvcTest public class SampleControllerTest { @Autowired MockMvc mockMvc; @Test public void helloTest() throws Exception { mockMvc.perform(get("/hello") .hea..

Spring/Spring MVC 2020.11.15

[Spring] HTTP 요청 맵핑 - 미디어 타입

미디어 타입 맵핑 특정한 타입의 데이터를 담고 있는 요청만 처리하는 핸들러 @RequestMapping(consumes=MediaType.APPLICATION_JSON_UTF8_VALUE) Content-Type 헤더로 필터링 매치 되는 않는 경우에 415 Unsupported Media Type 응답 특정한 타입의 응답을 만드는 핸들러 @RequestMapping(produces=”application/json”) Accept 헤더로 필터링 (하지만 살짝... 오묘함) 매치 되지 않는 경우에 406 Not Acceptable 응답 문자열을 입력하는 대신 MediaType을 사용하면 상수를 (IDE에서) 자동 완성으로 사용할 수 있다. 클래스에 선언한 @RequestMapping에 사용한 것과 조합이 되..

Spring/Spring MVC 2020.11.15

[Spring] HTTP 요청 맵핑 - URI 패턴 맵핑

URL(Uniform Resource Locator 또는 web address, 문화어: 파일식별자, 유일자원지시기) 네트워크 상에서 자원이 어디 있는지를 알려주기 위한 규약이다. 즉, 컴퓨터 네트워크와 검색 메커니즘에서의 위치를 지정하는, 웹 리소스에 대한 참조이다. 쉽게 말해서, 웹 페이지를 찾기위한 주소를 말한다. 흔히 웹 사이트 주소로 알고 있지만, URL은 웹 사이트 주소뿐만 아니라 컴퓨터 네트워크상의 자원을 모두 나타낼 수 있다. 그 주소에 접속하려면 해당 URL에 맞는 프로토콜을 알아야 하고, 그와 동일한 프로토콜로 접속해야 한다. URI Uniform Resource Identifier. resource의 식별자이다. 리소스의 식별은 리소스의 위치를 표시하거나 unique한 이름으로 접근할..

Spring/Spring MVC 2020.11.15

[Spring] HTTP 요청 맵핑 - 요청 메소드

HTTP Method GET, POST, PUT, PATCH, DELETE, ... GET 요청 클라이언트가 서버의 리소스를 요청할 때 사용한다. 캐싱 할 수 있다. (조건적인 GET으로 바뀔 수 있다.) 브라우저 기록에 남는다. 북마크 할 수 있다. 민감한 데이터를 보낼 때 사용하지 말 것. (URL에 다 보이니까) idempotent(멱등) Controller import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public ..

Spring/Spring MVC 2020.11.15

[Spring] Spring IoC Container 연동

Spring IoC Container 연동 Servlet Application 에 Spring 연동하기 서블릿에서 스프링이 제공하는 IoC 컨테이너 활용하는 방법 스프링이 제공하는 서블릿 구현체 DispatcherServlet 사용하기 IoC 컨테이너 활용하는 예제 의존성 추가 org.springframework spring-webmvc 5.1.3.RELEASE web.xml 수정 기존 listener 제거후 아래 추가 org.springframework.web.context.ContextLoaderListener AppConfig 생성 import org.springframework.context.annotation.ComponentScan; import org.springframework.contex..

Spring/Spring MVC 2020.11.07

[Spring] Servlet listener, filter

Servlet listener,filter Servlet listiener 웹 애플리케이션에서 발생하는 주요 이벤트를 감지하고 각 이벤트에 특별한 작업이 필요한 경우에 사용할 수 있다. 서블릿 컨텍스트 수준의 이벤트 컨텍스트 라이프사이클 이벤트 컨텍스트 애트리뷰트 변경 이벤트 세션 수준의 이벤트 세션 라이프사이클 이벤트 세션 애트리뷰트 변경 이벤트 Servlet filter 어떠한 요청이 들어왔을때 servlet으로 보내고, 또 서블릿이 작성한 응답을 클라이언트로 보내기 전에 특별한 처리가 필요한 경우에 사용할 수 있다. 체인 형태의 구조 Servlet Listener는 Servlet Container 영역 위에있다 Servlet Container에서 바로 Servlet에 가는 것이 아니라 Filter를..

Spring/Spring MVC 2020.11.06