프로젝트/미니 프로젝트 & 과제

[미니 프로젝트] 게시판 프로젝트 2일차

2023. 5. 24. 22:41
목차
  1. 무엇을 했나
  2. 계획 변경사항
  3. 시행착오
  4. 알게된 것
  5. 해결할 것
  6. 참고 자료

무엇을 했나

테일윈드 익히기

헤더 기본 레이아웃 잡기

OAuth 로그인 구현

로그인/로그아웃 버튼 조건부 렌더링

타입스크립트 강의 듣기

 

메인
게시판..ㅋㅋ 레이아웃 무슨일

 

계획 변경사항

메인 페이지를 글 목록이 바로 나오게 하도록 계획을 세웠는데 글 목록/글 작성/글 수정 페이지에 공통된 레이아웃을 줘야 해서 이 페이지들이 따로 하나의 폴더 안에 있는 것이 좋겠다고 생각했다. 그래서 루트 경로를 따로 만들어서 메인페이지를 간단하게 따로 만들어야 할 것 같다.

 

시행착오

default formatter를 확인하자

아침부터 테일윈드 공부하느라 정신이 혼미했는데 vscode에서 프리티어가 작동을 안 해서 너무 심각하게 화가 났다. 모든 코드가 한줄로 나와버리는.. 근데 그냥 default formatter를 설정 안 한 문제였다ㅠ_ㅠ 최소 30분은 고민했는데.. 아마 타입스크립트를 사용하면서 다시 default formatter를 설정해 줬어야 했나 보다.

 

테일윈드 config 오류

헤더를 만들어 놓았는데 갑자기 테일윈드 스타일이 날아가버려서 당황했다. 파일을 다 밀고 별 난리를 쳤는데 그냥 tailwind.config.js에 헤더가 담겨 있는 폴더가 들어가 있지 않은 문제였다. 해당 파일의 content 배열에 폴더명을 명시해야 테일윈드가 어디에 적용돼야 할지 감지해서 스타일을 적용해줄 수 있다.

 

루트 경로의 하위 라우트에 레이아웃을 주면 컨텐츠가 안 보이는 문제

각 레이아웃에는 children을 받아서 해당 라우트의 page.js내의 내용을 children 안에 받을 수 있도록 해야 한다. 따라서 레이아웃 파일들은 정해진 형식이 있다. 그냥 일반 컴포넌트처럼 정의를 하면 컨텐츠가 보이지 않고 레이아웃만 보이게 된다.

https://nextjs.org/docs/app/building-your-application/routing/pages-and-layouts

 

개발 순서..?

CRUD 기능을 먼저 만들어 놓고 로그인/로그아웃 기능을 개발할지, 로그인/로그아웃을 먼저 구현해 놓고 CRUD로 가야할지 고민이 됐는데, 결론적으로는 로그인/로그아웃을 먼저 만들어야 할 것 같다. 새로 글을 작성할 때 사용자의 정보가 제공돼야 하니까.. OAuth 부분 강의를 먼저 듣고 계속해야겠다.

 

이미지 import 방법

이미지 임포트해올 때 절대경로로 하면 안되고 상대경로로 해야 하는 것 같다(확실하지는 않음..;)

 

OAuth 설정법

oAuth 오류... 최상단 .env 파일에 id, secret, url 세가지 넣어야 하고 리다이렉트 경로는 "http://localhost:3000/api/auth/callback/kakao"이런 식으로 설정.

 

OAuth provider 타입 오류

authOptions의 provider 객체의 값으로 언제나 문자열 타입을 넣어줘야 하는데 process.env.KAKAO_ID라고만 적어넣으니 타입 오류가 났다. 환경변수에 접근했는데 그것을 찾지 못해서 undefined 상태일 수도 있으므로 process.env.KAKAO_ID의 타입은 string | undefined이고, 문자열 타입만 받아야 하는데 string | undefined가 들어왔으므로 오류가 나는 것. 이런 점에서 타입스크립트가 오류를 방지해 줄 수 있는 언어라는 것을 제대로 느낄 수 있었다. 간단한 해결법으로는 non-null assertion operator(non-null 단언 연산자) '!'를 넣어서 오류를 무시해 버리는 수도 있었지만, 별도의 환경변수 접근 함수를 둬서 환경변수가 undefined 상태라면 오류를 throw해주도록 처리했다. 

import NextAuth from "next-auth";
import KakaoProvider from "next-auth/providers/kakao";

function getEnvVar(v: string): string {
  const ret = process.env[v];
  if (ret === undefined) {
    throw new Error("process.env." + v + " is undefined!");
  }
  return ret;
}

export const authOptions = {
  providers: [
    KakaoProvider({
      clientId: getEnvVar("KAKAO_ID"),
      clientSecret: getEnvVar("KAKAO_SECRET"),
    }),
  ],
  secret: "...",
};
export default NextAuth(authOptions);

 

알게된 것

테일윈드 왜 편하다고 하는지 알 것 같다. 아직은 익숙하지 않아서 매번 검색해보고 하느라 시간이 좀 걸리는데 조금만 익숙해지면 css 때문에 받는 스트레스가 많이 줄어들 것 같다!

 

해결할 것

타입스크립트 공부하기.... 사실상 타스 거의 안쓰고 코드 만드는 중..ㅇ<-< 흑흑브흡ㄱ귿

 

참고 자료

환경변수 타입에러 처리

https://stackoverflow.com/questions/67781999/type-string-undefined-is-not-assignable-to-type-string-type-undefined-i

 

'프로젝트 > 미니 프로젝트 & 과제' 카테고리의 다른 글

[미니 프로젝트] 게시판 프로젝트 5일차  (0) 2023.05.27
[미니 프로젝트] 게시판 프로젝트 3일차  (0) 2023.05.25
[미니 프로젝트] 게시판 프로젝트 1일차  (0) 2023.05.24
[미니 프로젝트] COZ Shopping 솔로프로젝트 회고  (4) 2023.05.19
[과제] 피그마 클론  (0) 2023.04.17
  1. 무엇을 했나
  2. 계획 변경사항
  3. 시행착오
  4. 알게된 것
  5. 해결할 것
  6. 참고 자료
'프로젝트/미니 프로젝트 & 과제' 카테고리의 다른 글
  • [미니 프로젝트] 게시판 프로젝트 5일차
  • [미니 프로젝트] 게시판 프로젝트 3일차
  • [미니 프로젝트] 게시판 프로젝트 1일차
  • [미니 프로젝트] COZ Shopping 솔로프로젝트 회고
JeanneLee57
JeanneLee57
공부하고 기록을 남기는 개발자 Jeanne
JeanneLee57
코딩은 진리
JeanneLee57
전체
오늘
어제
  • 분류 전체보기 (117)
    • Javascript (15)
    • React (15)
    • Next.js (8)
      • Next.js 베타 문서 번역 (5)
    • 프로젝트 (34)
      • 미니 프로젝트 & 과제 (25)
      • SEB 44 pre-project (1)
      • SEB 44 main-project (8)
    • 알고리즘 (12)
    • 부트캠프 준비 (6)
    • 기술면접 (3)
    • CS (7)
    • 코드스테이츠 프론트엔드 부트캠프 (12)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 프로그래머스
  • 구조분해할당
  • 코드스테이츠
  • 유데미
  • codestates
  • CSS
  • react
  • useEffect
  • 부트캠프준비
  • JavaScript
  • 프리코드캠프
  • 회고
  • 번역
  • RTK
  • 부트캠프
  • 고차함수
  • Next.js
  • 프론트엔드
  • HTML
  • 알고리즘

최근 댓글

최근 글

hELLO · Designed By 정상우.
JeanneLee57
[미니 프로젝트] 게시판 프로젝트 2일차
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.