목차
- 날씨와 일상 이야기
- 카카오톡/네이버 인앱 브라우저 UA 처리
- 리액트 상태관리 및 성능 관련 토론
- 인증 및 보안 로직 구현 방법
- HTML 텍스트 데이터 DB 저장 vs. 하드코딩 이슈
- 깃(Git) 브랜치 병합과 스태시 활용 팁
- 리액트 17과 18 버전 타입 충돌 문제 해결 노하우
- VSCode 테마 추천 및 개발환경 이야기
- CRUD 페이지 분리 vs. 통합 관리 전략
- 면접질문 및 기술적 고민
1. 날씨와 일상 이야기 🌤️
- 대화 시작은 봄철 밤 기온 얘기부터
- 예상보다 따뜻한 밤이라 선풍기 켰다는 이야기
- 출퇴근 지하철 3호선 지연, 대중교통 불편함 공유
- 꽃가루 알레르기와 건강 관련 조언도 오감됨
2. 카카오톡/네이버 인앱 브라우저 UA 처리 📱
- **인앱 브라우저(In-App Browser)**란?
카카오톡, 네이버 앱 등에서 링크 클릭 시 앱 내에서 열리는 브라우저를 의미 - 사용자 에이전트(UA) 문자열을 이용해 인앱 브라우저 여부를 감지
- 문제점: 인앱 브라우저는 구글/애플 로그인 시 보안 문제 발생 가능
- 대응법: 강제로 네이티브 브라우저(크롬, 사파리)로 유도하는 스크립트 사용
- 애플 사파리의 경우 우회 방법 없어 제한적임
Tip: 인앱 브라우저 감지는 UA 체크 + 정규식으로 구현하되, 모든 플랫폼 별 차이도 고려해야 함.
3. 리액트 상태관리 및 성능 관련 토론 ⚛️
- 전체 선택 기능 구현을 위해 인덱스 키를 상태로 별도 관리하는 사례
- reduce vs map 두 가지 접근법 비교
- reduce: 한 번의 순회로 처리할 수 있어 성능 면에서 유리
- map: 코드 가독성 측면에서 직관적
- 리액트에서 상태 업데이트 시 중복된 데이터 조회를 최소화하는 방향 권장
- SWR, React Query 등 서버 상태 패칭 라이브러리와 글로벌 상태 관리 오남용 사례 지적
4. 인증 및 보안 로직 구현 방법 🔐
- 인증되지 않은 사용자가 URL 직접 접근 시 UI 틀은 보여지나 데이터는 제한됨
- 보안 강화 방법:
- 서버사이드에서 토큰 유효성 검사 후 페이지 접근 허용 또는 리다이렉트
- 클라이언트에서 토큰 체크는 한계 존재 → 반드시 서버 검증 필요
- 전형적인 방법은 인증 실패 시 로그인 페이지로 리다이렉트 처리
- UI 자체 노출보다는 민감 데이터 제공 여부가 핵심
5. HTML 텍스트 데이터 DB 저장 vs. 하드코딩 이슈 📝
- 페이지의 모든 텍스트를 DB에서 불러오는 아키텍처에 대한 의문
- DB 저장 이유: 다국어 지원, 관리자편집, SEO등 향상 목적
- 단점: 프론트엔드와 백엔드 모두 유지보수 부담 발생
- 각자 역할이 분리되어야 하며, 상황에 따라 적절한 설계가 필요
- SEO(검색엔진 최적화)를 고려하면 서버에서 텍스트 렌더링하는 것이 권장됨
- 관리자 UI를 통해 비개발자가 내용 변경 가능하도록 하면 장기적 유지보수 유리
6. 깃(Git) 브랜치 병합과 스태시 활용 팁 ⚙️
- 기존 기능 A와 수정 기능 B를 각각 브랜치에서 작업 후 병합 시나리오
- A 기능은 이미 main에 병합 완료된 상태에서 B 기능 수정 병합 시 A 기능 유지 여부 걱정
- 결론: 수정된 부분이 겹치지 않으면 A 기능은 그대로 유지됨
- 병합(Merge) 과정에서 동일 코드 수정을 동시에 하면 충돌(Conflict) 발생
- 해결법:
- 최신 main 브랜치를 병합하기 전에 작업 브랜치를 git pull로 최신화
- 충돌 시 직접 코드 수정 후 병합 진행
- Git stash 기능
- 임시 작업 공간에 변경 사항을 저장하고, 나중에 다시 복원할 수 있음
- 작업 중 브랜치 전환 시 매우 유용
- GUI툴(예: Sourcetree, GitKraken) 활용 추천
7. 리액트 17과 18 버전 타입 충돌 문제 해결법 🐱💻
- React 17 버전용 타입 정의와 React 18 버전 간 타입 충돌 발생
- 주로 forwardRef 사용 컴포넌트에서 ref 타입 불일치하는 오류 경험
- 해결 팁:
- yarn이나 npm으로 react 및 관련 @types/react 버전 동기화
- 필요 시 d.ts 타입 재선언(오버라이딩)으로 임시 조치 가능
- package.json에서 타입버전 범위 명확히 지정
- 최신 버전 업그레이드 전까지 호환성 이슈는 일시적일 가능성 높음
8. VSCode 테마 추천 및 개발환경 이야기 🎨
- VSCode 기본 테마 변경 후 가독성 및 디자인 불만 다수
- 인기 테마:
- Atom One Dark (부드러운 다크모드, 눈에 덜 피로함)
- Monokai Pro (유료지만 개발자 사이에서 선호됨)
- Dark+ (VSCode 기본 다크 테마)
- 다크모드 선호 이유: 눈의 피로 감소, 야간 코딩에 적합
- IDE 익스텐션으로 시간대별 테마 자동 변경 가능
- 테마 색상은 개인 취향이며, 업무 효율과 직결됨
9. CRUD 페이지 분리 vs. 통합 관리 전략 🗂️
- 등록(Add) 페이지와 수정(Edit) 페이지를 한 컴포넌트 내 분기 처리 vs. 별도 페이지 분리 고민
- 의견 요약:
- 작은 프로젝트 또는 단순 UI는 한 페이지에서 분기 처리 가능
- 기획 변경과 복잡도 증가시 유지보수 어려워짐
- 확장성과 명확한 책임 분리를 위해 페이지 분리 추천
- 컴포넌트 중복 최소화는 공통 컴포넌트 분리 활용 권장
- 실무에서는 상황과 기획 안정성에 따라 선택
10. 면접팁⚡
5년 차 리액트 개발자 면접 대비 질문 예시
- useEffect 훅이 무엇인지, 어떻게 사용하는지 설명해 보세요
- React 17과 18의 주요 차이점과 업그레이드 시 주의사항은?
- 상태관리 라이브러리 활용 경험 및 장단점은? (Redux, SWR, React Query 등)
- 깃 병합 충돌 처리 경험과 해결 방법 사례
- 인증 로직 설계 시 클라이언트와 서버 역할 분담
- CRUD UI 설계 시 페이지 분리와 통합 관리 장단점 생각해보기
- 타입스크립트 사용 경험과 버전 간 충돌 해결 경험
링크🔗
#리액트#인앱브라우저#인증보안#깃#VSCode#CRUD#웹개발#타입스크립트#프론트엔드#면접