본문 바로가기
스터디일지/PROJECT

[Java Spring] 숙련 1 주차 강의 - PART 1

by 똥쟁이핑크 2023. 8. 31.

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

@Component를 사용하면 해당 클래스를 자동으로 등록을 해줬다. 프로젝트가 커지면 커질수록 Bean이 많아져서 저렇게 자동으로 등록하는 것이 좋다고 배웠다.

  • 기술적인 문제 혹은 공통적인 관심사를 처리할 때는 수동으로 등록하는 것이 좋다고 한다.
    • 공통 로그처리처럼 부가적이고 공통적인 기능들을 기술지원 Bean이라 부르고 수동등록 한다.
    • 수동등록한 Bean 은 문제가 발생하면 그 위치를 파악하기 쉽다는 장점이 있다.

 

인증과 인가

  • 인증 - 해당 유저가 실제 그 유저가 맞는지 확인(인증) 하는 개념이다.
  • 인가 - 접근의 범위를 허가하는 것이다.

https://images.velog.io/images/kingth/post/4de3d293-962f-4d27-957a-6f9e66b8e3fd/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-09-06%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%209.59.33.png

 

  • 쿠키-세션 방식의 인증
    • '특정 유저가 로그인 되었다 '는 상태를 저장한다.
    • 정보를 다 가지고 있는 것이 아닌 일부분의 정보만 서버가 가지고 인증과 관련된 최소한의 정보는 저장해서 로그인을 유지시키는 개념이다.
    • 위의 그림에서 3번이 일치해서 인증을 통과하면 4번이 되고 클라이언트는 Session-id를 쿠키라는 저장소에 보관하고 요청을 할 때마다 Session-id를 같이 보내게 된다.

 

https://velog.velcdn.com/images%2Fkingth%2Fpost%2F10d2beae-96a9-478d-bfd9-258d06941946%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-09-06%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2011.31.33.png

  • JWT 기반 인증
    • JWT는 JSON Web Token으로 인증에 필요한 정보들을 암호화시킨 토큰을 의미한다.
    • JWT 토큰을 HTTP 헤더에 실어 보내서 서버가 클라이언트를 식별할 수 있도록 한다.
    • 로그인 할 때 유저 정보가 일치하면 인증이 통과된 것으로 보고 유저 정보를 JWT로 암호화해서 보내고 서버는 JWT토큰을 준다.
    • 클라이언트는 토큰을 저장소에 보관하고 요청마다 토큰을 같이 보내면 서버에서 토큰을 검증하고 로그인한 유저에 따른 응답을 준다.

 

쿠키와 세션이란 무엇일까?

쿠키와 세션 모두 HTTP에 상태정보를 유지하기 위해 사용된다.

2가지를 통해 클라이언트 별로 인증 및 인사를 할 수 있게 된다.

  • 쿠키
    • 클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일이다.
  • 세션
    • 서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용한다.
    • 서버에서 클라이언트 별로 세션 ID를 부여하고 클라이언트별 필요한 정보를 서버에 저장한다.
    • 생성된 세션 ID는 쿠키값으로 저장되어 클라이언트 식별에 사용된다.

 

JWT란?

  • JSON 포맷을 이용해서 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token이다. 쉽게 말해서 Token의 한 종류다.
  • JWT는 로그인 정보를 Server에 저장하지 않고 클라이언트에 로그인 정보를 JWT로 암호화해서 저장한다.
  • 모든 서버에 동일한 Secret Key를 소유한다.
  • 장점은 동시 접속자가 많을 때 서버의 부하를 낮춘다.
  • 단점은 1) 구현의 복잡도가 증가하고, 2) JWT에 담는 내용이 커지면 네트워크 비용이 증가 된다. 3) Secret Key 유출되면 JWT 조작이 가능하다. 4) 생성된 JWT를 일부만 만료시킬 방법이 없다.