JSON 반환 시 세부 설정@JsonIncludeJSON 노출 여부에 대한 조건 @JsonInclude(JsonInclude.Include.NON_NULL) `JsonInclude.Include.NON_NULL` 이 외에 더 많은 옵션들이 존재하지만 실제로 NON_NULL을 제외하곤 다양하게 사용 X 실습: @JsonInclude 를 통해 응답으로 노출될 값들에 대한 세부 조율서버 내부 데이터 조작을 위한 Entity 클래스와 외부와의 소통을 위한 DTO 클래스 분리 -> stream 활용해서 User 객체를 value로 가진 hashMap을 UserResponseDto 를 요소로 가진 리스트로 변경 클래스 단위로 null 필드는 JSON에서 제외 @JsonProperty결과 객체 JSON반환 시 ..
분류 전체보기
이 아키텍처의 목적은 관심사의 분리 (Separation of concern) = 높은 유지 보수성과 쉬운 테스트Presentation Layer간단하게 생각하면 MVC 아키텍처 패턴 부분 전체 Business LayerSpring 프레임워크는 개발자에게 비지니스 구현에만 신경쓰도록 한다. 위 이미지에서 @Service 부분 Data Access Layer비지니스 구현을 위한 데이터 조회와 같이 CRUD 제공 - @Repository@Repository ~= DAO: 이 두 개념은 다르나, Spring에서 혼용해서 쓰기도 한다.DAO와 @Repository 차이DAODB에 직결된 CRUD 함수(구현체는 EntityManager 통해 수행) @RepositoryEncapsulating DAO (DAO 의 ..
MVC 아키텍쳐 패턴 개요Front Controller: URL 에 알맞은 Controller 찾아서 (HandlerMapping) 호출Controller는 ViewTemplate 명칭 및 Model을 반환웹 페이지(HTML) 반환 시: ViewResolver 를 통한 ViewTemplate + Model -> View 생성 및 반환데이터(JSON)반환 시: HttpMessageConverter 를 통해 -> JSON 변환 및 반환 Front Controller 이전의 ServletJava EE 시절Servlet은 요청 URL 마다 할당 되어 개발Java는 거대 웹 어플리케이션 프로젝트를 위해 Java EE 라는 Java 웹 표준 기술을 만들었었다.Java의 웹 표준 중 Java 기반 CGI 프로그램 ..
Spring Boot 의의1. 의존성 관리모든 의존성 신경쓰지 않고, 버전 충돌없이 잘 말아놓은 최상위 패키지 사용 2. 자동 설정의존성 관리에서 꽤 많은 라이브러리들을 내포하게되는데, 이 모든 것에 대한 설정이 문제@SpringBootApplication: Spring Boot 에 필요한 모든것을 세팅 및 기본 설정@SpringBootConfiguration: @Configuration을 통해 추가 @Bean등록 가능@EnableAutoConfiguration: 사전 정의된 라이브러리들에 대한 기본 설정 값@ConponentScan: XML 아닌 @Controller 등 어노테이션 기반 Bean 수집 규칙 정의 Spring 과 Spring Boot의 차이SpringWAR(Web Application A..
@PathVariable, @RequestParam, @ModelAttribute HTTP 요청 파라미터 - 쿼리 파라미터, HTML Form쿼리 파라미터, HTML From 1. request.getParameter() HttpServletRequest 의 request.getParameter() 를 사용하면 다음 두가지 요청 파라미터를 조회할 수 있다. GET, 쿼리 파라미터 전송 POST, HTML Form 전송 @RequestMapping("/rmystudylog.tistory.com@ModelAttribute 사용시 역직렬화요청 객체 클래스에 아래 Lombok이 없다면 역직렬화가 되지 않아 값이 제대로 들어오지 않는다.@AllArgsConstructor@NoArgsConsturctor + @Se..
Spring이 대신 객체 생성Spring Bean: 개발자가 직접 객체 생성한게 아니라 Spring 이 대신 객체 생성 주입 해주는 단위Singletone 싱글톤: 싱글톤 객체를 Spring의 ApplicationContext이 대신 만들어서 주입Spring Bean이 싱글톤으로 관리되는 이유대규모 엔프라이즈 서버 환경을 서버 하나당 최대로 초당 수십, 수백 번씩 브라우저나 여러 시스템으로부터 요청을 받아 처리할 수 있는 높은 성능이 요구되는 환경Spring MVC 구조에 따라 하나의 요청에 대한 응답을 만들기까지, 데이터 액세스 로직, 서비스 로직 등의 다양한 기능을 담당하는 객체들이 모두 참여하는 계층형 구조이다.결과: 요청이 올때마다 각 로직을 담당하는 객체를 새로 만들어서 사용한다면 서버에 엄청난..
Spring MVC에서 HandlerAdapater가 필요한 이유 위 사진은 Spring MVC 구조이다. 여기서 다른 건 다 알겠는데 왜 Handler Adapter 존재 이유에 대해 궁금해졌다.V4구조 처럼 프론트 컨트롤러에서 요청에 대한 매핑 정보를 가져온 후 바로 해당 컨트롤러를 호출하면 되지 않나?HandlerAdapater가 없다면아래 코드는 HandlerAdapter가 없는 프론트 컨트롤러이다. 우리가 사용할 컨트롤러를 `controllerMap`에 저장해 두었다가 사용한다.@WebServlet(name = "frontControllerServletV4", urlPatterns = "/front-controller/v4/*")public class FrontControllerServletV4..
@Controller요청을 받아, 그에 대한 처리 뒤, 응답을 반환 Front Controller (Servlet)요청을 받아, Spring에게 처리를 위임 한뒤, 응답을 반환 DispathcerServlet 구현체HandlerMapping: 요청에 해당하는 처리메서드가 존재하는지 검색 (전화번호부)HandlerAdapter: Spring 에게 처리를 위임? (이 구현체가 요청에 맞는 컨트롤러를 호출한다)HandlerMapping 은 아래 HandlerAdapters 모두 순회하며 적합한 HandlerAdapter 검색protected HandlerAdapter getHandlerAdapter(Object handler) throws ServletException { if (this.handlerA..
Tomcat + Spring 상세 구조애니메이션으로 이해하는 Spring 동작 원리1. Tomcat 의 Servlet Container유저의 요청에 따라 Servlet(Front Controller) 할당유저의 요청에 따라 스레드를 할당하고, 모든 스레드는 단일 DispatcherServlet으로 사상된다. 2. Spring의 Spring ContainerDispathcerServlet요청에 따라 Spring Controller 할당 Spring Container = Servlet WebApplicationContext + Root WebApplicationContext 1) Servlet WebApplicatoinContext서블릿에서만 이용되는 Bean에 대한 ContextDispatcherServl..