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

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

Q1. static

문제
static이 변수/메서드에 붙으면? static 메서드에서 인스턴스 필드를 바로 쓸 수 있나?


static 멤버는 클래스에 속함. new 없이 클래스명.메서드()로 호출 가능.
static 변수는 인스턴스마다 생기지 않고 공유된다.

static 메서드에서는 this가 없어 인스턴스 필드를 직접 접근할 수 없다.

Q2. REST stateless

문제
REST API에서 stateless가 뭔지? JWT와 어떻게 연결되나?


서버가 요청 사이에 클라이언트 상태를 기억하지 않는다. 각 요청만으로 처리 가능해야 한다.

세션은 서버에 로그인 상태를 두므로 stateful에 가깝고,
JWT는 토큰으로 인증 정보를 넘기고 서버는 검증만 해서 stateless API에 잘 맞는다.

세션 만료·access 짧게는 별개 이슈 (만료 정책 / 탈취 피해 축소).

Q3. DNS

문제
DNS가 뭔지, https://api.example.com 접속 시 하는 일.


도메인 이름을 IP 주소로 바꿔 주는 시스템.
api.example.com → 서버 IP를 찾아 TCP 연결로 이어진다.

Q4. JPA 영속성 컨텍스트

문제
영속성 컨텍스트가 뭔지? 같은 트랜잭션에서 같은 엔티티를 두 번 조회하면 쿼리 1번인 이유.


JPA가 엔티티를 관리하는 1차 캐시(작업 공간).
조회: 1차 캐시 → 없으면 DB.
같은 id 재조회 시 캐시에서 반환되어 SQL이 1번만 나간다.

Q5. Redis 캐시

문제
Redis를 DB 대신이 아니라 캐시로 쓰는 이유.


메모리(In-memory) 기반이라 DB보다 훨씬 빠르다.
Redis 먼저 조회 → 없으면 DB 조회 후 Redis에 저장.
자주 읽는 데이터의 응답 속도·DB 부하를 줄인다.

Q6. Controlled vs Uncontrolled input

문제
값을 누가 관리하는지로 차이.

  • Controlled: 값을 React state가 관리 (value + onChange)
  • Uncontrolled: 값을 브라우저(DOM)이 관리 (defaultValue + ref로 읽기)

React도 state 변경 시 실제 DOM을 갱신한다.
Uncontrolled는 input 값을 state에 올리지 않고 DOM에 맡기는 방식.

Q7. useMemo vs useCallback

문제
각각 무엇을 캐시하나?

  • useMemo: 계산 결과(값) 캐시
  • useCallback: 함수 참조 캐시

컴포넌트 캐시 = React.memo, API 캐시 = React Query 등.

오늘 한 줄 암기

  1. static = 클래스 단위, 인스턴스 필드 직접 접근 X
  2. REST stateless = 서버가 요청 간 상태 안 들고 있음
  3. DNS = 도메인 → IP
  4. 영속성 컨텍스트 = JPA 1차 캐시
  5. Controlled = state / Uncontrolled = DOM

다음 목표

  • stateless를 “세션 만료”랑 섞지 않기
  • Controlled/Uncontrolled를 input 값 소유 주체로 설명하기