전체 글192 90일차: Pre-Project Day 10-1 (인증 에러 처리: AuthenticationFailureHandler, AuthenticationEntryPoint) 로그인, 로그인 상태 검증 등 인증과 관련된 내용을 정리하다보니 인증에 실패했을때 리턴 형태에 대해 고민하게 되었다. 지금은 기본 지정된 상태로 값이 리턴되고 있다. 이걸 에러코드 / 메세지로 깔끔하게 보내는건 어떨까? 하는 생각이 들었다. 인증과 관련해서 발생할 수 있는 에러는 크게 두가지로 나뉜다. 먼저 로그인(Authentication)과정에서 실패하는 경우 -> AuthenticationFailureHandler를 통해 원하는 작업을 지정할 수 있다. 그 외 인증 과정에서 만료된 토큰이나 조작된 토큰 등 유효하지 않은 인증 정보를 사용하는 경우 -> 발생한 에러를 AuthenticationEntryPoint에서 잡아서 처리할 수 있다. 먼저 로그인에 실패했을때 에러 코드 / 메세지를 출력할 수 있.. 2023. 6. 22. 89일차: Pre-Project Day 9 (HandlerInterceptor, JWT 정보 가져오기) 이제 회원가입/로그인/로그아웃 관련 기능들을 어느정도 마무리하고 무엇을 해야할까 고민하던중 "코드가 merge되지 않은 상태인데 다른 팀원분들은 질문/답변 등록할때 memberId 같은 정보를 어디서 받아올 수 있을까?"라는 의문이 생겼다. 질문/답변 조회의 경우 별도의 사용자 인증이 필요 없는 상태이지만 등록이나 수정할때는 인증된 사용자만 가능하다. 그렇다면 클라이언트가 질문이나 답변을 POST, PATCH 할 때 내용 뿐만 아니라 memberId와 같은 정보도 계속 보내야하는가? 하는 생각이 들었다. 현재 JWT를 통해 인증 여부를 확인하고 있으므로 JWT에서 회원 정보 관련 내용을 추출할 수 있다면 클라이언트측에서 추가로 회원 정보를 보낼 필요가 없다. 그렇다면 JWT에서 어떻게 회원 정보를 가져올.. 2023. 6. 21. 88일차: Pre-Project Day 8-2 (JWT 로그아웃, Redis) 이번 프로젝트를 진행하면서 가장 복잡했던 부분이다. 부트캠프 과정에서 배우지 않았던 내용이라 검색을 통해 여러 자료를 참고했다. 아직 학습 중인 단계라서 정확하지 않은 부분이 있을 수 있다. (혹시 잘못된 부분이나 더 나은 방법이 있다면 편하게 말씀 부탁드립니다.^^) 우선 JWT는 세션방식과 달리 서버 측에 해당 정보가 저장되지 않는다. 따라서 서버에서 임의로 JWT를 삭제할 수는 없다. 그렇다면 어떻게 로그아웃을 구현할 수 있을까? -> 해당 토큰이 유효하지 않은 토큰이 되면 된다. 현재 리프레시 토큰을 사용해 액세스 토큰을 다시 발급받는 과정은 구현하지 않은 상태이다. 따라서 액세스 토큰을 무효화 하는것만 우선적으로 구현했다. (리프레시 토큰을 사용할 경우 해당 토큰도 무효화해야 한다.) 그렇다면 .. 2023. 6. 20. 88일차: Pre-Project Day 8-1 (JWT 검증) 오늘은 크게 두가지 작업을 진행했다. 내용이 길어서 두개 포스팅으로 나누어서 작성한다. 먼저 로그인 완료한 사용자가 발급받은 JWT를 헤더에 넣어 요청을 보내면 적절한 JWT인지 검증하는 로직을 구현했다. JWT를 검증하는 전용 Security Filter 를 구현해서 Filter Chain에 적용하는 방식으로 진행하였다. 이번에도 나중에 팀원들과 얘기할것을 대비해서 주석으로 관련 내용을 기입해두었다. 프로젝트 기간이 짧다보니 PR 검토하는 시간이 부족하고, 각자 코드 작성하기에도 바빠서 설명이 필요해보이는 부분은 적어두었다. [JWT 검증] 1. JwtVerificationFilter: 실질적으로 JWT를 검증하는 역할을 한다. doFilterInternal() 메서드를 override하여 필요한 로직.. 2023. 6. 20. 87일차: Pre-Project Day 7(JWT 로그인 기능 구현) 오늘은 로그인 기능과 관련된 내용을 작성하였다. JWT 관련 내용도 포함되어있어서 복습해야하는 내용이 꽤 많았는데 코드를 작성하면서 헷갈렸던 부분이 좀 더 명확해진 느낌이다. 먼저 JWT에 대해 다시 한번 정리를 해보면 JWT란 JSON Web Token의 약자로 JSON 포맷의 토큰 정보를 인코딩하고, 인코딩된 토큰 정보를 Secret Key로 서명한 것을 Web Token으로 사용하는 것을 말한다. (흐름을 "정보 -> 인코딩 -> 서명"으로 이해할 수 있다.) Access Token과 Refresh Token으로 구분되는데 Access Token은 실제로 권한을 얻는데 사용하는 토큰이며 Refresh Token은 Access Token의 유효기간이 만료됐을 때 새로운 Access Token을 발급받.. 2023. 6. 19. 86일차: Pre-Project Day 6 (회원가입 기능 구현, 암호화) Spring Initializr를 통해 JPA, Security, Web, Lombok, H2를 셋팅해두었다. 초기 셋팅을 마무리하고 각자 branch를 구분해서 맡은 부분을 작성하기 시작했다. 내가 맡은 부분은 회원정보와 관련된 것으로, 회원 가입 / 로그인 / 로그아웃을 구현하기로 했다. 회원가입 -> 로그인 -> 로그아웃 순서대로 진행 하기로 하고 구조를 잡아보았다. 우선은 H2를 사용하기로 해서 application.yml 파일에 관련 내용(콘솔사용, 테이블 생성 등)을 설정해두고 작업을 시작했다. [회원가입 기능 구현] 1. MemberController: 클라이언트 HTTP 요청을 받는 부분이다. POST 메서드를 받는다. 회원가입이므로 엔드포인트는 /singup으로 설정하였다. DTO 객체를.. 2023. 6. 16. 이전 1 ··· 11 12 13 14 15 16 17 ··· 32 다음