장바구니 미션 전체 피드백 강의 정리

디우·2022년 6월 26일
0
post-custom-banner

우아한테크코스 레벨2 기간에 학습한 지하철 경로 조회 미션 전체 피드백 강의 내용을 정리한다.


HTTP 인증

인증 절차가 이루어지고 나면 사용자는 이후 요청에서 HTTP 인증 헤더를 포함하여 요청을 보내게 된다.

authroization: Bearer eyxxxx......

그런데 왜 토큰과 같은 인증 정보를 Header에 넣을까? 라는 의문이 들 수 있다. 그냥 POST 요청처럼 HTTP body에 넣으면 안되나? 하고 말이다.

하지만 이는 HTTP 인증에 대한 약속이라고 할 수 있다. 즉, 인증을 거칠 때에는 authroization 헤더를 사용하자라는 약속이라고 이해하면 좋다.

일반적인 HTTP 인증 프레임워크는 다음과 같다.
사용자가 요청을 보내고, 서버는 응답으로 인증 결과를 돌려주며 이후 요청에서는 사용자가 Authroization 헤더에 해당 인증 정보를 포함하여 요청을 보낸다.

출처 : HTTP 인증

HTTP 인증 형식

  • HTTP 인증 형식 : Authorization : <type> <credentails>

  • type
    Type에는 Basic, Bearer 등이 있고, 이러한 HTTP 인증 스킴은 다양하다.

    • Basic : base64를 이용하여 인코딩된 사용자 ID/비밀번호 쌍의 인증 정보를 전달, 안전을 위해서 HTTPS(TLS) 연결 위에서 발생되어야 한다.
    • Bearer : bearer token이라는 보안 토큰을 활용하는 인증 스킴이다. Oauth2.0에서 사용하기 위해서 만들어졌다.

JWT

JWT란 JSON Web Token 의 약자로 웹표준(RFC 7519) 이다.

JWT의 포맷은 Header, Payload, Signature 로 구성되는데 자체적으로 증명되었음을 보장하는 Signature를 포함한다는 것이 특징이다.
JWT는 단순 문자열의 나열처럼 보이는데, .을 구분자로 해서 위 3가지 내용을 포함한다.
aaaaa.bbbbb.ccccc 와 같은 형태가 되는 것이다.

JWT 헤더

JWT 헤더에는 두가지 정보를 포함한다.
typ 는 토큰의 타입을 지정한다. (JWT), alg 는 해싱 알고리즘을 지정하며 보통 HMAC SHA256 혹은 RSA 가 사용된다.

JWT Payload에는 토큰에 담을 정보가 들어간다. 여기서 정보의 한 조각을 클레임(claim)이라고 부르며 name & value 쌍으로 이루어진다.

마지막으로 서명(signature)는 헤더의 인코딩값과 정보의 인코딩값을 합친 후 주어진 비밀키로 해쉬를 하여 생성한다.

참고자료: JSON Web Token 소개 및 구조

그렇다면 Payload에는 어떤 값을 넣어야 할까?

  • 탈취되어도 크게 지장이 없는 내용들, 사용자를 식별할 수 있는 최소한의 정보들
  • 그렇지만 좀 더 다양한 정보들을 넣어줄 수도 있다. (ex. kakao tv)

Spring MVC Config

Spring MVC 동작원리

출처 : Spring MVC의 동작 원리/구성요소

Dispatcher Servlet의 위치

출처 : [Spring] HandlerInterceptor와 이를 활용한 로그인 처리

Interceptor는 Handlerx의 앞단에 위치한다. 즉 어떤 요청이 핸들러에 매핑되기 이전에 요청을 가로채서 수행한다고 볼 수 있다.


스펙 vs 현실

https://github.com/woowacourse/jwp-shopping-cart/pull/22

이번 미션을 진행하면서 스펙과 현실의 차이에 대해서 고민을 하는 크루들이 본인을 포함해서 많았다.
"비밀번호 업데이트 시 어떤 HTTP 메소드를 사용해야 할까? PUT? PATCH?"
"POST 메소드 요청의 응답에 location을 내려주는데 항상 동일한 값을 줘도 괜찮나?"
"DELETE 메소드로 요청 시 body 값을 사용해도 될까?"

와 같이 스펙상 DELETE method에서 body를 포함하지 않는 것을 권장하지만 필요에 따라서 사용해야 하는 경우들이 존재하였다.

이러한 부분에 대해서는 정답이 없고, 스펙을 무조건 100% 지키지 않아도 된다고 이야기한다. 이는 나 혹은 내가 속한 팀에서 어떤 기준을 세우고 그것에 따라 구현을 진행하면 된다고 이야기한다.

profile
꾸준함에서 의미를 찾자!
post-custom-banner

0개의 댓글