본문 바로가기

부트캠프 개발일기123

108일차: Main-Project Day 15 (주문 정보 조회, FetchType, LazyInitializationException) 마이페이지 주문 내역은 조회만 하면 되는 부분이라 비교적 간단할거라고 생각했는데 어김없이 에러를 만났다. 현재 우리팀의 ERD 구조는 다음과 같다. Member-Order는 1:N 관계로 구성되어있다. Order-Product는 N:N 관계로 중간 테이블인 order_product 테이블이 연결해주고있다. 이렇게 테이블간의 연관관계가 있을 경우 특정 데이터를 조회할때마다 연관관계가 있는 다른 테이블까지 같이 조회하게되면 불필요한 과정을 거치고 효율이 떨어질 수 있다. ex. 회원 정보에서 닉네임만 조회하면 되는데 Orders, Cart까지 모두 조회하는 경우 이때 적용 가능한 것이 FetchType이다. 크게 두가지로 구분된다. 1. FetchType.EAGER 즉시 로딩을 의미한다. 연관된 엔티티를 즉.. 2023. 7. 18.
107일차: Main-Project Day 14 (마이페이지 API 설계) 프론트엔드쪽 코드도 어느정도 마무리가 되어가서 드디어 마이페이지 작업에 들어갔다. 마이페이지 구조는 아래와 같이 상단(회원 정보 조회, 회원 정보 수정 기능)과 하단(주문 내역 조회 기능)으로 나눌 수 있다. 상단에서 필요한 기능은 회원 정보를 표시하고, 정보를 수정하면 변경된 정보를 띄워주는 기능이다. 하단에서 필요한 기능은 해당 사용자의 주문 내역을 띄워주고 각 주문 내역을 누르면 세부 내용이 표시된다. 처음 프론트 담당자분이랑 데이터 형태를 정할때 한 페이지니까 아래와 같이 한번에 데이터를 보내는 방향으로 정했었는데 { “memberId”: 3, “memberName”: “닉네임”, orderInfos: [ { “orderId” : 1, “createdAt” : 2023-07-16 08:16:57,.. 2023. 7. 17.
106일차: Main-Projcet Day 13 (로그아웃 에러처리) 이제 백엔드쪽 로직은 AWS 서버에 배포해놓은 상태이다. 프론트 담당자분들이 각자 맡은 부분을 구현하면서 백엔드 서버와 통신했을때 응답이 제대로 오는지, 응답을 가지고 프론트쪽 처리가 제대로 되는지 확인하면서 작업하고있다. 통신을 하다보니 코드에서 몇가지 오류가 발생해서 수정 작업을 진행했다. 로그아웃시 리프레시토큰 검증 로직 제외 로그인 검증에 성공하면 리프레시토큰을 발급해서 Redis에 키-값(memberId - 리프레시토큰) 형태로 저장하고 있었다. 로그아웃을 요청(쿠키에 리프레시토큰 첨부)하면 해당 리프레시 토큰 값을 무효화 시키는방법으로 로그아웃을 구현했었다. "Key" : "Value" || "memberId" : "리프레시토큰값" --(로그아웃요청)---> "memberId" : "logou.. 2023. 7. 14.
105일차: Main-Project Day 12 (권한 설정, 코드 리팩토링) 이제 기능이 어느정도 완료되어서 코드 리팩토링을 시작했다. 다른 팀원분들과 구현 방식이 다른 부분이 있어 해당 부분을 통일시켰다. 또한 권한 관련 로직을 추가했다. 처음 프로젝트를 기획할때에는 고객, 사업자로 구분해서 가입을 받으려고 했으나 일정을 고려해서 해당 기능은 제외했었다. 그런데 생각보다 백엔드쪽 로직이 빨리 구현되어서 추가로 어떤걸 할 수 있을까 고민하다가 예전에 얘기 나왔던 채팅 기능을 추가해봐도 좋을것같다는 얘기가 나왔다. 아직 프론트쪽 작업이 완료되지 않아서 실제로 적용될 수 있을지는 모르겠지만 임의로 사업자 회원을 하나 만들어두고 사업자 - 다른 회원간의 채팅을 구현해보는걸 얘기해보고 있다. 그런데 만약 그 기능이 들어가려면 회원의 권한을 구분해주어야하는데 현재까지 구현된 코드에는 그 .. 2023. 7. 13.
104일차: Main-Project Day 11 (OAuth2.0 회원가입+로그인 로직 구현) 드디어..! OAuth2.0 회원가입/로그인 로직까지 최종 마무리 했다. 지난번 백엔드 서버에서 사용자에게 구글 로그인 URI를 제공하던것에서 프론트 서버에서 로그인 URI를 제공하는것으로 변경했다. (혹시 백엔드 서버에서 URI를 제공하는것으로 유지하려면, 전체 비즈니스로직 처리 결과가 프론트 서버로 전송되는 과정을 추가하면 될것같기는 하다.) 결국, 프론트 서버에서 Authorization code를 구글에서 받아서 백엔드 서버로 전달해주면 백엔드 서버에서는 해당 code를 활용해서 회원 정보를 가져오는 로직을 구현하면 된다. Authorization Code를 가지고 구글에서 AccessToken을 받아오기 위해서는 리디렉션 URI, client id, client secret이 필요하다. cli.. 2023. 7. 12.
103일차: Main-Project Day 10 (프론트엔드 쿠키 저장 안됨 해결!) 엄청엄청 중요했던 날이다. 회원가입-로그인-인증된회원활동-리프레시재발급-로그아웃 전체 로직이 작성되어있었음에도 프론트서버에서 백엔드서버로 쿠키가 넘어오지 않아서 리프레시 재발급-로그아웃 부분을 테스트 못하고 있었다. 정말 이런저런 내용들을 다 찾아보고 설정도 계속 바꿔보면서 테스트를 했는데도 동작이 되지 않았었다. (그래도 덕분에 쿠키 정책, 설정방법, 도메인, CORS 등 굉장히 많이 배웠다!👍🏻) 이때까지 시도했던 방법은 아래와 같다. 참고: 2023.07.05 - [부트캠프 개발일기/Main-Project] - 99일차 - Main-Project Day 6 (Refresh Token, Cookie, 인증 에러 처리) 1. 쿠키에 httpOnly, Secure, SameSite=None 옵션을 설정했.. 2023. 7. 11.