목차
- React와 Next.js 학습 조언과 SEO
- NextAuth JWT 토큰 활용 방법
- React useEffect, useState와 const 변수 이해
- React 18 성능 개선 및 Suspense API
- 엑셀 출력 라이브러리와 동적 UI 구현 조언
- 전역 상태관리 라이브러리 추천: Jotai, Recoil, Just-stand
- React 컴포넌트 단위와 외주 견적 팁
- 구직 경험 공유 및 취업 준비 팁
- 다양한 개발 도구와 기술 질문들
- 인터프리터와 컴파일러 개념 이해
1. React와 Next.js 학습 조언과 SEO 🚀
- 핵심: Next.js는 React 기반의 프레임워크로, SSR(Server-Side Rendering, 서버 사이드 렌더링) 지원을 통해 SEO 및 초기 로딩 속도를 개선.
- React는 CSR(Client-Side Rendering) 방식으로 기본적 SEO에 한계가 있음.
- 처음 React를 공부하고 있다면 Next.js를 바로 배우지 않아도 됨. Next.js는 React를 기반으로 하며, React 지식이 바탕이 되어야 함.
- Next.js 앱 라우터(App Router)는 구조가 달라져 진입 장벽이 있을 수 있지만, 페이지 라우터를 선택해 점진적으로 배워도 무방.
- 핵심 개념 요약:
- CSR (Client-Side Rendering): 브라우저에서 자바스크립트가 실행되어 화면을 렌더링함.
- SSR (Server-Side Rendering): 서버에서 HTML을 만들어 보내 SEO에 유리.
- Next.js는 메타 프레임워크로서 React 앱을 쉽고 효율적으로 SSR 및 SSG(Static Site Generation) 방식으로 제공할 수 있게 해줌.
- 개인 프로젝트에 SEO가 중요하다면 Next.js 학습을 추천.
2. NextAuth JWT 토큰 활용 방법 🔐
- NextAuth는 Next.js에서 쉽게 인증을 지원하는 라이브러리.
- 백엔드에서 JWT 토큰을 받아 인증을 관리할 수 있음.
- NextAuth는 자체적으로 JWT를 생성하며, 백엔드 JWT를 감싸서 관리 가능.
- 흐름 예시:
- Provider에서 유저 정보와 액세스 토큰을 받아옴.
- JWT 콜백에 토큰을 저장하거나 갱신.
- Session 콜백에서 클라이언트에 데이터를 전달.
- 클라이언트 컴포넌트에서 useSession() 훅으로 토큰 사용 가능.
- 백엔드에서 받은 토큰을 직접 NextAuth 세션에 저장하는 방식도 가능하며, 상황에 따라 구조를 조정할 수 있음.
- JWT는 인증의 표준 방식이며, 토큰 관리를 편리하게 하는 것이 목적.
3. React useEffect, useState와 const 변수 이해 🎯
- React에서 const [state, setState] = useState() 처럼 선언하는 이유:
- JS의 const는 변수 재할당 금지지만, 객체나 배열처럼 참조형 데이터의 내부 변경은 가능.
- useState는 상태와 상태를 변경하는 업데이트 함수(불변성을 유지하며 리렌더링 유도)를 배열 형태로 반환.
- React는 상태값 자체가 아닌 상태 변경 함수 호출로 리렌더링이 발생.
- 이 개념은 참조와 불변성 및 클로저(변수의 범위와 유지) 이해와 연관.
- React 훅은 대수 효과(algebraic effects) 개념처럼 컴포넌트 외부에서 작동하는 흐름제어 방식이라 직관적 이해에 시간이 필요.
- const를 써도 값이 변하는 것처럼 보이는 이유는 내부 데이터 변경이지 변수 자체 재할당이 아님.
- 학습 팁: 자바스크립트 클로저와 참조형 데이터의 이해가 중요하며, 직접 useState를 구현해보면 개념 이해에 도움 됨.
4. React 18 성능 개선 및 Suspense API 🌟
- React 18의 주요 개선 포인트는 concurrent rendering(동시 렌더링) 지원.
- Fiber 아키텍처에 기반해 렌더링 작업을 중단 및 재개하며, 사용자 경험을 부드럽게 개선.
- Suspense는 비동기 컴포넌트 렌더링 시 fallback UI(로딩 상태)를 관리하는 API.
- Suspense 바운더리는 컴포넌트 트리 상에서 가장 가까운 상위 컴포넌트가 비동기 상태를 감싸고, 그 안에서 발생하는 비동기 throw를 캐치함.
- Suspense 내에 또 다른 Suspense를 둬서 비동기 범위를 세밀하게 관리 가능.
- SSR과 Suspense는 목적과 처리 방식이 다르지만, React 18에서는 SSR도 스트리밍 방식 지원으로 Suspense와의 호환 개선.
- 주의: Suspense를 제대로 사용하지 않으면 화면이 빈 상태(화이트스크린)가 뜰 수 있음.
- 면접 시에는 React 18의 concurrency와 Suspense의 작동 원리를 이해하는 것이 플러스.
5. 엑셀 출력 라이브러리와 동적 UI 구현 조언 📊
- xlsx 라이브러리는 클라이언트(브라우저)에서 엑셀 파일 생성에 쓰이며 무료.
- 스타일 적용(글자색, 배경 등)을 하고 싶다면 xlsx-js-style 같은 xlsx 포크 라이브러리를 사용.
- 기본 XLSX.utils.table_to_sheet() 함수는 HTML 테이블을 엑셀 시트로 변환 가능하며, table id만 지정하면 테이블 모양 그대로 추출 가능.
- 동적 폼 UI(한 단계 입력 완료 후 다음 입력 표시) 구현:
- 직접 상태(useState)를 활용해 보여줄 컴포넌트를 조건부 렌더링.
- 폼 상태 관리 라이브러리(Fomik, React Hook Form) + 유효성 검사(Yup)를 결합해 간결하고 안정적인 코드 작성 권장.
- 토스의 useFunnel 같은 라이브러리도 참고 가능.
6. 전역 상태관리 라이브러리 추천 🗂️
- Just-stand, Jotai, Recoil이 인기이나 기능상 차이는 크지 않음.
- 개인 취향이나 프로젝트 특성에 맞춰 선택하면 됨.
- Redux Toolkit은 코드를 명확히 쓰고 싶을 때 추천.
- 미묘한 차이가 있지만, 학습 진입 장벽은 Recoil과 Jotai가 낮음.
- 개발자 커뮤니티에서는 Just-stand를 추천하는 의견도 많음.
- 선택 팁: 복잡성, 문서화, 팀 역량 고려.
7. React 컴포넌트 단위와 외주 견적 팁 💼
- 외주 시 컴포넌트 수를 묻는 경우가 있으나, 컴포넌트 갯수 구분이 모호할 수 있음.
- 보통은 페이지 단위 견적이 일반적이며, 컴포넌트는 기능별(사이드바, 헤더 등)로 구분.
- 함수 개수는 코딩 스타일에 따라 달라 의미가 크지 않음.
- 정확한 견적을 내려면 기획서 페이지 수와 주요 기능을 먼저 파악하는 것이 바람직.
- 코드를 너무 쪼개는 것도 관리 난이도 증가 원인.
8. 구직 경험 공유와 취업 준비 팁 🎯
- 서류 합격률은 대체로 5~10% 수준이며, 경쟁이 매우 치열함.
- 자소서는 상황에 따라 작성, 보통 포트폴리오와 프로젝트 결과물이 더욱 중시됨.
- 포트폴리오 사이트를 따로 배포(Vercel, S3 등)하는 경우가 많음.
- 외주나 인턴 경험은 기간보다는 사용 기술, 수행 역할, 결과물 퀄리티에 중점.
- 면접 및 과제 퀄리티가 중요하며, 피드백을 적극적으로 받아들이는 태도가 필요.
- 휴식도 취업 준비의 일부이므로 적절한 휴식 권장.
9. 다양한 개발 도구 및 기술 질문들 💡
- ESLint와 Prettier 충돌 문제는 설정 확장 순서와 플러그인 충돌 여부 확인 필요.
- export default const는 문법 오류가 있으니 함수 컴포넌트 선언 시 주의해야 함.
- React에서 컴포넌트 선언할 때 함수 선언문과 화살표 함수의 차이점:
- 함수 선언문은 호이스팅 가능, this, arguments 등의 바인딩이 다름.
- 화살표 함수는 바인딩이 고정되어 있고 호이스팅되지 않음.
- React Query에서 공통 키(['product','list'])를 invalidate하면 관련된 여러 쿼리를 갱신 가능해 효율적.
- GitHub Actions에서 monorepo 환경의 node_modules 순환참조 문제는 빌드 및 업로드 경로 설정으로 해결할 수 있음.
- utils 폴더는 순수 함수(상태와 무관한 기능)를 모아놓는 곳으로, 훅(Hook)은 포함하지 않는 것이 좋음.
10. 인터프리터와 컴파일러 기본 개념 🖥️
- 인터프리터는 고수준 언어 코드를 한 줄씩 읽고 바로 기계어(0과 1)로 변환해 실행하는 프로그램.
- 컴파일러는 전체 코드를 먼저 기계어로 변환 후 실행하는 방식.
- 기계는 0과 1만 아는 게 맞고, 컴파일러/인터프리터가 인간이 작성한 코드를 기계어로 번역해서 실행함.
면접팁⚡
- React 18 성능 개선과 concurrent rendering에 대해 간단히 설명할 수 있으면 좋음.
- React Suspense의 역할과 비동기 렌더링에서의 작동 방식을 이해하고 설명 가능해야 함.
- useState 훅에서 const를 사용하는 이유, 상태 변경 메커니즘 설명 능력 중요.
- Next.js에서 SSR과 CSR 차이점 및 SEO 관련 이해도가 면접관에게 좋은 인상을 줌.
- NextAuth 인증 토큰 관리 구조를 이해하고 실제 인증 플로우를 설명할 수 있으면 차별점.
링크🔗
- React 18 성능 개선 설명
https://velog.io/@sehyunny/how-react-18-improves-app-perf - React Concurrency 개념
https://3perf.com/talks/react-concurrency/ - NextAuth Credentials Provider 문서
https://next-auth.js.org/v3/configuration/providers#credentials-provider - React Suspense 개념 및 패턴
https://ko.reactjs.org/docs/concurrent-mode-suspense.html - Formik & Yup 사용법
https://formik.org/docs/guides/validation - xlsx 라이브러리 (엑셀 처리)
https://www.npmjs.com/package/xlsx/v/0.18.5 - xlsx-js-style 라이브러리 (스타일 적용)
https://github.com/dtjohnson/xlsx-js-style - Egghead.io Next.js Twitter Clone 강의
https://egghead.io/courses/build-a-twitter-clone-with-the-next-js-app-router-and-supabase-19bebadb
#React#NextJS#NextAuth#ReactHooks#Suspense#UI#상태관리#취업준비#개발팁#자바스크립트