ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring 숙련 1주차
    코딩공부/Spring 2023. 6. 21. 21:01

    Bean을 수동으로 등록하는 방법 

    보통 - 자동등록을 사용하는 것이 편리 

    수동등록 - 기술적인 문제, 공통적인 관심사를 처리할 때 사용(기술지원 bean 등)

    BCrypt: Hash 함수 

    matches(입력받은 평문, 암호화한 패스워드): 내부에서 암호화한 다음에 비교 

     

    같은 타입의 Bean이 두 개라면?

    등록은 문제 없음 

    같은 타입으로 Bean이 두개면 @Autowired를 사용해 Bean 객체를 주입할 때 오류 발생 -> 해결방법

    • 등록이 된 Bean의 이름 명시 
    • @Primary 사용: 같은 타입의 Bean이더라도 우선순위가 생김 - 범용적인 경우에 사용
    • @Qualifier("Bean 객체") 사용: 해당 Bean 객체 주입 - 지역적인 경우에 사용 
      • 스프링에서 우선순위 - 보통 좁은 범위가 우선순위가 더 높음 

     

    인증과 인가

    • 인증(Authentication)
      • 해당 유저가 실제 유저인지 인증하는 개념 
    • 인가(Authorization)
      • 해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 개념 
    • 웹 애플리케이션 인증
      • 서버와 클라이언트 구조
      • 통신 - Http라는 프로토콜을 이용 / 비연결성, 무상태
        • 비연결성(Connectionless): 서버와 클라이언트가 연결되어있지 않음, 리소스 절약을 위함 -> 하나의 요청에 대해서만 연결하고 끊음 
        • 무상태(Stateless): 서버가 클라이언트의 상태를 저장하고 있지 않음, 리소스 절약 / 이전 기록? - 연속적으로 느낄 수 있게끔 URL을 통해 노력 
      • 인증의 방식(인증을 어떻게 유지하는지)  
        • 쿠키-세션 
          • 쿠키: 토큰 저장소
          • 세션: 어떠한 인증 정보 
          • 서버가 특정 유저가 로그인이 된 상태를 저장하는 방식 중 하나/ 인증과 관련된 최소한의 정보만 서버가 가짐 -> 로그인 유지
        • JWT기반 인증 
          • Access Token(JWJ) 사용
          • 쿠키-세션 방식은 세션 저장소가 있지만 JWT 방식은 없음 - 토큰 자체를 브라우저에 던짐 -> JWT가 훨씬 효율적일 수 있음 

    쿠키와 세션: http에 상태 정보를 유지(Stateful)하기 위해 사용, 쿠키와 세션을 통해 서버에서는 클라이언트 별로 인증 및 인가를 할 수 있게 됨 

    쿠키: 클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일 - 개발자 도구를 통해 확인 가능 

    세션: 서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용, 서버에서 클라이언트 별로 유일무이한 세션ID를 부여한 후 클라이언트 별 필요한 정보를 서버에 저장, 세션 ID는 클라이언트의 쿠키값으로 저장(세션 쿠키)되어 클라이언트 식별에 사용

     

    Local storage, session storage <- 추가학습 하기 

     

    JWT(Json Web Token)

    • json포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim기반의 web token. 토큰의 한 종류, 일반적으로 쿠키 저장소를 사용 
    • 서버 1대: 어떤 클라이언트든 세션1에서 처리
    • 서버가 2대 이상: 로드 밸런서가 중간 역할 -> 랜덤으로 요청할 수도 있음 
      • 해결방법 
        • Sticky Session: 클라이언트마다 요청 서버를 고정
        • 세션 저장소를 생성하여 모든 세션을 저장 
        • JWT 사용
          • 1) 쿠키 객체에 토큰을 담은 다음 쿠키를 Response 객체에 담는 방법  
          • 2) JWT토큰을 Response Header에 달아서 보내는 방법
          • 모든 서버가 동일한 시크릿 키 가지고 있어야 함
          • 장점
            • 동시접속자가 많을 때 서버 측 부하 낮춤
              • 확인 요청을 보내지 않아도 됨
            • 클라이언트, 서버가 다른 도메인을 사용할 때
          • 단점 
            • 구현 복잡도 증가 
            • JWT에 담는 내용이 커질 수록 네트워크 비용 증가 
            • 기 생성된 JWT를 만료시킬 방법 없음 
            • 시크릿 키 유출 시 JWT 조작 가능 -> JWT를 사용할 때 민감한 정보는 담지 말것
    • util: 다른 객체의 의존하지 않고 하나의 모듈로 동작하는 클래스/ 어떠한 기능을 가진 메서드들의 한 묶음, 모듈  

    처리방식 - 프론트엔드 개발자들과 협의 

     

    추가학습: Bearer

     

    JWT를 디코딩해서 보여주는 사이트 

    https://jwt.io/

     

    JWT.IO

    JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

    jwt.io

    @Value("${application.properties의 key값}") - application.properties의 값 가져오는 방법 

    JWT 라이브러리 버전 변경이 있었음 - 강의는 11.5 버전 

    로그 - 애플리케이션이 동작하는 동안 프로젝트의 상태나 어떠한 동작정보를 시간 순으로 기록하는 것 - 로그 프레임워크 사용 / @Slf4j 로 추가할 수 있음 

    @PostConstruct 

    .signWith(키, 암호화 알고리즘)

     

    패스워드 암호화

    법률에 의한 의무 

    암호화 후 패스워드 저장이 필요 - 단방향 암호 알고리즘 사용 

    양방향 암호 알고리즘 - 암호화, 복호화 둘 다 가능

    단방향 암호 알고리즘 - 복호화 불가능 

    mathes(사용자가 입력한 비번, 암호화되어 저장된 비번)

     

    admin 토큰 - 관리자인지 아닌지 검증하는 데 사용 - 실전에서는 사용하지 않음 

    Optional: null 체크를 위한 타입 - .isPresent()로 체크 

     

    Filter

    웹애플리케이션에서 관리되는 영역

    클라이언트로부터 오는 요청과 응답에 대해 최초/최종 단계의 위치이며 이를 통해 요청과 응답의 정보를 변경하거나 부가적인 기능을 추가 

    주로 범용적으로 처리해야하는 작업들,(로깅, 보안) 처리에 활용, 또한 인증 인가와 관련된 로직들을 처리할 수도 있음 

    필터를 사용하면 인증, 인가와 관련된 로직을 비즈니스 로직과 분리하여 관리할 수 있다는 장점이 있음 

    여러개가 체인 형식으로 묶여서 처리되고 있음 

     

    @Order(): 순서 지정  

     

    스프링 시큐리티 프레임워크: 인증, 인가를 위한 기능 제공 

    세션 방식으로 동작 

     

    추가학습 할 것: csrf

     

    Spring security JWT 로그인

    세션 방식 -> JWT 방식 

     

    접근불가 페이지 

    • 일반 사용자는 관리자 페이지에 접속이 인가되지 않아야 함 
    • 스프링 시큐리티의 권한 설정방법
      • UserDetailsImpl을 통해 권한 설정 가능 
      • 권한을 1개 이상 설정 가능 
      • 권한 이름 규칙: "ROLE_"로 시작해야 함
    • 스프링 시큐리티를 이용한 API 별 권한 제어 방법
      • 컨트롤러에 @Secured("권한 이름") 로 권한 설정 가능

     

    데이터 검증하기 

    Bean Validation: 쉽게 데이터 검증 

    @Valid 사용해야 함 

     

    Validation 예외처리 

     

    1주차 숙제

    정규 표현식 참고자료: https://hamait.tistory.com/342

     

    정규표현식 (Regex) 정리

    정규표현식은 아주 가끔 쓰기때문에 항상 다시 볼때마다 헷갈리곤 하기에 주요 사용예를 내가 나중에 다시 봤을 때 편하도록 정리하여 보았다. 정규 표현식의 용어들정규 표현식에서 사용되는

    hamait.tistory.com

    작성한 답안:

    @Pattern(regexp = "^[0-9a-zA-Z]*@[a-z]*.[a-z]*$")

    해설을 본 후 수정한 답안:

    @Pattern(regexp = "^[0-9a-zA-Z_!#$%&'*+/=?`{|}~^.-]+@[a-zA-Z0-9.-]+$")

    '코딩공부 > Spring' 카테고리의 다른 글

    Spring 심화 1주차  (0) 2023.07.11
    Spring 숙련 2주차(작성중)  (0) 2023.06.26
    Spring 입문 2주차  (0) 2023.06.16
    Spring 입문 1주차  (0) 2023.06.12
Designed by Tistory.