Back-end/Spring & JPA

Back-end/Spring & JPA

[Spring] Spring Security - Session 기반 인증 vs JWT 기반 인증

▼ Why ?오늘은 Spring Security에서 "세션(Session)을 기반으로 하는 인증"과 "JWT 토큰을 기반으로 하는 인증"의 차이점에 대해 알아보고 정리해보려고 ▼ 세션(Session) 기반 인증 Session 기반 인증/인가 처리 절차STEP 1: 사용자 인증 과정인증 요청 ➙ 인증 필터 ➙ 인증 관리자(AuthenticationManager) ➙ 사용자 세부 정보 로드 후 비교 ➙ 인증 완료 STEP 2: Session 생성 및 관리서버에서 앞선 인증에 성공하여 메모리에 사용자 정보를 저장하게 된다.➙ Spring Security는 해당 사용자를 위한 "HTTP Session"을 생성한다.➙ "Authentication 객체"를 담고 있는 사용자의 현재 "SpringContext"를 담..

Back-end/Spring & JPA

[Spring] 스프링 시큐리티(Spring Security)

▼ Why ?이번에 토이 프로젝트를 하면서 스프링 시큐리티 이용한 로그인을 구현하려고 하는데, 스프링 시큐리티에 대한 이해가 많이 부족하다고 느껴서 제대로 다시 공부해보려고 한다!▼ What ?Spring Security ArchitectureSpring Security의 세션(Session)을 기반으로 하는 인증(Authentication) 과정과 인가(Authorization) 과정주요한 Spring Security Filter▼ 스프링 시큐리티 구조(Spring Security Architecture) 인증(Authentication)과 인가(Authorization)가 뭐지 ? 인증(Authentication): 자신이 A라고 주장하는 사용자가 A가 맞는지 확인하는 것.인가(Authorizatio..

Back-end/Spring & JPA

[Spring] 서블릿(Servlet)

▼ 서블릿(Servlet) 서블릿(Servlet) ? 클라이언트(Client)의 요청을 처리하고 그 결과를 클라이언트에 반환해주는 프로그램. 동적 웹 페이지 서버에서 각 사용자의 요청을 하나의 스레드로 처리하는 자바(java) 웹 프로그램이다. html에 java 코드를 포함하고 있는 "JSP"와 달리 java 코드 내에 html을 포함하고 있다. 서블릿(Servlet)의 동작 (ex. 로그인 페이지) 사용자의 id/password를 담은 Http Request를 전송한다. Http Request를 받은 "웹 서버(WS)"는 해당 요청을 톰캣(tomcat) 같은 "웹 어플리케이션 서버(WAS)"에게 넘긴다. ( 위 그림에선 "웹 서버"가 생략됐다. ) HttpServletRequest와 HttpServl..

Back-end/Spring & JPA

[Spring] Spring Boot Package Structure : 계층형(by Layer) vs 도메인형(by Domain)

▼ What ? "악쓰는하마"라는 노래방 키오스크의 백엔드 서비스를 만들어보는 토이 프로젝트를 하기 전에 일단 스프링 부트의 패키지 구조에 대해 공부해보고, 계층형 구조와 도메인형 구조 중 어떤 구조에 따라 해당 프로젝트를 진행해야 할지도 함께 생각해보려고 한다. ▼ 스프링 부트 패키지 구조 MVC 패턴에 따른 스프링에서의 흐름 클라이언트(~View)에서 서버로 요청을 보낸다. 요청을 받은 Controller에서 '비즈니스 로직'에 해당하는 Service에 요청을 보낸다. Service에서 요청받은 비즈니스 로직을 처리하는데, 그 과정에서 DB에 저장된 데이터가 필요하다면 DAO(~Repository)를 통해 DB에 접근해야 한다. (이전까진 DTO를 통해 계층 간의 요청/응답이 이루어진다.) DAO는 ..

Back-end/Spring & JPA

[Spring] Bean (+ Proxy Pattern, CGLIB, Singleton, AOP)

▼ Why ? MVC 패턴을 공부하면서 MVC 구조에서의 ' Model ' 역할을 하는 것이 Bean이라는 것을 알게 되었다. 그리고 이번에 진행하고 있는 "Donggram" 웹 개발 프로젝트에서 팀원이 작성한 코드에서 ' @Bean ' 애너테이션을 보게 되었고 이게 무슨 기능을 하는지 궁금하기도 하고 Bean에 대해 알아둬야 될 것 같아 이번 기회에 Bean에 대해 공부하게 되었다. ( 2023-11-04 ) GDSC - Web 커리큘럼 5주차에 배운 "Spring Security" 를 공부하면서 '@Configuration' 이라는 애너테이션에 대해 알게 되었다. 이 @Configuration 애너테이션은 스프링 시큐리티의 세부 설정을 위해 생성한 SecurityConfig 클래스가 스프링의 환경 설..

Back-end/Spring & JPA

[Spring] DI & 스프링 컨테이너(+ @Autowired)

▼ Why ? What ? "빈(Bean)" 을 다루기 위해선 "의존성 주입(DI)" 의 개념을 이해하는 것은 필수적이다. 최근에 GDSC - Web 커리큘럼에서 스프링 시큐리티 환경 설정 클래스를 다룰 때 빈(Bean)을 수동적으로 생성하는 코드를 작성해봤다. 이렇게 생성한 빈(Bean)을 사용하는 과정을 추가적으로 공부해봤는데, 의존관계가 있는 클래스 타입의 빈(Bean)을 "스프링 컨테이너"에서 탐색한 후에 찾은 빈(Bean), 즉 객체를 외부에서 주입해주는 과정이 필요하다. 따라서, DI에 대한 개념을 다잡아보고 스프링 컨테이너에 대해서 공부한 후에 정리하였다. ▼ DI (Dependency Injection) DI ? "의존관계 주입 (DI)" 은 의존관계를 "스프링 컨테이너", 즉 외부에서 객..