ExceptionResolverspring(WAS) 내 예외 처리BasicErrorControllerspring 기본 에러 처리 (페이지 기반)스프링부트는 예외가 발생하면 기본적으로 `/error`로 에러 요청을 다시 전달하도록 WAS 설정을 해두었다고 한다.@RequsetMapping에 /error로 매핑된걸 볼 수 있다. 참고로 에러 경로는 properties에서 server.error.path로 변결 가능하다별도의 설정이 없다면 예외 발생시에 BasicErrorController로 에러 처리 요청이 전달된다.HandlerExceptionResolverJava에서는 예외 처리를 위하 try-catch를 사용해야하지만 try-catch를 모든 코드에 붙이는 것은 비효율적임스프링은 예외 처리를 위한 tr..
ASAC 웹 풀스택/Spring Boot
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..
Spring이 대신 객체 생성Spring Bean: 개발자가 직접 객체 생성한게 아니라 Spring 이 대신 객체 생성 주입 해주는 단위Singletone 싱글톤: 싱글톤 객체를 Spring의 ApplicationContext이 대신 만들어서 주입Spring Bean이 싱글톤으로 관리되는 이유대규모 엔프라이즈 서버 환경을 서버 하나당 최대로 초당 수십, 수백 번씩 브라우저나 여러 시스템으로부터 요청을 받아 처리할 수 있는 높은 성능이 요구되는 환경Spring MVC 구조에 따라 하나의 요청에 대한 응답을 만들기까지, 데이터 액세스 로직, 서비스 로직 등의 다양한 기능을 담당하는 객체들이 모두 참여하는 계층형 구조이다.결과: 요청이 올때마다 각 로직을 담당하는 객체를 새로 만들어서 사용한다면 서버에 엄청난..
@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..
Tomcat + Spring 간단 구조Tomcat + Spring 구조는 위와 같다 = JAR(JVM) + Tomcat(Servlet) + Spring(Controller) 💡Spring Boot가 유저의 요청(Request)받고 -> 작업(Processing) 후 -> 응답(Response) 반환하는 절차1. Request: 수많은 요청들을 Request Queue에 적재2. Processing: Request Queue에서 하나를 가지고 수행 후3. Response: 결과를 반환이 설명만으로는 스프링 MVC가 어떻게 요청을 받고 작업하고 응답하는지 모름 (심화) 설명을 통해 자세히 알아보자 심화) Tomcat + Spring 실제 동작 과정위에서 설명된 요청 -> 작업 -> 응답 절차를 Spring..