Spring 10

[Spring] 웹 스코프(request scope) 와 Provider / 프록시

웹 스코프의 특징 웹 스코프는 웹 환경에서만 동작합니다 웹 스코프는 프로토타입과 다르게 스프링이 해당 스코프의 종료 시점까지 관리하기에 종료 메서드가 호출됩니다 웹 스코프의 종류 request : HTTP 요청 하나가 들어오고 나갈 떄 까지 유지되는 스코프, 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고, 관리됩니다 session : HTTP Session과 동일한 생명주기를 가지는 스코프 application : 서블릿 컨텍스트(ServletContext)와 동일한 생명주기를 가지는 스코프 websocket : 웹 소켓과 동일한 생명주기를 가지는 스코프 학습 내용에 따라 requset 스코프를 기준으로 다루어 보겠습니다. 나머지는 범위만 다르고 동작 방식은 비슷합니다 그림과 같이 클라이언트 A..

Spring 2021.11.30

[Spring] 빈 스코프(프로토타입 스코프 / prototype scope)

프로토타입(prototype) 스코프 빈 스코프란? 스프링은 빈을 기본적으로 싱글톤으로 생성하기 때문에 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때 까지 유지됩니다. 스코프는 말 그대로 빈이 유지할 수 있는 범위를 말합니다. 스프링은 다음과 같은 다양한 스코프를 지원합니다. 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작부터 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 : 스프링 컨테이너가 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더 이상 관리하지 않는 매우 짧은 범위의 스코프 웹 관련 스코프 request : 웹 요청이 들어오고 나갈때 까지 유지되는 스코프 session : 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프 application : 웹의 서블..

Spring 2021.11.29

[Spring] ModelMapper 대신 Mapstruct 사용하기

Entity와 DTO간의 객체 매핑시 사용하는 라이브러리로 ModelMapper와 Mapstruct가 있습니다. 기존에는 ModelMapper를 사용하고 있었지만 Mapstruct가 속도와 성능, 기능면에서 더 우수하다는 글을 보고 구글링하면서 리팩토링을 진행하게 되었습니다. 직접 사용한 부분만 정리하여서 부족한 내용이 많이 있습니다. Mapstuct의 특징 컴파일 시 오류를 확인할 수 있다. 리플렉션(Reflction)을 사용하지 않기 때문에 매핑 속도가 빠르다. (ModelMapper는 런타임 시점에 매핑을 시도합니다.) 디버깅이 쉽다. 생성된 매핑 코드를 눈으로 직접 확인할 수 있다. (생성된 구현체로 직접 접근하여 확인할 수 잇습니다.) 참조) Java - Model(Object) mapping을..

Spring 2021.10.17

[Spring] HiddenHttpMethodFilter로 GET,POST를 DELETE,PUT등 으로 받기_Spring Boot설정

브라우저 VIEW단에서 서버로 데이터를 전송할 경우 FORM으로 GET 또는 POST로 전송이 가능하다. FORM에서 전송된 GET 또는 POST 타입은 서버에서 @GetMapping 또는 @PostMapping으로 받을 수 있지만 나머지 DELETE, PUT, PATCH 타입들은 FORM에서 지원하지 않기 떄문에 기존에는 ajax로 타입을 명시하여 전달한 후 @DeleteMapping, @PutMapping, @PatchMapping으로 받았었다. 하지만 HiddenHttpMethodFilter를 사용하면 기존 FORM 방식으로 전송하고 서버에서는 원하는 타입으로 받을 수 있다. 즉, VIEW단에서 기존 FORM의 GET 또는 POST로 전송한 후 서버에서 PUT, DELETE, PATCH등으로 타입을..

Spring 2021.08.26

[Spring] 유효성 검사(Validating Form)

사용해 보면서 테스트한 내용을 간단하게 정리한 글입니다. validation이란 어떤 데이터의 값이 유효한지, 타당한지 확인하는 것을 의미한다. 즉 데이터 필드들의 값 존재 여부, 글자의 제한 등 해당 양식에 유효한지 판별하기 위해서 사용한다. 1. 의존성 주입 gradle implementation 'org.springframework.boot:spring-boot-starter-validation' maven org.springframework.boot spring-boot-starter-validation 2. 데이터 컨테이너 클래스 유효성을 검사가 필요한 데이터가 담긴 클래스를 선택한다. 아래 Board클래스는 id, title, contet를 프로퍼티로 사용하고 있고 유효성 검사가 필요하다고 가..

Spring 2021.08.18

[Spring] HTTP 메시지 컨버터 (HttpMessageConverter)

HTTP 메시지 컨버터 HTTP 메시지 컨버터란 기존의 뷰 템플릿으로 HTML을 생성해서 응답하는 것이 아니라 HTTP API(REST API)처럼 JSON형식의 데이터 메시지바디를 직접 읽거나 쓰기 위해 메시지 본문을 다루는 방식을 말한다. 스프링 MVC는 다음의 경우에 HTTP 메시지 컨버터를 적용한다. HTTP 요청: @RequestBody , HttpEntity(RequestEntity) HTTP 응답: @ResponseBody , HttpEntity(ResponseEntity) 기존의 요청 URL 파라미터, HTML Form방식에서의 viewResolver대신 HttpMessageConverter이 동작하게 된다. 스프링 부트 기본 메시지 컨버터 (우선순위 순) 1. ByteArrayHttpMe..

Spring 2021.08.02

[Spring] 다양한 요청 매핑(Request Mapping)

다양한 요청 매핑 테스트 환경 1. 로그 출력은 시스템 콘솔 대신 slf4j 로깅 라이브러리 사용 2. view 템플릿 없이 매핑 결과만 테스트하기 위해 RestController사용하여 return값 그대로 화면에 출력 3. 모든 테스트는 Postman 플랫폼으로 테스트 기본 어노테이션 매핑 @RestController public class MappingController { private Logger log = LoggerFactory.getLogger(getClass()); /** * 기본 요청 * 둘다 허용 /hello-basic, /hello-basic/ * HTTP 메서드 모두 허용 GET, HEAD, POST, PUT, PATCH, DELETE */ @RequestMapping(value ..

Spring 2021.08.01

[Spring] 동시요청 - 쓰레드와 멀티 쓰레드(multi thread)

쓰레드(thread)와 멀티 쓰레드(multi thread) 쓰레드(thread)란? 애플리케이션 코드를 하나하나 순차적으로 실행하는 것은 쓰레드이다. 자바 메인 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행된다. 쓰레드가 없다면 자바 에플리케이션 실행이 불가능하다. 쓰레드는 한번에 하나의 코드 라인만 수행한다. 동시처리가 필요하면 스레드를 추가로 생성 해야한다. 멀티 스레드(multi thread)란? 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미한다. 단일 요청 - 쓰레드 하나 사용 요청이 하나 들어오면 요청은 새로운 쓰레드를 생성하여 처리하게 된다. 다중 요청 - 쓰레드 하나 사용 첫번째 요청에 의한 기존 쓰레드의 처리가 지연되는 상황이 발생하면 두번째 들..

Spring 2021.07.22

[Spring] 웹 서버 vs 웹 어플리케이션 서버

웹 서버(WS)와 웹 어플리케이션 서버(WAS) 웹 서버 (Web Server) HTTP 기반으로 동작 정적 리소스 제공, 기타 부가기능 정적(파일) HTML, CSS, JS, 이미지, 영상 예) NGINX, APACHE 웹 어플리케이션 서버 (WAS - Web Application Server) HTTP 기반으로 동작 웹 서버 기능 포함 + (정적 리소스 제공 가능) 프로그램 코드를 실행해서 애플리케이션 로직 수행 동적 HTML, HTTP API (JSON) 서블릿, JSP, 스프링 MVC 예) Tomcat, Jetty, Undertow 웹 서버와 웹 어플리케이션 서버의 차이점 간단하게 차이점을 구분하면 사용하는 기능에 따라 나누어진다. 웹 서버(WS) 웹 어플리케이션 서버(WAS) 정적(파일) HTM..

Spring 2021.07.22

[Spring] 빈 생명주기(Lifecycle) 콜백 - 3가지 방법

Spring Container은 Bean객체들의 생성과 소멸을 관리한다. -> 생명주기(Lifecycle)을 관리한다. 스프링 빈은 간단하게 다음과 같은 라이프사이클을 갖는다. 객체 생성 -> 의존관계 주입 (생성자주입은 예외 : 객체를 만들 때 파라미터로 빈이 미리 들어와야 하기 때문에) 스프링 빈의 이벤트 라이프사이클 (싱글톤) 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료 * 초기화 콜백 : 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출 * 소멸전 콜백 : 빈이 소멸되기 직전에 호출 * 객채의 생성과 초기화를 명확하게 분리하는 것이 좋다. 객체 생성은 메모리에 할당하는 것 까지만, 최소 필요한 데이터를 셋팅 하는..

Spring 2021.07.06