[넘블] 2주차 개발일지

savannah030·2022년 4월 18일
0

넘블

목록 보기
2/4

의식의 흐름으로 작성한 글입니다. 😅😅

4/18(월)

JPA 양방향 연관관계 테스트

어제 엔티티 설계는 했지만, JPA 양방향 매핑같은 더 섬세한(?) 작업은 아직 하지 못했다.
양방향 매핑 관련 코드를 짜고 테스트를 하려고 했는데 자꾸 에러가 나는 중이다. -> 다음날 해결완료
관련 포스팅

소셜 로그인 구현 구상

세션 기반으로는 구현해본 적 있지만, 이번에는 리액트랑 협업하기 때문에 JWT로 구현해보려 한다.
근데 위의 엔티티 관련 문제가 매끄럽게 해결되지 못해서 아직 시작 못했다.. 내일 오전까지만 더 고민해보고 로그인 구현 시작해야지

좋아요 구상

사람1가 좋아요를 누르면 Likes 테이블에 likeUser(사람 1) 객체와 likeVideo(해당 영상) 객체를 저장
사람2가 좋아요를 누르면 Likes 테이블에 likeUser(사람 2) 객체와 likeVideo(해당 영상) 객체를 저장
...
이런 식으로 사람들이 누른 모든 좋아요 정보를 저장했다가

예를 들어 사람A가 사람B와 매칭을 원한다고 하면

  1. User 엔티티의 List<Video> myVideos (사람A가 올린 영상들)을 for문으로 돌면서
  2. Likes 테이블에서 likeVideo가 myVideo와 일치하는 경우를 찾는다.
  3. 그 중 사람B가 있으면 매칭한다.

고민할 것

  1. 에서의 성능 문제

4/19(화)

git flow 헤맴

소셜 로그인 구현하기 미션이 새로 생겨서 feature/entity 브랜치는 잠시 냅두고 feature/login를 git flow로 만들려고 했는데 자꾸 오류가 났다. 그래서 그냥 origin/feature/login을 만들고 로컬로 끌고 와서 작업했다.

세션 기반 로그인 구현 중단

세션 기반 로그인은 구현해본적이 있어서 이번에도 이 방법 쓰려고 했는데 이번 프로젝트는 리액트와의 협업 프로젝트다 보니 세션을 쓰기에는 무리가 있는 것 같다. (그걸 나중에 깨달은..) jwt를 이용해야할 것 같은데 한번도 써본적이 없어서 공부해야겠다. 카카오 로그인 API 문서랑 다른 사람들이 구현한 코드 봤는데 잘 감이 오지 않는다.

JWT 기반 인증방법 공부

웹개발 101 책 잘 읽힘. 이거 참고해서 개발할 예정

4/20(수)

카카오 OAuth2 흐름

내가 구현해야 할 건 Step2부터인데 그래도 Step1 인가코드 받아야 하니까 Step1 구현해봄.
서버 응답 상태코드가 200이라서 데이터는 잘 받아오는 것 같은데 그 중 인가 코드만 뽑는 법 모르겠음.

-> 프론트 팀원분이 SDK로 Step2까지 구현해주셔서 나는 Step3에 더 집중하면 될듯

팀원들과 회의

  • 프론트 분들이랑 회의해서 개발 일정 조율(내일까지 로그인 구현 완료 목표), 프론트 진행 상황 들을 수 있었음
  • Video 엔티티에서 어떻게 Category를 갖고오는지 이해를 못하셨는데 내가 설명을 잘 못했음.. JPA 페치 조인으로 구현하면 되겠지 하고 실제 개발을 해본 적이 아직 없으니까 머리속에서 정리가 안된듯. 역시 남에게 설명 못하는 지식은 내 지식이 아니다 JPQL 빡세게 연습해야지
  • 같은 백엔드 팀원분이랑 회의에서 역할 분담. 나는 OAuth2 로그인 구현하고 팀원분은 메인 페이지 API 설계하시기로.
  • 소통의 중요성. 팀원들이랑 얘기 많이 나누고 진행상황 공유하니까 부담이 훨씬 덜 함
  • 기능 어떻게 구현할지 의논한것도 재밌었다 ㅋㅋ 디자이너 분 짱! 페이지 짱이뻤음><

4/21(목)

AccessToken 으로 사용자 정보 갖고오는법 구상

구현해야 할 것

  • AccessToken으로 사용자 정보 조회
    1) 회원가입 되어있는지
    (가입되어있지 않다면 회원가입 창으로, 가입되어있다면 로그인 완료)
    2) 되어있다면 토큰이 만료됐는지
    3) 사용자 정보 조회
    닉네임,이메일 등 User 테이블에 저장할 정보 갖고 와야함

  • 우리 서비스만의 JWT 만들기

  • 프론트로 쿠키 보내기

삽질

  • 우선, 리액트에서 step2의 accessToken을 받아왔다고 가정하고, 카카오 REST API에서 사용자 정보를 가져오는 것 먼저 구현하기로 했다.
    1. POST 요청을 만들어서 카카오 API에 accessToken을 전달하고, 2. 받아온 사용자 정보를 JSON 객체로 변환하려고 했다.
  • 1.에는 RestTemplate을 사용하고 2.에는 ObjectMapper를 사용하였다.
  • 그러다가 데이터를 받아오지 않고 코드만 구현하는 것은 아니라고 판단해서 리액트를 로컬에서 돌려서 백엔드로 accessToken 로그를 찍는 것까지만 구현해보기로 했다.
  • 로그에 DispatcherServlet까지는 뜨는데 accessToken 로그는 찍히지 않는다.
  • CORS 설정을 했는데도 이러니까 처음에는 주소 입력을 잘못했나 하고 주소를 계속 바꿔보며 테스트했는데도 실패했다.
  • Postman으로 확인해보니 401에러가 떴다.

    401(권한 없음): 이 요청은 인증이 필요하다. 서버는 로그인이 필요한 페이지에 대해 이 요청을 제공할 수 있다. 상태 코드 이름이 권한 없음(Unauthorized)으로 되어 있지만 실제 뜻은 인증 안됨(Unauthenticated)에 더 가깝다

  • 아무래도 Spring Security가 서블릿 필터 역할을 해서 accessToken 로그가 안찍히는 것 같다.
    -> WebSecurityConfig andMatchers/auth/login/kakao 등록해서 해결!

4/22(금)

AccessToken 으로 사용자 정보 갖고 오기 성공!!

회원가입 API 개발

  • 프론트의 step2에서 데이터 받았다고 가정하고 이 데이터를 User 엔티티에 저장하는 코드 짰다.
  • 짜다가 좀 삼천포로 갔다. (데이터 건드려야 할 일이 있어서 Spring data jpa 쓰다가 JPQL 쿼리문 씀.. 근데 똑똑한 intellij가 도와줌. 포스트 예정

API 문서 작성

4/22(토)

  • 주말엔 눈뜨자마다 코딩만 했다.

삽질(사용자 정보 객체에 넣기)

회원가입 API 다듬기

  • 어제 삼천포로 짰던 API(카카오에서 accessToken을 못받아오니까 내맘대로 짰었다)를 좀 더 다듬어 보았다

4/23(일)

팀원들과 회의

  • 배포 쪽 더 공부해야 할듯..

프론트에 쿠키 보내기

  • 처음에 백엔드 쪽에서 프론트의 헤더에 jwt을 넣은 쿠키를 넣어 보내면, 프론트 측에서는 모든 요청마다 jwt를 보낼 필요가 없다!
  • 나는 이 사실을 몰랐는데, 프론트 팀원분께서 알려주셨음!!
  • 전공수업에서 쿠키의 개념에 대해 잠깐 배운 적은 있었는데, 쿠키가 헤더에 저장된다는 것은 몰랐다...(http 헤더 구조를 상세하게 배우지는 않았던 것 같음) 나의 부족한 점이 더 잘 느껴졌는데 그래도 프로젝트를 통해 구현해봐서 이제 http 메시지 구조 좀 더 잘 기억할 것 같은 느낌?
    포스트 예정
  • 근데 구현에서 또 삽질했다(구글링해서 구현하면 되겠지~했는데ㅋㅋ)
  • 쿠키는 HttpServletReponse에 담고, 실제 프론트에 리턴은 ResponseEntity로 해주었다. (HttpServletReponse을 리턴하면 프론트에서 쿠키 안뜸)
  • 응답 객체가 두 종류니까 또 실패할 줄 알았는데 됨(어찌어찌 성공!!)
  • (프론트, 서버 포트가 달라서 생기는 문젠줄 알고 필터도 써봤는데 필요없었다.)
profile
백견이불여일타

0개의 댓글