[JWT를 활용한 일반 로그인 API 구현] 과정을 기록해보려고 한다. 프로젝트 개발 환경은 아래와 같다.Java: 17JDK: 17.0.6IDE: IntelliJ IDEA 2024.1Framework: Spring Boot 3.3.1 Spring Security의 구조(Filter)와 인증(Authentication) 구조에 대한 설명은 아래 글을 참고하자. [Spring Security] Spring Security의 구조(Filter) 이해하기[JWT를 활용한 로그인, 로그아웃, 회원탈퇴 API 구현 방법]에 대해 설명하기 전, 공식 문서를 보면서 Spring Security의 기본 개념(Filter)에 대해 학습해보려고 한다. API를 구현할 때 사용한 자바, 스프dev-meung.tistory...
haruchi
[JWT를 활용한 일반 로그인 API 구현] 과정을 기록해보려고 한다. 프로젝트 개발 환경은 아래와 같다.Java: 17JDK: 17.0.6IDE: IntelliJ IDEA 2024.1Framework: Spring Boot 3.3.1 JWT에 대한 설명은 아래 글을 참고하자. [팀 프로젝트] 하루치(HARUCHI) - 쿠키(Cookie)와 세션(Session), 토큰(Token) 차이 & JWT(JSON Web Token)JWT를 활용한 인증 및 인가(로그인, 로그아웃, 회원탈퇴) 기능 구현 방법에 대해 작성하기 전, 기본 개념부터 정리해두려고 한다. 사실 완벽하게 이해하고 구현했다기보단 최소한의 필요한 게 뭔dev-meung.tistory.com Spring Security의 구조(Filter)와 인..
JWT를 활용한 인증 및 인가(로그인, 로그아웃, 회원탈퇴) 기능 구현 방법에 대해 작성하기 전, 기본 개념부터 정리해두려고 한다. 사실 완벽하게 이해하고 구현했다기보단 최소한의 필요한 게 뭔지 정도만 알고 구현했던 거라... 다른 프로젝트에서 기능(ADMIN, USER 구분 등)을 추가해야 된다거나 할 때 자신 있게 수정할 수 있을 때까지 이해하는 게 목표다. 🔥 HTTP 기본 개념서버와 클라이언트 사이의 모든 Request와 Response는 HTTP를 기반으로 동작한다. 1. 무상태 프로토콜 - Stateless서버가 클라이언트의 이전 상태를 보존하지 않는다.따라서 클라이언트는 요청 시 서버에 필요한 모든 정보를 제공해야만 응답을 받을 수 있다.서버는 상태를 보존할 필요가 없기 때문에 클라이언트 ..
프로젝트를 진행할 때, API 구현이 끝나면 로컬 환경에서 swagger로 테스트해 보고 git push 한 뒤 PR을 올리기로 했었다. PR이 승인되면 develop 브랜치에 머지하고, 배포(개발) 환경에서 잘 돌아가는지 확인하고 나서야 안심했던 기억이 있다. 로컬 환경에서 테스트할 때나 PR을 올리기 전 매번 application.yml을 수정해야 했는데, 이게 참 간단하면서도 번거로웠다. 아래에 application.yml의 일부를 가져와 봤다. spring.datasource.url(username, password) 부분에서 로컬 환경과 배포(개발) 환경의 값을 다르게 설정해야 정상적으로 테스트할 수 있다.spring: # 로컬 datasource: url: jdbc:mysql://loc..
🐛이슈- 발생한 오류 copy & paste- 오류가 발생한 상황 간략히 설명오늘 하루 예산을 조회하는 API와 오늘부터 말일까지의 날짜별 하루 예산을 조회하는 API에서 오류가 생겼었다.구체적인 오류8월 12일에 배포 서버의 swagger에서 테스트한 결과, 원래대로면 12일부터 31일까지의 하루 예산만 나와야 했지만, 10일과 11일의 하루 예산까지 조회되는 문제가 발생했다.로컬 서버의 swagger 테스트 결과는 정상적으로 나오는 것까지 확인했다.상황CICD 파이프라인이 돌아간 마지막 날짜는 8월 10일이었다. 날짜가 수상하게 들어맞는다는 생각이 들어서, DayBudgetService가 스프링 빈으로 등록될 때 or 배포가 진행될 때 날짜가 고정돼버려서 생긴 문제가 아닐지 의심하게 됐고, 해당 코..
앞에 이메일 인증 요청과 인증 코드 확인까지 완벽하게 성공한 줄 알았는데, 나중에 로그인 기능을 구현할 때 계속해서 인증이 막혔었다. 분명 코드도 잘 짜놨고 제대로 이해했다고 생각했는데 같은 오류가 반복돼서 멘붕이 왔었던 것 같다. 오류 1BadCredentialException: 자격 증명에 실패하였습니다.로그인에 필요한 기능들을 공부하고 API를 구현했다면 좋았겠지만... 구현 기한이 정해져 있기도 했고 공부할 시간이 부족해서 다른 사람들의 코드를 참고하면서 구현했다. 계속되는 오류에 코드를 갈아엎을까 고민했지만 로그인 구현은 문제가 없다고 생각해서 내가 기존에 작성한 코드에서 문제가 생기는 건 아닐지 확인하기로 했다.org.springframework.security.authentication.Ba..
7.18(목) 백엔드 회의에서 API 명세서를 바탕으로 역할 분배를 했다. 어떻게 나눌까 하다가 최대한 동시에 작업할 수 있도록 도메인 별로 5~7개 정도씩 나눴고, 나는 그중에서 회원 도메인을 담당하게 됐다. 크게 보면 회원가입과 로그인, 로그아웃, 회원 정보 조회 API를 구현해야 했다. 소셜 로그인(애플)에서 이메일 인증 방식을 사용한 회원가입으로 바꾸기로 해서 구글과 GitHub에 관련된 내용을 검색해 봤다. 이미 로그인을 구현해 본 제아가 공유해 준 본인의 블로그 글도 참고하면서 진행했다. 개발 환경은 아래와 같다.Java 17Spring Boot 3.3.1GradleIntelliJ(IDE)MySQL(Main DB), Redis(Sub DB) Redis보통 이메일 인증 방식을 사용할 때 인증 코..
UMC 6th 데모데이가 끝난 지도 한참 됐지만 많은 일들이 있었어서... 😅 이제서야 정리해보려고 한다. ERD 설계 (ERDCloud) & Entity 설계 (Spring Boot)PM님께서 작성하신 서비스 정책서, IA와 디자이너님의 WF을 바탕으로 ERDCloud에서 ERD를 설계했다. 1. 서비스 정책서기능 명세서라고도 부르며, 아래 사진처럼 프론트엔드와 백엔드가 개발을 진행할 때 필요한 정보들을 나열해 둔 것이다. 기능을 크게 분류해 두고 세부적인 기능들의 정의와 제약 조건, 기능들끼리의 연결(상호작용) 등의 정보를 작성해둬야 번거롭게 소통하지 않아도 개발을 효율적으로 진행할 수 있다. 2. WF(Wire Frame)기능 구조도를 시각화해 서비스를 대략적으로 표현한 디자인의 프로토타입으로, ..
하루치는 6월 23일에 진행한 UMC GAOT 지부 프리 미팅데이에서 PM님의 발표를 듣고 꼭 써보고 싶다고 생각한 서비스 중 하나였다. 1순위로 신청했는데 붙게 돼서 너무 다행이었다!알고 보니 백엔드 4명 모두가 하루치를 1순위로 선택했다고 한다. ㅋㅋㅋㅋㅋ 1순위에 붙은 만큼 책임감을 갖고 더 열심히 하지 않을까 싶다. 😊 자기소개회의는 19시 10분쯤 강남역에 있는 오픈 스페이스에서 진행됐다!아이스 브레이킹도 할 겸 PM님이 가져온 문답 종이에 답을 적고 한 명씩 말하고 싶은 것만 발표하는 시간을 가졌다. 싫어하는 것, 인생 영화/음악, MBTI, 키우는 동물 등... 간단한 질문들로 구성돼 있었는데 답을 쓰는데 되게 오래 걸렸다. 🫠'프로젝트를 통해 얻고 싶은 것'이라는 질문에 앱 런칭까지 해..