Skip to content

[JWT 인증 서버] 유소영 제출합니다.#46

Open
1028ragon wants to merge 1 commit into
1028ragonfrom
1028ragon-spring-security
Open

[JWT 인증 서버] 유소영 제출합니다.#46
1028ragon wants to merge 1 commit into
1028ragonfrom
1028ragon-spring-security

Conversation

@1028ragon

Copy link
Copy Markdown

과제명

JWT 인증 서버

💡 작업 내용

  • Spring Security를 이용한 JWT 인증 기능 구현
  • 회원가입 API 구현
  • 로그인 API 구현 및 JWT 토큰 발급
  • JwtAuthFilter를 이용한 사용자 인증 처리
  • Authorization Header를 통한 JWT 검증
  • 게시글 CRUD 기능과 JWT 인증 기능 연동

🔗 참고 링크

🤔 느낀 점 / 어려웠던 점

  • 기존 CRUD 게시판에 JWT 인증 기능을 추가하면서 Spring Security의 동작 원리를 이해할 수 있었습니다.
  • 아쉬운 점은 JWT 예외 처리가 아직 세밀하지 않고, 게시글과 사용자를 직접 연결하지 못함, 등등을 아직 구현하지 못했습니다.. 시험 끝나고 리펙토링 해보겠습니다.

@1028ragon 1028ragon self-assigned this Jun 12, 2026
@1028ragon 1028ragon linked an issue Jun 12, 2026 that may be closed by this pull request
6 tasks

@Donghwan814 Donghwan814 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

안녕하세요 소영님! 시험은 잘 보셨을까요? 혹시 월요일까지 시험이 있으시다면 남은 시험도 파이팅입니다!

시험 기간이 겹치다 보니 코드 리뷰가 조금 늦어진 점 양해 부탁드립니다 🥲

전체적으로 이전에 JWT에 대해서 코드를 작성해보신 경험이 있기에 기본적으로 코드를 굉장히 잘 구현해주신 것 같습니다!

이번 코드 리뷰는 마지막 과제인 인증/인가와 시큐리티에서 중요하게 다루는 JWT 관련 내용입니다. 보안과 직접적으로 연결되는 부분이다 보니 신경써야 할 코드들이 많았을텐데 깔끔하게 잘 작성해주셨습니다.

다만 더 나아가 JWT의 취약점은 토큰을 탈취당하면 서버 (스프링 시큐리티)는 이를 감지하지 못해 보안 위험이 있습니다. 그렇기에 유효시간을 기준으로 AccessToken, RefreshToken이 존재합니다. 이 부분을 적용해서 보안을 좀 더 강화 시켜본다면 완벽한 코드 구조라고 예상합니다!

추가적으로 DB에 값이 제대로 들어왔는지 테스트 결과 이미지를 업로드 해주신 내용에 사용자 로그인 한 DB 결과는 업로드가 빠져 있는 것 같아서 이 부분도 확인해서 업로드 해주시면 좋을 것 같습니다!

과제 제출하시느라 고생 많으셨습니다!

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기에서 응답값으로 token값만 받고 있는데 여기에서 token은 무슨 토큰을 의미하는 것인지 설명해 주시면 좋을 것 같아요!

@leesj0706

Copy link
Copy Markdown

안녕하세요 소영님! 과제 수행하시느라 고생 많으셨습니다.

이번 리뷰에서는 JWT 토큰의 생성·검증 로직이 안전하게 구현되었는지, 예외 처리는 꼼꼼하게 되었는지를 중심으로 살펴보려고 합니다. 정답을 정해두고 하는 리뷰라기보다는, 더 좋은 코드를 함께 고민하는 자리이니 편하게 이야기 나눴으면 좋겠습니다.

@leesj0706 leesj0706 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

안녕하세요 소영님! 과제 수행하시느라 고생 많으셨습니다.

이번 리뷰에서는 JWT 토큰의 생성·검증 로직이 안전하게 구현되었는지, 예외 처리는 꼼꼼하게 되었는지를 중심으로 살펴보려고 합니다. 정답을 정해두고 하는 리뷰라기보다는, 더 좋은 코드를 함께 고민하는 자리이니 편하게 이야기 나눴으면 좋겠습니다.

Comment on lines +25 to +28
.csrf(csrf -> csrf.disable())
.formLogin(form -> form.disable())
.httpBasic(basic -> basic.disable())
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

csrf, session, formLogin, httpBasic을 비활성화 해두셨는데 비활성화를 사용하시는 이유를 설명해주시면 좋을 것 같습니다!

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

소영님, User 엔티티를 보면 id, username, password같은 기본적인 컬럼들을 깔끔하게 잘 구성해 주셨습니다!

한 가지 논의해보고 싶은 점은, 현재 **Refresh Token(RT)**을 저장하는 구조가 빠져 있다는 점입니다. Access Token은 무상태(Stateless)로 검증되므로 DB 저장 컬럼이 필수가 아니지만, Refresh Token은 토큰 갱신 및 보안 제어를 위해 서버 측 저장소(테이블이나 Redis 등)가 꼭 필요하다고 생각합니다.

만약 Access Token이 만료되었을 때, 프론트엔드가 보낸 Refresh Token이 서버에 저장된 값과 일치하는지 확인하고 검증하는 과정이 있어야 안전하게 Access Token을 재발급해줄 수 있거든요. (서버에 저장해두지 않으면 토큰이 탈취당했을 때 강제 로그아웃 등의 제어가 불가능해지는 문제도 있습니다.)

혹시 정훈님이 이번 로컬 로그인을 구현하시면서 구상하셨던 Access Token과 Refresh Token의 구체적인 관리 전략이나 각각의 역할에 대해 피드백으로 공유해 주시면 감사하겠습니다!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feat] 유소영 12주차 과제 - JWT 인증 서버

3 participants