항해99/실전 프로젝트

중간발표자료 BE 질의응답

숲별 2022. 12. 9. 16:12
728x90

- 중간발표자료 BE 질의응답
    1. ***@AuthentificationPrincipal security에서 사용한 Filter***
        
        UsernamePasswordAuthenticationFilter를 사용했습니다.
        저희는 먼저 JwtAuthFilter라는 커스텀 필터를 통해 securityContextHolder에 저장된 Authentication이 없다면
        암호화된 JWT토큰을 바탕으로 Authentication 객체를 생성하여
        securityContextHolder에 집어넣습니다.
        그후 UsernamePasswordAuthenticationFilter가 실행되어 securityContextHolder에 저장된 Authentication객체를 확인하여
        인증을 합니다.
        
        추가
        
        1.@AuthenticationPrincipal은 SecurityContextHolder.getContext().getAuthentication().getPrincipal()와 같아서
        UsernamePasswordAuthenticationFilter에서 필터링 됩니다.
        
        2.UsernamePasswordAuthenticationFilter는 아이디와 패스워드를 통한 인증 방식 입니다.
        
        3.@AuthenticationPrincipal 를 사용하여 UserDetailsService에서 리턴한 객체인 Member객체를 가져올 수 있습니다.
        
        4.JwtAuthFilter를 통해 토큰에 저장된 email을 가져와 Member테이블에서 email이 존재하는지 체크한 후 email이 존재한다면 그 email을 사용하고 있는
        
        Member객체를 Authentication객체에 집어넣습니다.
        
        5.JWT(JSON Web Token)
        JWT란 인증에 필요한 정보들을 암호화시킨 JSON토큰을 의미합니다.
        JWT 기반 인증은 JWT토큰(Access Token)을 HTTP헤더에 실어 서버가 클라이언트를 식별하는 방식입니다.
        JWT는 '.'을 구분자로 가지며 3가지 문자열의 조합입니다. (Header.Payload.Signature)
        헤더는 서명 암호화 알고리즘과 토큰 유형이 들어있습니다.
        페이로드는 토큰에서 사용할 정보들이 key-value형식으로 들어있습니다.
        시그니처는 헤더에서 정의한 알고리즘을 활용하여 헤더와 페이로드의 값과 서버 key값을 합친것을 암호화하여 나타냅니다.
        
        6.SecurityContextHolder(인증된 사용자 정보인 Principal을 Authentication에서 관리하고 Authentication을 SecurityContext가 관리하고 SecurityContext는 SecurityContextHolder가 관리한다.)
        
        

Authentication을 담고 있는 Holder라고 정의 할 수 있습니다.
        
        Authentication자체는 인증된 정보이기에 SecurityContextHolder가 가지고 있는 값을 통해 인증이 되었는지 아닌지 확인할 수 있습니다.(Authentication.isAuthenticated();)
        
        기본적으로 ThreadLocal을 사용합니다.(ThreadLocal: 한 쓰레드 내에서 사용하는 공용 저장소)
        
        즉 ThreadLocal을 이용하여 Authentication을 한 쓰레드 내에서 공유가 가능합니다.
        
    2. ***JPA vs QueryDSL***
        1. Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음
        자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
        인터페이스 이기 때문에 Hibernate, OpenJPA 등이 JPA를 구현함
        2. ORM(Object-Relational Mapping)
        우리가 일반 적으로 알고 있는 애플리케이션 Class와 RDB(Relational DataBase)의 테이블을 매핑(연결)한다는 뜻이며, 기술적으로는 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것이라고 보면된다.
        3. Querydsl은 Java의 JPA, MongoDB 및 SQL을 포함하여 여러 백엔드에 대해 SQL 유사 쿼리를 구성할 수 있는 프레임워크입니다
            1. 장점: 복잡한 쿼리, 동적 쿼리, 유저편의성, JPQL의 모든 기능이 호환 됨
            2. 단점: 세팅이 복잡하다.
    
     +a.  ***CORS란?***
CORS란 Cross-Origin Resource Sharing, 교차 출처 리소스 공유의 축약어로
HTTP헤더를 사용해 실행중인 웹 애플리케이션의 출처와 다른 출처의 리소스에 접근하는 권한을 부여하는 기능입니다.
브라우저에서는 기본적으로 SOP(same-origin policy, 동일출처정책)로 다른 출처의 리소스에 접근하지 못하도록 되어 있지만,
웹의 고도화로 다른출처의 자원에 접근할 필요성이 발생하면서 CORS로 이를 허가할 수 있도록 만들었습니다.
CORS사용을 위해서는 백엔드 서비스에서 요청이 들어올 출처들을 미리 명시해줘야 합니다.

'항해99 > 실전 프로젝트' 카테고리의 다른 글

13주차 WIL  (0) 2022.12.18
12주차 WIL  (0) 2022.12.11
11주차 WIL  (0) 2022.12.05
10주차 WIL  (0) 2022.11.28
Enum  (1) 2022.11.28