본문 바로가기

부트캠프 개발일기/Pre-Project17

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.
85일차: Pre-Project Day 5 (이슈 설정, 역할 분담) 어제까지 정리했던 사용자 요구사항 정의서 내용을 바탕으로 프론트엔드 / 백엔드로 구분해서 이슈를 설정하고 칸반보드를 작성했다. 우선순위(중요도)에 따라서 이슈를 구분하고나니 무엇부터 해야할지, 어떻게 진행해야할지 어느정도 흐름은 보이는것같다. 백엔드 업무분장을 할 때 [API / 보안 및 인증 / 서버 및 배포] 이렇게 기능별로 나누는 것이 좋을지, 아니면 비즈니스 로직들을 도메인에 따라 [회원 / 질문 / 답변] 으로 나누는게 좋을지 이야기를 했다. 실제 업무였다면 첫번째 방법으로 진행하는것이 전문성을 갖추기에는 좋을것같다는 생각이 들었으나 학습하는 입장에서는 작은 단위로 쪼개 여러가지를 경험하는것이 좋을것같다고 의견이 모아졌다. 그리고 어려운 부분이나 겹치는 부분에 대해서는 같이 얘기하면서 구현해보기.. 2023. 6. 15.
84일차: Pre-Project Day 4 (사용자 요구사항 정의서, ERD) 팀원들과 회의를 시작하기에 앞서 클론 과제인 스택오버플로우 사이트를 찾아보고 어떤 기능들이 있는지, 내가 구현할 수 있는 기능은 어떤 것들이 있을지 생각해 보았다. 먼저 요구사항을 큰 기능 단위로 나누고 세부적인 기능들로 구분하였다. 프론트엔드 부분은 어떤 기능이 구현 가능한지, 어떤 식으로 구분하는 것이 좋은지 판단할 수 없어서 해당 부분은 제외했다. 회의를 통해 서로 할 수 있는 부분, 하고 싶은 부분에 대해 얘기해서 매칭되는 부분을 위주로 진행해야 할 것 같다. 요구사항ID 요구사항명 세부기능ID 세부기능명 상세설명 우선순위 비고 PP-01 멤버십 PP-01-M-01 회원가입 아이디와 비밀번호를 입력받아 회원가입 요청 처리 1 아이디 / 비밀번호 유효성 검증 PP-01 멤버십 PP-.. 2023. 6. 14.