Spring (22) 썸네일형 리스트형 Spring Security 3: SecurityFilter #2 DefaultLoginPageGeneratingFilter 로그인페이지 연결해주는 필터 스프링 시큐리티를 적용했을 때 자동으로 생성되는 로그인 페이지 AuthenticationProcessingFilter 1. 사용자가 인증 요청을 보내면 AuthenticationProcessingFilter를 거친다. 2. 인증 필터에서는 검증되지 않은 Authentication 객체를 생성해서 AuthenticationManager에 전달한다. 3. AuthenticationManager는 인증은 검증하고 인증된 정보(인가 등)을 다시 반환하고 사용자의 인증 과정이 완료된다. 큰 흐름은 위 순서로 진행되며 앞서 작성한 객체들은 모두 인터페이스로 작성되어 있으며 알맞은 구현체에서 작업을 수행한다. 구현체(번외) Aut.. Spring Security 2: SecurityFilter #1 이번 시간에는 스프링 시큐리티의 다양한 필터들에 대해 하나씩 알아보도록 하자. 그 전에 필터와 인터셉터의 차이 먼저 짚고 넘어가자. 필터 - 자바의 서블릿 기반 웹 애플리케이션에서 사용된다. 즉, 서블릿 명세에 정의된 구성 요소로서 웹 애플리케이션의 요청과 응답을 가로채는 역할을 한다. 인터셉터 - 스프링 프레임워크에서 제공되는 기능(디스패처 서블릿이 컨트롤러로 요청을 전달하기 전후로 특정 작업을 전달하는 기능 필터는 요청이 들어오자마자 처음으로 거치는 단계. 스프링 컨텍스트 외부에서 작동하며 톰캣 같은 서블릿 컨테 이너 수준에서 작동 인터셉터는 필터를 거친 후, 스프링의 DispatcherServlet이 컨트롤러로 요청을 처리하기 전과 후에 동작 사실 위와 같이 설명을 했지만 스프링 버전 1.2부터 D.. Spring Security 1: Spring Security 이번 스프링 시큐리티를 공부하며 느낀 것인데 스프링 시큐리티 라는 프레임워크는 방대하고 디버깅, 내부 코드를 들여다보지 않는다면 이해하기가 쉽지 않다는 생각이 들었다. 따라서 공부의 깊이는 아래의 요구사항을 만족하는 코드를 작성하는 데 문제가 없을 정도로 할 생각이다. 너무 방대한 프레임워크이기도 하고 앞으로 내가 서비스를 개발 하며 로그인을 직접 구현하는 일은 없을 것 같아(대부분의 서비스는 이미 개발되어 있는 기능 이라고 생각) 목표 설정을 아래와 같이 잡았다. 1. 새롭게 변경된 스프링 시큐리티 버전 6.1 코드 2. 스프링 세션과의 통합 3. 토큰 기반 사용자 인증 4. OAuth 인증 스프링 시큐리티란? 강력하고 커스터마이징 가능한 인증, 인가처리 프레임워크 스프링 베이스 어플리케이션의 사실상 .. Servlet과 Spring MVC 들어가며 스프링 프레임워크를 이용해 개발을 진행하지만, 해당 프레임워크가 어떻게 동작하는지 잘 모른다는 생각이 들었다. 그렇기에 이번 기회에 정리를 하고 넘어가려고 한다. 초기의 Web서버 초기 Web 서버는 정적인 HTML 페이지를 서비스하는 데에만 사용되었다. 이렇기에 사용자의 요청에 따라 다른 처리를 해줄 수 없었고 동적인 데이터를 처리해주기 어려웠다. CGI CGI는 Web 서버와 외부 애플리케이션 간의 상호작용을 가능하게 하는 인터페이스다. CGI를 사용하면 Web 서버에서 실행되는 외부 프로그램으로 동적 컨텐츠를 생성할 수 있다. 이 때 CGI는 인터페이스로 웹서버와 CGI 구현체들간의 규약이다. 보통 CGI 구현체는 C, PHP, PERL 등 다양한 언어로 구성되어 있기 때문에 Web Ser.. 자바 ORM 표준 JPA 프로그래밍 #5(프록시와 연관관계) 들어가며 엔티티를 조회할 때 연관관계에 있는 Entity까지 조회를 하는 것은 효과적이지 않다. JPA는 이러한 상황을 위해 지연 로딩을 지원하는데 연관관계에 있는 엔티티에 프록시 객체를 집어 놓았다가 실제로 사용시 엔티티를 집어 넣는다. 프록시 먼저 프록시에 대해서 살펴보도록 하자. 엔티티를 조회할 때 항상 연관된 엔티티를 사용하지는 않는다. 예를들어 지연로딩을 설정한 경우 엔티티 조회시 연관 엔티티에는 프록시 객체가 들어있다. 연관 엔티티를 상속받은 프록시 객체를 통해 데이터베이스에 쿼리를 해당 엔티티를 사용시에만 날릴 수 있게 한다. 프록시 초기화 과정 1. 프록시 객체에 접근을 시도하게 되면 실제 데이터를 조회한다. 2. 프록시 객체가 초기화 되어있지 않으면 영속성 컨텍스트에 실제 엔티티 생성을 .. AOP의 개념 배경 위의 그림과 같이 프로그램을 작성하다 보면 로깅, 보안 등 공통적으로 나타나는 기능들이 있다. 예를들어 DB커넥션을 할때 DB 커넥션을 연결하고, Statement객체를 세팅하고 쿼리문을 실행하고 예외처리를 실행하는데 이때 DB연산을 제외한 코드는 어떤 데이터베이스 연산을 하든 공통적으로 나타나는 코드이다. 이렇든 코드는 횡단관심사 + 핵심관심사로 이루어져 있는데 이런 횡단 관심사를 따로 분리해서 한 곳에서 관리 하는것을 AOP라고 한다. 상세 이때 어떤 횡단 관심사를 언제 어디에 사용할까? 라는 의문점이 생기게 되는데 이때 나온 개념이 Advice, JointPoint, PointCut이다. 간단하게 각각 무엇인지 살펴보자 Advice 어떤 부가기능을 언제 사용할지에 대한 정의이다. 종류로는 다음.. 자바 ORM 표준 JPA 프로그래밍 #4(연관관계) 들어가며 엔티티들은 대부분 다른 엔티티와 연관 관계가 있다. JAVA에서는 연관관계를 참조를 이용해서 맺고, 데이터베이스는 외래키를 이용해서 맺는다. 따라서 JPA를 이용해 연관관계를 맺기 위해서는 객체의 참조와 테이블의 외래키를 매핑해야 한다. 연관관계 핵심 키워드 방향 단방향, 양방향이 잇다. 이는 외래키 개념이 없는 객체 관계에서만 존재하는데 간단히 객체 A가 B를 참조하지만 B는 A를 참조하지 않는 것이 단방향 둘 다 참조하는 것이 양방향 관계이다. 다중성 1:N, N:1, N:M의 관계가 있다. 예를 들어 회원과 팀은 1:N, 팀과 회원은 N:1, 상품과 주문의 관계는 N:M이다.(한번에 여러 상품을 주문할 수 있고, 상품 또한 서로 다른 주문에 포함 될 수 있으므로) 연관관계 주인 객체를 양방.. 자바 ORM 표준 JPA 프로그래밍 #3(엔티티) 들어가며 Entity와 Table을 정확히 매핑하는 일은 중요하다. JPA에서는 다양한 어노테이션을 통해 매핑을 지원한다. 각 어노테이션에 대해서 공부해 보자 대표적인 어노테이션 객체와 테이블 매핑: @Entity, @Table 기본키 매핑: @Id 필드와 컬럼 매핑: @Column 연관관계 매핑: @ManyToOne, @JoinColumn @Entity JPA를 사용해서 테이블과 매핑할 클래스는 해당 어노테이션이 필수이다. 기본 생성자가 필수적으로 있어야 한다. final 클래스, enum, interface, inner 클래스에는 사용할 수 없다. 저장할 필드에 final을 사용하면 안된다. @Table 생략이 가능하며 생략시 엔티티 이름을 테이블 이름으로 사용한다. uniqueConstraints를.. 이전 1 2 3 다음