의존관계 DI를 알아보기 이전에 의존(Dependency)이라는 키워드에 대해서 알아봅시다. 예를들어, A라는 클래스가 B라는 클래스를 내부적으로 사용하게 되면 A는 B에게 의존하는 관계입니다. UML으로 표시하면 아래와 같습니다. 출처 : http://www.cs.utsa.edu/~cs3443/uml/uml.html 위의 UML을 보면 Person이라는 클래스가 Book이라는 클래스를 내부적으로 사용합니다. 그리고 Book이라는 클래스를 점선 화살표로 가르키게 되는데 이러한 관계를 Person이 Book에게 '의존'한다 라고 합니다. (추가적으로, DI를 처음 배울 때 이상한 점이 있었습니다. 스프링의 DI관계를 자세히 보면, 의존보다는 엄밀히 말해 '연관'이 맞다고 생각했습니다. 근데 왜 의존이라고 ..
POJO 자바나 스프링 프레임워크를 조금이라도 공부 해본 개발자 (혹은 학생)이라면 POJO 라는 단어를 한번쯤 듣게됩니다. POJO의 정의는 사실 그렇게 어렵지 않습니다. 아래 내용은 위키 백과에 나와있는 POJO에 대한 설명입니다. Plain Old Java Object, 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어이다. 2000년 9월에 마틴 파울러, 레베카 파슨, 조쉬 맥킨지 등이 사용하기 시작한 용어로서 마틴 파울러는 다음과 같이 그 기원을 밝히고 있다. [1] “ 우리는 사람들이 자기네 시스템에 보통의 객체를 사..
개요 사용자가 기존 데이터를 수정하게 되었을 때, 기존 데이터를 수정된 데이터로 바꾸는 과정이 필요합니다. 이런 경우, 원본 Domain(혹은 DTO)에게 수정된 내용을 주입하기 위해서 Setter를 이용하는 방법이 진행됩니다. 다만, 필드가 많은 경우 무의미하게 Setter가 많아지게 되고 코드가 길어지게 되는 문제가 생깁니다. 이런 경우 Setter대신 BeanUtils.copyProperties() 메소드를 이용하면 단 한줄로 과정이 처리가 됩니다. Setter로 설정하는경우 public Book modifyBook(Book book) { Book bookById = bookRepository.findBookById(book.getId()); //기존 데이터 bookById.setName(book...
Spring Security (스프링 시큐리티) 스프링 시큐리티를 이용하면 개발시에 필요한 사용자의 인증, 권한, 보안 처리를 간단하지만 강력하게 구현 할 수 있습니다. 일반적인 웹 환경에서 브라우저가 서버에게 요청을 보내게 되면, DispatcherServlet(FrontController)가 요청을 받기 이전에 많은 ServletFilter(서블릿 필터)거치게 됩니다. Spring Security도 서블릿 필터로써 작동하여 인증, 권한과 관련한 처리를 진행하게 됩니다. (본래 서블릿필터는 WAS(Web Application Server)에서 담당하는데 스프링은 이 서블릿필터들을 직접 관리하기 위해서 DelegatingFilterProxy를 web.xml에 설정하여서, 스프링에서 설정된 서블릿 필터 빈..
웹 개발 과정 중에서 클라이언트가 보낸 요청정보를 받아 다루는 일은 굉장히 빈번하며, 반복적인 작업을 요구한다. 아래에 요청정보 처리 방법의 예제로 가장 원초적인(?) 방법부터, 스프링의 기능을 활용 하는 방법까지 총 3가지를 적어보았다. 단계별로 줄어가는 코드의 양만 보더라도, 스프링의 강력함을 알 수가 있다. 예제는 클라이언트가 보낸 nickName, title, content를 받아서 Model에 저장한 후, JSP페이지를 리턴하는 과정이다. 1.HttpServletRequest를 이용하는 방법 서블릿을 활용한 기본적인 방법이다. @RequsetMapping("/board/write") public String ArticleWrite(HttpServletRequest request, Model mo..
Bean이란 무엇인가? Bean을 한마디로 정리하자면, '스프링이 생성하고, 관리해주는 객체' 라고 할 수 있다. (그러므로 개발자가 직접 new연산자로 생성한다면 그것은 Bean이 아니다.) 왜 객체를 Bean으로 해야 할까? 스프링같은 프레임워크를 다루어 보지 않은 초보 개발자들에겐 자연스러운 궁금증이 생겨난다. 왜 객체를 스프링이 생성하고 관리해야 하는가? 스프링은 객체를 다루기 위한 보조 기능들을 제공한다. 예를들어 트랜잭션처리, 객체의 라이프사이클 관리, 자동주입 등등... 정확히 어떠한 기능인지는 알 수 없을지 라도 많은 도움을 준다는 것은 알 수 있다. 이러한 기능을 제공받기 위해서 객체를 제어하기 위한 주도권을 스프링에게 넘겨주어야 하고, 그러기 위해서 객체를 Bean으로 생성 하는 것이다..