백엔드 기술 면접 대비 #2

김지현·2025년 4월 7일
0
post-thumbnail

기본 질문

1. 영속성 컨텍스트의 범위는?

➡️ 영속성 컨텍스트의 범위는 일반적으로 HTTP 요청이 시작될 때 생성되고, 응답이 완료될 때 소멸된다. JPA에서는 @Trancational이 적용된 메서드 내에서 유지된다.

영속성 컨텍스트는 엔티티 객체를 관리하는 공간으로 엔티티 객체의 생명 주기를 관리하고 변경 감지를 통해 자동으로 DB에 반영하는 역할을 한다.

2. Spring의 Bean Scope?

➡️ @Componet로 등록된 Bean이 어떤 범위로 관리될지 설정할 수 있다. 기본값은 Singleton으로 애플리케이션에서 하나의 인스턴스만 생성되고 DI 컨테이너가 생성될 때 한 번만 초기화 된다.

3. JPA 에서 FetchType 이 LAZY 로 설정된 엔티티를 조회할 때, 프록시 객체 동작 방식은?

➡️ 엔티티를 조회할 때 실제 데이터를 로드하는 것이 아니라 프록시 객체가 생성된다. 실제 데이터가 필요한 시점에 영속성 컨텍스트를 통해 엔티티를 조회하고 데이터를 가져온다.

4. Spring 에서 @Transactional 이 적용된 메서드가 실행될 때, 프록시 객체 동작 방식은?

➡️ 트랜잭션이 적용된 메서드는 AOP 기반의 프록시 객체를 생성하여 실행된다. 메서드 실행 전 트랜잭션이 시작되며 메서드가 종료될 때 트랜잭션이 커밋되거나 롤백된다.

5. Transaction isolation 레벨?

➡️ 트랜잭션 격리 수준 동시에 실행되는 트랜잭션 간의 데이터 격리 수준에 대한 설정이다. 기본값은 REPEATABLE READ로, 트랜잭션 동안 동일한 데이터를 읽을 수 있다. READ UNCOMITTED(커밋되지 않은 데이터 읽기 가능), READ COMITTED(커밋된 데이터만 읽기 가능), SEIALIZALBE(동시 실행 차단) 등의 격리 수준이 존재한다.

6. MySQL 에서 인덱스 사용 시, 쓰기 작업이 발생할 때 인덱스의 자료구조 재정렬 방식?

➡️ MySQL의 B-Tree 인덱스는 삽입/삭제 시 자동으로 정렬된다. B-Tree 특성에 따라 적절한 위치에 삽입되고 균형 유지를 위한 재정렬 작업이 발생한다.

7. Java 에서 객체를 직렬화한 후 역직렬화할 때, 클래스의 classpath가 변경되면ClassNotFoundException 오류가 발생하는 이유?

(클래스 버전 관리/SerialVersionUID 에 대해 알고 있는지)
➡️ Java에서 객체를 직렬화할 때, 클래스의 메타데이터가 함께 저장된다. 역직렬화 시점에 데이터의 클래스 메타데이터와 일치하는 클래스를 찾을 수 없으면 ClassNotFoundException이 발생한다.

8. Spring 내부에서 DI 과정이 이루어지는 방식?

➡️ 스프링은 ComponentScan을 통해 Bean을 찾고 인스턴스를 생성한 뒤, @Autowired, @Inject 등의 애너테이션, 생성자 등을 통해 의존성을 주입한다. Bean 인스턴스를 스프링 컨테이너에 등록하고 필요에 따라 제공한다.

9. DDD에서 이벤트 리스너 패턴 구성 방식은?

➡️ 도메인 객체의 상태 변화가 발생하면 이벤트가 발행된다. 이벤트 리스너가 해당 이벤트를 감지하고 처리한다.

프로젝트 질문

1. 의존역전원칙(DIP)은 무엇이고 고수준 모듈을 어떻게 보호하는지?

➡️ DIP는 고수준 모듈이 저수준 모듈에 의존하지 않고 추상화에 의존하도록 인터페이스를 활용하여 의존성을 역전하는 개념이다.

저수준 모듈이 아니라 인터페이스나 추상 클래스를 참조하여 의존성을 분리한다. 인터페이스를 주입하여 고수준 모듈이 특정 구현체에 의존하지 않도록 보호할 수 있게 된다.

2. 트래픽이 많은 서비스에서 Redis를 많이 사용하는 이유를 Redis의 내부 구조와 연관 지어 설명?

➡️ 레디스는 인메모리 데이터베이스로 디스크보다 빠른 속도를 제공한다. 다양한 자료 구조를 지원하여 상황에 맞게 적용할 수 있다.

3. 주문 시스템을 개발했는데, 선점 기능을 도입한다면 어떻게 개발 할지?

➡️ 1. 버전 정보를 사용하여 충돌을 감지하는 낙관적 락
2. 하나의 트랜잭션만 데이터에 접근 가능하도록 제어하는 비관적 락
3. 다중 인스턴스 환경에서 선점을 구현하는 분산 락

4. 프로젝트를 다중 인스턴스 또는 MSA 구조로 변경한다고 했을 때 고려해야할 점은?

➡️ 데이터 일관성, 서비스 간 통신, 로드 밸련싱, 보안 등

5. JWT 기반 인증에서 토큰을 즉시 만료시킬 수 있는 방법은?

➡️ 1. 레디스에 로그아웃된 토큰을 저장하고 인증시 체크하는 블랙리스트 설계
2. 토큰 무효화 API 제공
3. 엑세스 토큰의 유효시간을 짧게 하고 리프레쉬 토큰 무효화

profile
Server Developer

0개의 댓글