Spring (8) 썸네일형 리스트형 스프링(부트) - DTO와 Entity의 분리 MVC에서 Model의 역할 - Entity MVC는 Model-View-Controller의 약자로 프로젝트를 구성할 때, 구성요소를 세 가지 역할로 나눈 것이다. 스프링 JPA를 사용할 때, Entity가 이러한 Model의 역할을 담당한다. 이렇게 Model의 역할을 담당해야할 Entity객체를 우리는 View와 Controller가 통신할 때, 넘겨주고싶은 욕구가 마구 생긴다. 결국, Entity하나로 귀결될 요청과 응답일 것이고, 대부분의 경우를 하나의 객체로 해결할 수 있다는 간단함 때문이다. 하지만 우리는 Entity가 아닌 Dto라는 개념을 가지고 사용을 한다. Dto란 Data Transfer Object로 계층간 데이터 전달을 위한 객체이다. 왜 Entity로 데이터를 주고 받으면 편할.. Spring Security - JWT이란? JWT란? JWT는 Json Web Token의 줄임말로, 클레임이라는 형태의 정보 조각들을 JSON 형태로 디지털 서명이나 암호화하여 데이터를 생성하는 표준이다. 즉, 보안이 필요한 정보를 안전하게 전달할 수 있는 토큰을 만드는 방법이다. JWT Authentication은 이러한 JWT를 이용해서 사용자를 인증하는 방식을 말한다. 왜 JWT인가? 일단, 기본적으로 JWT는 보안 데이터 전달을 위해 사용하며, 주로 로그인 등의 사용자 인증을 위해 사용한다. 특히, 하나의 End Point가 아닌 Mobile/Web 등의 multiple endpoint 환경에서는 이러한 방식이 선호된다. 예를 들어, rest API를 사용하는 경우 이러한 방식을 사용하며, 구글 로그인 등 3rd Party에서 인증을 제.. Spring - 의존성주입 방법의 비교(생성자 주입, Setter주입, field주입) Spring의 DI를 할 수 있는 방법은 3가지 - 생성자 주입, Setter주입, Field주입. 생성자 주입 class Controller{ private Service service; @Autowired public Controller(Service service) { this.service = service; } public void doServiceThing() { service.doSomething(); } } 장점 - 생성자 주입을 하면 일부러 Null을 넣지 않는 이상 주입되는 인스턴스(Service)가 항상 존재. - 이 때문에 doServiceThing을 호출할 때, service가 null이어서 나타나는 NullPointerException이 일어나지 않음. - 또한 의존관계를 주입하.. SpringSecurity - jdbc를 이용한 인증/권한 처리 - 오라클 사용 - XML 설정 사용 - JDBC를 위한 DriverManaberDataSource 사용 1. 권한 처리를 위한 테이블 생성 CREATE TABLE authorities( username VARCHAR2(50) NOT NULL PRIMARY KEY, password VARCHAR2(50) NOT NULL, enabled char(1) DEFAULT '1' ); CREATE TABLE authorities( username VARCHAR2(50) NOT NULL, authority VARCHAR2(50) NOT NULL, CONSTRAINT fk_authorities_users FOREIGN KEY(username) REFERENCES users(username) ); CREATE UNIQ.. SpringSecurity - 서블릿 기반 구조 서블릿에서 필터란 서블릿의 필터는 원래의 오리지널 서블릿을 수행하기 전에 불려지는 로직을 의미한다. 이를 위해 FilterChain이 만들어지는데, 이 안에 여러 필터 끝에 오리지널(?) 서블릿이 들어간다. DelegatingFilterProxy 스프링 시큐리티에서는 DelegatingFilterProxy라는 Filter가 이런 서블릿에서의 필터처럼 위치한다. DelegatingFilterProxy는 서블릿 컨테이너와 스프링의 ApplicatoinContext를 연결해주는 역할을 한다. 이는 서블릿의 필터처럼 동작하지만 실제 수행은 Filter를 구현한 Bean에 의해 이뤄진다. DelegatingFilterProxy는 Filter Bean을 찾는 걸 늦출 수 있다. 기존의 서블릿 필터는 컨테이너가 생성.. Spring - ServletContext와 RootContext Context란? Context는 스프링의 컨테이너를 구체화한 객체이다. 컨테이너는 조립되기 위해 생성된 Bean(객체)가 담겨져 있는 공간이며, Context 역시 조립되기 위해 생성된 Bean(객체)가 담겨져 있는 컨테이너 객체를 의미한다. DispatcherServlet이란? 먼저, Servlet은 자바 웹 개발에 있어서 통신의 인터페이스 역할을 하는 기술을 의미한다. 즉, 클라이언트 요청을 받고, 결과를 전달해주는 역할이다. (웹 서버 통신에서 요청이 들어오고, 결과가 나가는 첫 번째 문이랄까..) 스프링은 front controller pattern이라고 해서 중심 Servlet이 모든 요청을 같은 알고리즘으로 처리하는데, 이 때 이 중심 Servlet이 DispatcherServlet이다. (.. Spring - 관점 지향 프로그래밍(AOP) '코드로 배우는 스프링 웹 프로젝트' 참고 AOP란? 스프링 공부를 하면서 나오는 생소한 개념 중 하나는 AOP이다. AOP는 Aspect Of Programming이라는 개념으로 번역하면 관점 지향 프로그래밍이다. 사실 잘 와닿지 않은데, 개발자들 사이에서는 관심사(concern)'라는 말로 통용된다고 한다. 관심사라는 것은 핵심로직은 아니지만 코드를 작성하면서 고려해야하는 상황이다. 예를 들면, 올바른 파라미터가 들어왔는지, 사용자는 적절한 권한을 가졌는지, 예외처리는 어떻게 할 것인지 등의 관심사에 대한 것이다. AOP는 이러한 관심사를 분리하고, 핵심 로직에 집중할 수 있도록 돕는다. AOP관련 용어들 타겟 : 순수한 비즈니스 로직 Advice : 관심사(concern) 구현 코드 JoinPoin.. Spring - 의존성 주입(DI)/IoC컨테이너/ApplicationContext 스프링을 공부하면서, 가장 먼저 만나는 개념은 의존성 주입이다. 의존성 주입이라는 것은 필요한 부품을, 해당 부품이 필요한 곳에 넣는 것이다. 일체형 코드와 부품형 코드 건전지를 포함한 장난감을 생각해보자. 일체형 장난감은 만들 때 건전지도 함께 만든다. 조립형 장난감은 따로 만든 건전지를 넣을 수 있도록 만든다. 만약, 건전지를 바꾸거나 수정할 일이 있을 때, 일체형 장난감은 장난감을 아예 고쳐야 하지만, 조립형 장난감은 단지 건전지를 빼서 바꾸면 된다. Spring은 이러한 조립형 장난감의 형식을 통해 수정과 유지보수를 쉽게 만들어준다. 실제 코드로 가져오면, A가 장난감 객체, B가 건전지 객체라 할 때, 일체형 코드는 class A{ //장난감 private B b; //배터리 public A().. 이전 1 다음