페어 활동 기록_Day18_상준_윤우 - boostcampwm-2022/web33-Mildo GitHub Wiki

✂️ 분배된 이슈

  • 네이버 소셜 로그인(#45)
  • 사이드 바 띄우기(#43)

🚩 구현 목표

  • 네이버 소셜 로그인으로 클라이언트에서 로그인 확인
  • 로그인 여부에 따라 로그인 모달창, 사이드바 출력

🍀 세부 목표

네이버 소셜 로그인(#45)

  • OAuth 로그인 API 사용하여 클라이언트에서 로그인 하기
  • 검색 창 레이아웃 구현
  • 마이버튼 레이아웃 구현
  • 마이 버튼 클릭 시 로그인 모달창 띄우기
  • 메인 페이지에서 사용자의 로그인 여부 확인하는 비동기 api 구현

사이드 바 띄우기(#43)

  • 마이정보사이드바 레이아웃 구현
  • 로그인 되어 있을 경우 마이 버튼 클릭 시 로그인 모달이 아닌 사이드바 띄우기

사이드 바 - 사용자 닉네임 UI 출력(#39)

  • 사용자 정보(닉네임, 이름 등) 사이드바에 출력하기

🖥️ 구현 내용

  • 로그인 기능 구현
  • 로그인 여부에 따라 버튼을 누르게 되었을 경우 다르게 보여주는 모달창 구현
  • 검색창, 마이버튼, 사이드바 레이아웃 구현
  • 네이버 지도의 네이버 마크를 모달 뒤에 올 수 있도록 z-index 수정
  • mongoDB 스키마 정의 (유저 id에 대응되는 북마크 리스트, 내일 갈거야 리스트 작성)
{
	"_id": "ObjectId('')",
	"provider": "naver",
	"email": "[email protected]",
	"name": "camper",
	"userId": "1234567890",
	"bookmark": [
		{ "_id": "ObjectId('')", "areaName": "압구정로데오거리" },
		{ "_id": "ObjectId('')", "areaName": "강남역" },
		{ "_id": "ObjectId('')", "areaName": "남산공원" }
	],
	"내일갈거야": [
		{ "_id": "ObjectId('')", "areaName": "압구정로데오거리" },
		{ "_id": "ObjectId('')", "areaName": "강남역" },
		{ "_id": "ObjectId('')", "areaName": "남산공원" }
	]
}

// 순위를 매기는 방법 
{
	"_id": "ObjectId('')",
	"area_id": "ObjectId('')",
	"user_id": "ObjectId('')"
}

📖 학습 내용

  • URL의 이해 부족

    • URL의 이해 → 포트 번호(3000)이후에 ‘/’가 자동적으로 생기는 이유 → https://cotak.tistory.com/45
    • 결론적으로, 프로토콜 → host → port 이후에 path나 query string이 붙는 경우 무조건 ‘/’를 붙여야 한다.
    • protocol과 host(domain)을 나누는 단위는 ‘://’이고, host(domain)과 port를 나누는 단위는 ‘:’, 그리고 port와 path를 나누는 단위는 ‘/’, 마지막으로 path와 query string을 나누는 단위는 ‘?’이다.
  • authType: ‘reprompt’

    naverPassportLogin: passport.authenticate('naver', {
        authType: 'reprompt'
      }),
    
    • 이전에는 anthType란 프로퍼티가 옵션에 없어 사용할 수 없었지만 오늘은 왜인지 생김

    • authType: ‘reprompt’로 설정하게 되면, 로그인을 진행할 때마다 동의 화면이 나타나게 된다. 이 때, 동의를 눌러주면 자동적으로 로그인을 하는 것이 가능해지게 된다.

      스크린샷 2022-11-30 오전 11.48.41.png

🩺 의사결정

논의가 필요한 내용을 서술합니다.

h2 단락으로 나눕니다.

🚧 Trouble Shooting

네이버로 로그인 후 네이버로 다시 로그인 시 deserializeUser가 여러 번 호출하는 이유

  • deserializeUser은 api server로 접근을 할 경우 미들웨어처럼 동작함
    • 모든 api 접근에 호출되고 세션에 저장된 유저 id를 기반으로 request 객체에 user 객체 저장해줌
  • 네이버 로그인 후 이후 로그인 할 경우 deserializeUser가 여러번 동작하는 문제가 발생
  • 하지만 일반적인 경우 로그인 후 로그인을 계속 반복하지 않기 때문에 이 경우에 대해서는 그냥 넘어가도 된다고 판단함

git commit -am이 부분적으로 적용되지 않는 이슈

  • git add . + git commit -m “commit message” = git commit -am “commit message”
  • 이 에러는 한번 조사를 해보아야 할 것 같다. → 그냥 단순한 git 에러인 지, 아니면 명백한 이유가 있는 것인

z-index 이슈

  • z-index를 수동적으로 설정한 대상은 modal, filter였고, 자동화된 부분은 네이버 지도(z-index: 0), 그리고 하단의 네이버 아이콘 (z-index: 100)이었음
  • modal보다 filter의 z-index를 낮게 설정했음에도 불구하고, filter의 z-index가 modal보다 높아져서, modal을 filter가 가리는 현상 발생
  • 원인: modal 컴포넌트 내부에 filter 컴포넌트가 들어있었음 → filter는 modal 컴포넌트에 추가적으로 z-index를 더하게 됨

스크린샷 2022-11-30 오후 8.42.19.png

Modal 컴포넌트에 기본적으로 z-index가 설정되었고, 여기에 ModalFilter의 z-index가 추가적으로 설정되어 있었던 상황임. SideBarLayout(modal)의 경우에는 반대로 아무런 z-index도 걸려있지 않은 상황이었음

❓ 궁금한 점

  • jotai에서 atom을 만들 때, 파일 단위가 지나치게 잘게 쪼개져 있는 것이 아닌가 하는 생각이 들었습니다. 혹시 그 이유가 있는 것인 지, 추상적인 관심사별로 하나로 합칠 수 있는 지 궁금합니다.