본문 바로가기

728x90
반응형

Spring 정리

(88)
@Controller @RestContrller @Controller, @RestController Spring MVC에서 @RestContrller 어노테이션은 @Controller에 @ResponseBody가 추가된 형태입니다. 스프링 4.0 버전에 등장했으며, RESTful 웹 서비스를 개발하기 위해서 만들어졌습니다. 일반적인 웹 어플리케이션은 HTML + CSS + JavaScript의 조합으로 화면을 구성하지만, REST API는 JSON 혹은 XML 형태로 데이터를 반환합니다. @Controller의 역할은 Map 형태의 모델 객체를 만들고 뷰를 찾는 것이고, @RestController는 단순하게 객체를 반환하고, 객체 데이터는 직접적으로 JSON 혹은 XML 형태로 HTTP 응답에 직접 기록됩니다. Controller는 적절한 view를..
@Controller, @Service, @Repository 차이 개요 스프링을 사용하면서 아마 가장 처음 접했던 것이 @Controller, @Service, @Repository였다. 이 어노테이션들을 무의식적으로 사용했는데, 각 차이점은 있을까? 있다면 어떤 것일까? 알아보도록 해보겠습니다. @Component @Controller, @Service, @Repository의 공통점, 차이점을 비교하기 이전에 먼저 @Component를 알아야 합니다. 스프링은 과거 XML에만 빈 정의가 가능했지만, 스프링 2.5버전부터는 어노테이션을 이용한 의존성 주입이 가능해졌습니다. @Component 가 사용된 클래스들은 스프링 빈으로 등록되고 자동으로 빈 탐색의 대상입니다 @Controller, @Service, @Repository 공통점은 @Controller, @Ser..
생성자 vs setter vs field 의존성 주입 개요 DI를 하는 방법은 생성자 주입과 setter 주입이 있습니다. 2개를 코드로 비교하게 된 계기는, 스프링 공식문서에서 순화참조를 해결하기 위해서는 setter 주입을 사용하라고 했던 내용입니다. 생성자 주입이 훨씬 좋다고 평가되는데, 왜 setter 주입을 사용해서 해결하라고 했을까요? 실제 코드를 통해서 의존성 주입 방식에 따라 빈이 어떤순서로 생성되는지 비교해보겠습니다. 주입 방식에 따른 호출 순서 setter주입, 필드 주입, 생성자 주입에 따라서 매개변수가 있는 생성자, 매개변수가 없는 생성자, setter 함수 등이 어떤 순서로 실행된는지 알아보겠습니다. @Component로는 DogsDao, DogsService, DogsController 총 3개를 사용하겠습니다. setter 주입 ..
DI(Dependency Injection) 개요 IoC is also known as dependency injection (DI) 스프링 공식 문서에서는 IoC 개념과 DI개념의 설명이 일치하는 부분이 많습니다. 2개는 사실상 같은 원리로 작동하기 때문이며 다른 분들이 동의어로 사용하는 경우도 많습니다. 구체적으로 비교하면 차이가 있는데, 스프링 공식 문서를 중심으로 DI를 알아보려고 합니다. DI란? DI는 의존성 주입이라는 뜻으로, 개념적 정의 설명 이전에 먼저 코드로 "의존성이 있다"는 것이 어떤 의미인지 확인해보겠습니다. 사전을 찾아보니 다음과 같습니다. 영어사전을 보면, 불필요할 정도의 종속을 말하기도 합니다. 한국어를 보면, 다른 것에 의지하여 존재하는 것입니다. 즉, 혼자서는 독립적으로 존재하지 못하고 다른 요소에 도움을 받아야만 ..
DispatcherServlet & ContextLoaderListener * 개요 서블릿을 먼저 공부하고, 스프링 구조를 공부하면서, DispatcherServlet이 중요한 역할을 한다는 것을 알게되었습니다. 이 서블릿 덕분에 클라이언트의 요청을 스프링이 처리할 수 있으므로 그 동작과정과 작동원리가 궁금했습니다. 또한 이와 관련하여 WebApplicationContext와 ContetLoaderListener도 함께 공부했습니다. Web Application에는 1개의 ServletContext가 있습니다. 여기에는 여러 자원들의 공유자원들이 있습니다. WebApplicationContext는 ServletContext 안에 만들어 집니다. ContextLoadListener는 Root WebApplicationContext에 여러 자바 빈들을 적재합니다. 주로 Servic..
Servlet * 개요 웹 자바 프로그래밍을 접하면, Servlet의 개념이 가장 기초가 됩니다. Servlet 자체가 웹 어플리케이션을 만들기 위해서 나온 기술이기 때문입니다. 하지만, 제대로 개념을 정리하거나 명쾌하게 답할 수가 없었습니다. 이 글을 통해서 개념을 정리해보겠습니다. * Servlet 소개 Servlet은 문맥에 따라서 여러 의미를 가집니다. - 웹 어플리케이션을 만들기 위해 Http 요청, 응답을 지원하는 기술입니다. - 동적 웹 페이지를 만들기 위해서 서버에 배포되는 컴포넌트입니다. - Web Application Context(WAS)(tomcat, jeus, weblogic)에서 기동되는 자바 클래스입니다. 참고로, WAS는 서블릿을 관리하기 위해 서블릿 컨테이너를 가지고 있습니다. - 각종 ..
ApplicationContext 개요 개인프로젝트를 진행하면서, ApplicationContext로 직접 빈을 호출하여 사용한 부분이 있었습니다. 스프링 컨테이너를 관리하는 중요한 인터페이스이다 보니, 스프링 IoC 컨테이너와 스프링 빈도 관련된 내용을 정리했습니다. Application & BeanFactory The org.springframework.beans and org.springframework.context packages are the basis for Spring Framework’s IoC container. The BeanFactory interface provides an advanced configuration mechanism capable of managing any type of object. Applic..
일반 Join vs Fetch Join * 개요 Fetch Join를 공부하고 정말 좋은 기능이며 성능에 뛰어나다는 사실을 알았습니다. 그렇게 공부하던 중, 일반 Join과 Fetch Join은 구체적으로 어떤 차이가 있는지 궁금해졌습니다. 따라서 예제를 기반으로 내용을 정리합니다. * 조건 Author : Book이 1 : N로 연관관계를 가지고 있다고 가정합니다. 연관관계의 주인은 Author입니다. 특히, join은 FROM절에 N인 Book이 오느냐, 1인 Author가 오느냐에 따라서 성능이 차이가 납니다. 각 상황을 비교해봅니다. * Author @Entity public class Author implements Serializable { private static final long serialVersionUID = 1L; @I..

728x90
반응형