# 면접 CS 정리 Day 14 (풀스택 / Java·Spring·React)

면접 CS 정리 Day 14 (풀스택 / Java·Spring·React)

Q1. HashMap vs Hashtable

문제
HashMap이랑 Hashtable 차이? null, 동기화 기준.

  • HashMap: null key/value 가능, 동기화 없음 → 실무 기본
  • Hashtable: null 불가, 동기화 있음 → 레거시

멀티스레드 Map은 ConcurrentHashMap을 쓴다.

Q2. 생성자 주입

문제
필드 주입보다 생성자 주입을 권장하는 이유.

  1. 테스트 시 mock을 생성자로 넣기 쉬움
  2. final로 필수 의존성 명시·불변 유지
  3. 의존성 누락 시 객체 생성 시점에 바로 실패

Q3. 301 vs 302

문제
HTTP 301 / 302 차이.

  • 301: 영구 리다이렉트 (URL이 완전히 바뀜)
  • 302: 임시 리다이렉트 (지금은 다른 곳, 원래 URL 유지)

Q4. 인덱스 과다

문제
인덱스를 너무 많이 만들면 단점 2개.

  1. 용량 증가
  2. 쓰기(INSERT/UPDATE/DELETE) 느려짐 — 인덱스도 같이 갱신

자주 쓰는 조회 조건 위주로만 만든다.

Q5. React key

문제
key가 왜 필요한지? index를 key로 쓰면?


리스트에서 React가 항목을 구분하려고 쓰는 특별 prop.
일반 props(부모→자식 전달)와는 다름.

index key는 삽입·삭제·순서 변경 시 항목을 잘못 매칭할 수 있어 고유 id를 쓴다.

Q6. REST stateless

문제
stateless 한 줄. 세션 vs JWT.


서버가 요청 사이에 클라이언트 상태를 기억하지 않음.

  • 세션: 서버에 사용자 상태 저장 → stateful에 가깝다
  • JWT: 클라이언트가 토큰 보유, 서버는 검증 → stateless에 잘 맞음

Q7. REQUIRED vs REQUIRES_NEW

문제
트랜잭션이 이미 있을 때.

  • REQUIRED: 있으면 참여, 없으면 생성
  • REQUIRES_NEW: 항상 새 트랜잭션

철자: REQUIRES_NEW (REQUIRED_NEW 아님).

오늘 한 줄 암기

  1. HashMap = null OK·동기화 X / Hashtable = 레거시
  2. 생성자 주입 = mock·final·조기 실패
  3. 301 영구 / 302 임시
  4. 인덱스 과다 = 용량↑ + 쓰기↓
  5. key = 리스트 항목 구분 (고유 id)

다음 목표

  • key를 일반 props랑 섞지 않기
  • REQUIRES_NEW 철자 정확히