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

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

Q1. HashSet 중복 방지

문제
원리? equals / hashCode 연결.

답
내부에 HashMap을 쓴다.
hashCode로 버킷을 찾고, equals로 같은 값인지 봐서 중복을 막는다.

커스텀 객체는 equals + hashCode 둘 다 오버라이드.
keyCode 아님. equals는 주소가 아니라 값 비교.

Q2. @Async

문제
뭔지? 주의점 (self-invocation).

답
메서드를 별도 스레드에서 비동기 실행. 호출부는 보통 기다리지 않음.

주의: 프록시 기반 → this.xxx()면 적용 안 될 수 있음 (@Transactional과 동일).
@EnableAsync 필요. 동기가 아님.

Q3. DISTINCT vs GROUP BY

문제
차이.

답

  • DISTINCT: 결과 중복 제거
  • GROUP BY: 컬럼으로 그룹 (+ 보통 COUNT/SUM 집계)

Q4. JWT localStorage vs HttpOnly Cookie

문제
LS 저장 리스크 + HttpOnly 이유.

답
localStorage는 JS가 읽음 → XSS 시 토큰 탈취 위험.
HttpOnly Cookie는 JS가 못 읽음 → XSS로 직접 훔치기 어려움.

access를 LS에 두면 XSS에 access는 여전히 노출.
Cookie면 CSRF를 SameSite 등으로 함께 고려.

Q5. Suspense

문제
뭔지? 로딩 UI와 연결.

답
자식이 준비될 때까지 fallback 로딩 UI를 보여주는 경계.
React.lazy 코드 스플리팅에 자주 씀. 로딩을 선언적으로 감싼다.

Q6. @Async (복습)

문제
동기/비동기? this 호출.

답
비동기. this 호출은 프록시 미경유 → 안 먹을 수 있음. (abstract 아님)

Q7. HashSet (복습)

문제
내부 + hashCode/equals.

답
내부 HashMap. hashCode=버킷, equals=값 동일 여부.

오늘 한 줄 암기

  1. HashSet = HashMap + hashCode/equals
  2. @Async = 비동기 + 프록시(this 주의)
  3. DISTINCT = 중복 제거 / GROUP BY = 그룹·집계
  4. LS JWT = XSS 위험 / HttpOnly = JS 차단
  5. Suspense = fallback 로딩 경계

다음 목표

  • @Async를 동기로 말하지 않기
  • HashSet을 keyCode/주소 비교로 말하지 않기