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

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

Q1. equals + hashCode

문제
HashMap에 커스텀 객체를 key로 쓸 때 equalshashCode를 같이 오버라이드해야 하는 이유는?


HashMaphashCode버킷 위치를 찾고, 그 안에서 equals같은 key인지 판단한다.
equals가 true면 hashCode도 같아야 하므로 둘 다 오버라이드한다.

Q2. Checked / Unchecked + 롤백

문제
Checked / Unchecked Exception 차이? @Transactional 기본 롤백은?

  • Checked: IOException 등 — 컴파일러가 처리 강제
  • Unchecked: RuntimeException 계열 — 보통 BusinessException도 여기

@Transactional 기본 롤백 = unchecked만.
checked도 롤백하려면 @Transactional(rollbackFor = Exception.class).

Q3. 복합 인덱스

문제
복합 인덱스 (user_id, created_at)에서 WHERE created_at = ?만 쓰면 왜 잘 못 타나?


복합 인덱스는 왼쪽 컬럼부터 의미가 있다.
앞 컬럼(user_id) 없이 뒤 컬럼만 쓰면 인덱스를 잘 못 탄다.

Q4. 401 vs 403

문제
401 vs 403 한 줄씩.

  • 401: 인증 실패 (로그인/토큰 없음·만료)
  • 403: 인증은 됐지만 권한 없음

Q5. N+1

문제
N+1 문제가 뭔지, MyBatis/JPA에서 줄이는 방법 하나?


목록 1번 조회 후 연관 데이터를 건마다 N번 추가 조회하는 문제.

  • MyBatis: JOIN 또는 IN 일괄 조회
  • JPA: fetch join, @EntityGraph

Q6. access / refresh Token

문제
JWT에서 accessToken을 짧게, refreshToken을 길게 두는 이유는?


access가 탈취돼도 짧은 만료로 피해 구간을 줄이고,
만료 시 refresh로 access를 재발급하기 위해서다.

Q7. Filter vs Interceptor

문제
Filter vs Interceptor 인증은 어디에 두는지 + 이유 한 줄?

  • Filter: 서블릿 단 (DispatcherServlet )
  • Interceptor: Spring MVC (컨트롤러 전후)
  • 인증: Spring Security가 Filter 체인에서 동작하므로 보통 Filter

css/js로 외우지 말고 서블릿 vs MVC로 구분한다.

오늘 한 줄 암기

  1. HashMap key = hashCode(버킷) + equals(동일 판단)
  2. 기본 롤백 = unchecked
  3. 복합 인덱스 = 좌측 접두어
  4. 401 인증 / 403 권한
  5. 인증 = Filter (Security)

다음 목표

  • equals/hashCode를 “버킷 + 동일 키 판단” 두 단계로 말하기
  • Filter를 css/js가 아니라 서블릿 단으로 설명하기