- 제출된 기획서 살펴봐 주시고, 개발 시작하면서 나오는 질의응답
- 백엔드 뿐만 아니라 프론트엔드 교육생들과의 소통과 협업 방법 (의견 제시나 조율할 때의 팁)
- (멘토님) 백엔드와의 협업에 있어서 어려운 점은 없는지?
- 사이드 프로젝트의 핵심 = 기능 축소
- 일방적으로 API를 변경하고 통보하는 방식은 지양해야 함
→ 큰 어려움은 없습니다….! ERD와 swagger로 된 명세서 전달받았습니당
→ 상의해서 수정하는 게 가장 좋다
→ 프론트에서 어떤 부분을 수정해야 하는지 파악하기 쉽다
- NextJS에서 next-auth 라이브러리를 사용하면 로그인 기능을 쉽게 구현할 수 있다!
- 클라이언트 ↔ 프론트엔드 서버 ↔ 백엔드 서버
- 백엔드에서 받아온 토큰을 기반으로 유저 정보를 받아오는 작업 가능
→ 지금 당장 넥스트를 쓰지 않더라도 미리 알아두면 좋을 것 같아용
- useInput과 useForm의 성격이 약간 다른데, useForm을 쓰지 않는 경우에는 useInput을 사용하면 됨
- (민재) JWT 토큰을 어디에 넣을지?
→ 클라이언트 서버가 없다면 로컬스토리지나 쿠키를 이용해서 저장해야 함
- (민재) 회원가입/로그인에서 꼭 체크해야 할 validation이 있다면 어떤 게 있을까요?
- 필수와 선택 항목 구분
- 유효한 이메일 주소
- 비밀번호 정책
- 아이디 최대 몇 자까지 허용하는지(maxLength 설정)
→ 백엔드에서도 똑같이 구현해야 함
- 기획서 및 기능 명세서 재검토
- 현재 기능이 많은 것 같아서 처음부터 줄여도 좋을 것 같다. 필수로 구현할 기능을 정해놓는 게 좋다.
- 개인정보를 얼마나 노출시킬지 범위를 고민하면 좋을 것 같다.
→ 데모데이까지는 생성과 조회만 구현하고, 수정과 삭제는 이후에 구현 예정
- Grid로 한 화면에 column 12개 or 24개로 나눌 수 있음. column을 적극적으로 활용해야 CSS면에서 이슈가 발생하지 않을 확률이 높음
- (천욱) UI 라이브러리 쓰는게 편하긴한데 프론트엔드 개발자로서 직접 구현해봐야하지않나.. 싶기도 한데 어떻게 생각하시나요??
- 직접 만들더라도 완성도를 기대할만한가..? 라이브러리를 활용해서 잘 만들면 될 것 같다.
- 물론 현업에서는 안 쓰고 직접 만들 확률이 매우매우 높다. 라이브러리를 사용하면서 발생하는 문제를 해결하는 것보다 차라리 직접 만드는 게 낫다. 원하는 기능이 없는 경우도 있기 때문에..
- (지영) 이미지를 어떻게 처리하면 좋을지 궁금합니다 프론트에서 S3에 저장할지 아니면 백엔드에서 저장할지?
- 보통은 백엔드에서 다 처리해준다. 외부 요청을 프론트에서 보내는 건 적합하지 않다.
- 이미지 이름을 바꾸거나 해상도를 변환해서 저장하는 경우 원본 이미지와 변환된 이미지를 둘 다 저장하되, 일반적으로 변환된 이미지를 보내주고 특별한 경우에만 원본 이미지를 보내주는 방식으로도 가능함
- 이미지 처리 예시
(로딩 시 이미지 블러 처리) - 스켈레톤으로도 대체 가능
Next 코드
import { getImageUrl } from '@/utils/getImageUrl'; import { BLUR_DATA_URL } from 'config'; import BaseImage from 'next/image'; import type { ImageProps } from 'next/image'; import { getPlaiceholder } from 'plaiceholder'; import React from 'react'; interface ServerProps { blurDataURL?: string; src: ImageProps['src']; } /** * ANCHOR - 이미지 url을 입력받아서 blur 처리된 이미지(base64)와 기본 이미지를 리턴한다. * @param props ImageProps * @returns blurDataURL, src */ async function getData(props: ImageProps): Promise<{ props: ServerProps; }> { const imgUrl = getImageUrl(props.src); const { base64, img } = await getPlaiceholder(imgUrl); return { props: { ...img, blurDataURL: base64 ?? BLUR_DATA_URL, }, }; } const DefaultImage = async (imageProps: ImageProps) => { const { props: fetchImage } = await getData(imageProps); return ( <div style={{ position: 'relative', display: 'block', overflow: 'hidden' }}> <BaseImage {...imageProps} {...fetchImage} placeholder="blur" /> </div> ); }; const Image = (imageProps: ImageProps) => ( // @ts-ignore <DefaultImage {...imageProps} /> ); export default Image;
샤크라에서도 Image 컴포넌트의 fallbackSrc과 fallbackStrategy를 활용하면 비슷하게 구현할 수 있을 것 같아용
- 글로벌까지 지원하기 원한다면 네이버, 카카오맵 대신 구글맵을 반드시 사용해야 함!
- 나중에 Next로 마이그레이션할 때 멘토님이 소개해주신 레포 참고하기(+베타 문서 참고)