[SpringBoot] 스프링부트 로그인 구현- (1) JWT 소개, 프로젝트 생성

최가희·2022년 1월 21일
0

SpringBoot

목록 보기
1/13
post-thumbnail

스프링부트를 이용해서 JWT 인증을 구현하는 튜토리얼을 진행해보겠다.
이 강의를 들으며 정리한 내용이다.

01. JWT(JSON Web Token)

JSON 객체를 사용해서 토큰 자체에 정보를 저장하는 웹 토큰

1. JWT 구성

JWT는 Header, Payload, Signature 3개의 부분으로 구성되어 있다.

  • Header) Signature를 해싱하기 위한 알고리즘 정보
  • Payload) 서버와 클라이언트가 주고 받는, 시스템에서 실제로 사용될 정보에 대한 내용
  • Signature) 토큰의 유효성 검증을 위한 문자열로, 이 문자열을 통해 서버에서 이 토큰이 유효한 토큰인지 검증할 수 있음

2. JWT의 장점

  • 중앙의 인증서버, 데이터 스토어에 대한 의존성 없음, 시스템 수평 확장 유리
  • Base 64 URL Safe Encoding을 이용하기 때문에 URL, Cookie, Header 모두 사용 가능한 범용성

3. JWT의 단점

  • Payload의 정보가 많아지면 네트워크 트래픽이 증가하기 때문에 이를 고려해서 데이터를 설계해야 함
  • 토큰이 서버가 아닌 클라이언트에 저장되어 각 서버에서 클라이언트의 토큰을 직접 조작할 수 없음


02. Spring Initializr에서 프로젝트 생성

프로젝트, 언어, 스프링부트 버전은 아래 사진과 같이 설정해주고, 메타데이터는 본인에게 맞게 적절히 작성한다. 이때, 패키징은 Jar로, Java 버전은 8로 설정한다.

의존성도 아래 사진과 같이 6가지를 추가해준다.

Generate 버튼을 클릭하면 압축 파일이 다운받아지는데, 이를 본인의 작업 디렉토리에 푼 뒤 IDE로 연다. 나는 인텔리제이를 사용할 것이다.



03. 인텔리제이 환경설정 - 롬복 설정

Settings > Build, Execution, Deployment > Compiler > Annotation Processors > Enable annotation processing 체크

build.gradle을 보면 우리가 추가했던 의존성들이 잘 들어와있는 것을 확인할 수 있다.



04. 테스트 API 작성

01. controller 패키지 생성

src > main > java > com.example.tutorial > controller 패키지 생성


02. HelloController 작성

controller > HelloController.java

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class HelloController {
    @GetMapping("/hello")
    public ResponseEntity<String> hello(){
        return ResponseEntity.ok("hello");
    }
}

3. API 테스트 - Application 실행

JwtTutorialApplication의 main() 메소드를 실행하면 된다.

API에 대한 테스트는 포스트맨을 사용할 것이다.
아래 사진과 같이 http://localhost:8080/api/hello로 GET 요청을 보내면 401 Unauthorized 에러가 발생한다. 이를 해결하기 위해서는 시큐리티 설정과 기본적인 데이터 설정을 해야하는데, 다음 포스팅에서 이어서 하겠다.

0개의 댓글