12월 21, 2025
16 분 읽기

백엔드 개발자 (Java) 면접 질문: 완벽 가이드

interview
career-advice
job-search
백엔드 개발자 (Java) 면접 질문: 완벽 가이드
MB

Milad Bonakdar

작성자

Spring Boot, 마이크로서비스, JPA 및 시스템 설계 관련 필수 면접 질문으로 Java 백엔드 개발을 마스터하세요. Java 개발자 면접을 위한 완벽한 준비입니다.


소개

Java는 특히 현대적인 Spring Boot 생태계를 통해 엔터프라이즈 백엔드 분야에서 여전히 강력한 존재감을 유지하고 있습니다. Java의 견고함, 확장성, 그리고 광범위한 생태계는 마이크로서비스와 클라우드 네이티브 애플리케이션을 구축하는 데 있어 최고의 선택지로 자리매김하게 합니다.

본 가이드는 Java 및 Spring Boot를 전문으로 하는 백엔드 개발자를 위한 필수 면접 질문을 다룹니다. 핵심 프레임워크 개념, 마이크로서비스 아키텍처, JPA/Hibernate를 사용한 데이터베이스 상호 작용, 그리고 다음 면접을 준비하는 데 도움이 될 모범 사례를 살펴봅니다.


Spring Boot 핵심 개념

1. Spring Boot는 무엇이며, 기존 Spring Framework와 어떻게 다른가요?

답변:

  • Spring Framework: 엔터프라이즈 Java 개발을 위한 포괄적인 프레임워크입니다. 설정하려면 상당한 수동 구성(XML 또는 Java 기반)이 필요합니다.
  • Spring Boot: 새로운 Spring 애플리케이션의 설정 및 개발을 간소화하는 Spring Framework의 확장입니다.
    • 자동 구성(Auto-Configuration): 클래스 경로 의존성을 기반으로 Bean을 자동으로 구성합니다.
    • 내장 서버(Embedded Servers): Tomcat, Jetty 또는 Undertow를 포함하므로 WAR 파일을 배포할 필요가 없습니다.
    • 스타터(Starters): 빌드 구성을 단순화하기 위해 선별된 의존성 모음입니다.
    • 규칙에 따른 기본값(Opinionated Defaults): "설정보다 규칙" 접근 방식입니다.

희소성: 일반적 난이도: 쉬움


2. @SpringBootApplication 어노테이션에 대해 설명해주세요.

답변: 이 어노테이션은 세 가지 다른 어노테이션을 결합한 편리한 어노테이션입니다.

  1. @Configuration: 해당 클래스를 Bean 정의의 소스로 표시합니다.
  2. @EnableAutoConfiguration: Spring Boot에게 클래스 경로 설정, 기타 Bean 및 다양한 속성 설정을 기반으로 Bean을 추가하기 시작하도록 지시합니다.
  3. @ComponentScan: Spring에게 현재 패키지 및 하위 패키지에서 다른 컴포넌트, 구성 및 서비스를 찾도록 지시합니다.

희소성: 일반적 난이도: 쉬움


3. 의존성 주입(DI)과 제어 역전(IoC)은 무엇인가요?

답변:

  • IoC: 객체 생성 및 관리 제어가 프로그래머에서 컨테이너(Spring IoC 컨테이너)로 이전되는 원칙입니다.
  • DI: IoC를 구현하는 데 사용되는 디자인 패턴입니다. 객체가 자체 의존성을 생성하는 대신 생성자, Setter 또는 필드를 통해 의존성이 "주입"됩니다.
  • 장점: 결합도 감소, 더 쉬운 테스팅(의존성 모의 객체 사용), 더 나은 유지보수성.

희소성: 매우 일반적 난이도: 중간


4. Spring Boot 스타터는 무엇인가요? 예를 들어주세요.

답변: 스타터는 애플리케이션에 포함할 수 있는 편리한 의존성 설명자 세트입니다. 프로젝트를 일관되고 지원되는 관리되는 전이적 의존성 세트로 빠르게 시작하고 실행하는 데 필요한 모든 의존성을 포함합니다.

  • 예시:
    • spring-boot-starter-web: 웹 애플리케이션 구축용 (Tomcat 및 Spring MVC 포함).
    • spring-boot-starter-data-jpa: Hibernate와 함께 Spring Data JPA 사용용.
    • spring-boot-starter-test: 테스팅용 (JUnit, Mockito 포함).
    • spring-boot-starter-security: Spring Security용.

희소성: 일반적 난이도: 쉬움


5. Spring Actuator는 무엇인가요?

답변: Spring Boot Actuator는 애플리케이션을 모니터링하고 관리하는 데 도움이 되는 프로덕션 지원 기능을 제공합니다.

  • 엔드포인트: /health(앱 상태), /metrics(메모리, CPU 사용량), /info(앱 정보), /env(환경 속성)와 같은 엔드포인트를 노출합니다.
  • 용도: 운영팀이 프로덕션 환경에서 마이크로서비스의 상태를 확인하는 데 매우 중요합니다.

희소성: 일반적 난이도: 중간


마이크로서비스 및 아키텍처

6. 모놀리식 아키텍처에 비해 마이크로서비스의 장점은 무엇인가요?

답변:

  • 확장성: 개별 서비스는 수요에 따라 독립적으로 확장될 수 있습니다.
  • 기술 독립성: 서로 다른 서비스는 작업에 가장 적합한 서로 다른 기술(Java, Go, Python)을 사용할 수 있습니다.
  • 결함 격리: 한 서비스의 실패가 전체 시스템을 중단시키지 않습니다.
  • 독립적인 배포: 팀은 서비스를 독립적으로 배포하여 더 빠른 릴리스 주기(CI/CD)를 가능하게 합니다.

희소성: 일반적 난이도: 중간


7. API 게이트웨이는 무엇인가요? 왜 사용해야 하나요?

답변: API 게이트웨이는 시스템에 대한 단일 진입점 역할을 하는 서버입니다. 클라이언트로부터 모든 API 호출을 받은 다음 해당 마이크로서비스로 라우팅합니다.

  • 기능: 요청 라우팅, 구성 및 프로토콜 변환.
  • 공통 관심사: 인증, SSL 종료, 속도 제한, 캐싱, 로깅.
  • 예시: Spring Cloud Gateway, Netflix Zuul, Kong.

희소성: 매우 일반적 난이도: 중간


8. 서비스 디스커버리(Eureka)에 대해 설명해주세요.

답변: 마이크로서비스 환경에서 서비스 인스턴스는 동적 IP 주소를 갖습니다. 서비스 디스커버리는 서비스가 서로를 찾기 위한 메커니즘입니다.

  • Eureka 서버: 서비스 레지스트리 역할을 합니다.
  • Eureka 클라이언트: 마이크로서비스는 시작 시 Eureka 서버에 자체 등록하고 하트비트를 보냅니다.
  • 디스커버리: 서비스 A가 서비스 B를 호출해야 할 때 Eureka에 서비스 B의 주소를 요청합니다.

희소성: 일반적 난이도: 중간


9. 서킷 브레이커 패턴은 무엇인가요?

답변: 서킷 브레이커 패턴은 애플리케이션이 실패할 가능성이 높은 작업을 반복적으로 실행하려고 시도하는 것을 방지합니다(예: 다운된 서비스 호출).

  • 상태:
    • 닫힘(Closed): 요청이 정상적으로 흐릅니다.
    • 열림(Open): 실패한 서비스가 복구될 수 있도록 요청이 즉시 차단됩니다(빠른 실패).
    • 반열림(Half-Open): 서비스가 복구되었는지 테스트하기 위해 제한된 수의 요청만 허용됩니다.
  • 도구: Resilience4j (권장), Hystrix (더 이상 사용되지 않음).

희소성: 매우 일반적 난이도: 어려움


데이터베이스 및 JPA

10. JPA와 Hibernate는 무엇인가요?

답변:

  • JPA (Java Persistence API): Java 객체와 관계형 데이터베이스 간의 데이터 액세스, 지속성 및 관리를 위한 사양입니다. 인터페이스일 뿐입니다.
  • Hibernate: JPA 사양의 가장 인기 있는 구현입니다. ORM (Object-Relational Mapping) 도구입니다.

희소성: 일반적 난이도: 쉬움


11. Hibernate에서 N+1 Select 문제에 대해 설명해주세요.

답변: N+1 문제는 데이터 액세스 프레임워크가 기본 SQL 쿼리를 실행할 때 검색할 수 있었던 동일한 데이터를 가져오기 위해 N개의 추가 SQL 문을 실행할 때 발생합니다.

  • 시나리오: Author 목록 가져오기(1개의 쿼리). 반복하고 author.getBooks()에 액세스(각 작성자당 1개의 쿼리, N개의 쿼리).
  • 해결 방법: JPQL에서 Join Fetch 사용 (SELECT a FROM Author a JOIN FETCH a.books) 또는 엔티티 그래프를 사용하여 관련 엔티티를 단일 쿼리에서 즉시 로드합니다.

희소성: 매우 일반적 난이도: 중간


12. @Entity, @Table@Column의 차이점은 무엇인가요?

답변:

  • @Entity: 클래스가 엔티티이고 데이터베이스 테이블에 매핑됨을 지정합니다.
  • @Table: 선택 사항입니다. 매핑에 사용할 데이터베이스 테이블의 이름을 지정합니다. 생략하면 클래스 이름이 사용됩니다.
  • @Column: 선택 사항입니다. 필드 또는 속성이 매핑될 열의 세부 정보를 지정합니다. 생략하면 필드 이름이 사용됩니다.

희소성: 일반적 난이도: 쉬움


보안 및 테스팅

13. Spring Boot 애플리케이션을 어떻게 보호하나요?

답변: Spring Security를 사용합니다.

  • 인증(Authentication): 사용자가 누구인지 확인합니다 (예: 기본 인증, 폼 로그인, OAuth2/OIDC).
  • 권한 부여(Authorization): 사용자가 무엇을 할 수 있는지 확인합니다 (예: @PreAuthorize를 사용한 역할 기반 액세스 제어).
  • JWT: 상태 비저장 마이크로서비스의 경우 JSON Web Token은 서비스 간에 ID를 전달하는 데 일반적으로 사용됩니다.

희소성: 일반적 난이도: 중간


14. Mockito에서 @Mock@InjectMocks의 차이점은 무엇인가요?

답변:

  • @Mock: 클래스/인터페이스의 모의 객체를 생성합니다. 실제 동작은 없으며 when(...).thenReturn(...)을 사용하여 동작을 정의합니다.
  • @InjectMocks: 클래스의 인스턴스를 생성하고 @Mock (또는 @Spy) 어노테이션으로 생성된 모의 객체를 이 인스턴스에 주입합니다. 테스트 중인 클래스에 사용됩니다.

희소성: 일반적 난이도: 중간


15. Spring Boot에서 트랜잭션을 어떻게 처리하나요?

답변: @Transactional 어노테이션을 사용합니다.

  • 메커니즘: Spring은 클래스/메서드 주위에 프록시를 만듭니다. 메서드 실행 전에 트랜잭션을 시작하고 메서드가 반환된 후 커밋합니다. RuntimeException이 발생하면 트랜잭션을 롤백합니다.
  • 전파(Propagation): 트랜잭션이 기존 트랜잭션과 관련되는 방식을 구성할 수 있습니다 (예: REQUIRED, REQUIRES_NEW).

희소성: 일반적 난이도: 중간


고급 주제

16. Spring Cloud Config는 무엇인가요?

답변: Spring Cloud Config는 분산 시스템에서 외부화된 구성에 대한 서버 측 및 클라이언트 측 지원을 제공합니다.

  • Config 서버: 모든 환경에서 애플리케이션에 대한 외부 속성을 관리하는 중앙 위치입니다. Git, SVN 또는 Vault로 지원할 수 있습니다.
  • 장점: 애플리케이션을 재배포하지 않고도 구성을 변경할 수 있습니다 (@RefreshScope 사용).

희소성: 흔하지 않음 난이도: 중간


17. Spring Bean에서 SingletonPrototype 스코프의 차이점을 설명해주세요.

답변:

  • Singleton (기본값): Spring IoC 컨테이너당 Bean의 인스턴스가 하나만 생성됩니다. 캐시되어 재사용됩니다.
  • Prototype: Bean이 요청될 때마다 새 인스턴스가 생성됩니다.
  • 기타: Request, Session (웹 인식 스코프).

희소성: 일반적 난이도: 쉬움


18. Java에서 Checked 예외와 Unchecked 예외의 차이점은 무엇인가요?

답변:

  • Checked 예외: Exception에서 상속받습니다 (RuntimeException 제외). 컴파일러는 예외를 처리(try-catch)하거나 선언(throws)하도록 강제합니다. 예시: IOException, SQLException. 복구 가능한 조건을 나타냅니다.
  • Unchecked 예외: RuntimeException에서 상속받습니다. 컴파일러는 예외를 처리하도록 강제하지 않습니다. 예시: NullPointerException, IllegalArgumentException. 프로그래밍 오류를 나타냅니다. Spring의 @Transactional은 기본적으로 unchecked 예외에 대해서만 롤백합니다.

희소성: 일반적 난이도: 쉬움


19. Java에서 가비지 컬렉션은 어떻게 작동하나요?

답변: 가비지 컬렉션(GC)은 더 이상 도달할 수 없는 객체가 차지하는 메모리를 자동으로 회수하는 프로세스입니다.

  • 세대별 가설: 대부분의 객체는 빨리 사라집니다.
  • 힙 구조: Young Generation (Eden, Survivor 공간) 및 Old Generation.
  • Minor GC: Young Gen을 정리합니다. 빠릅니다.
  • Major/Full GC: Old Gen을 정리합니다. 느리고 "Stop-the-world" 일시 중지를 유발할 수 있습니다.
  • 알고리즘: G1GC (최신 Java의 기본값), ZGC, Shenandoah (낮은 지연 시간).

희소성: 일반적 난이도: 어려움


20. Java 스트림은 무엇인가요?

답변: Java 8에 도입된 스트림은 객체 컬렉션을 처리하는 기능적 접근 방식을 제공합니다.

  • 기능: 선언적, 파이프라이닝, 내부 반복.
  • 작업:
    • 중간(Intermediate): filter, map, sorted (지연).
    • 종료(Terminal): collect, forEach, reduce (처리를 트리거).
  • 병렬 스트림(Parallel Streams): 여러 스레드를 사용하여 데이터를 병렬로 처리할 수 있습니다 (.parallelStream()).

희소성: 일반적 난이도: 중간

Newsletter subscription

실제로 효과가 있는 주간 커리어 팁

최신 인사이트를 받은 편지함으로 직접 받아보세요

Decorative doodle

채용 담당자에게 눈에 띄고 꿈의 직장을 얻으세요

ATS를 통과하고 채용 담당자에게 깊은 인상을 주는 AI 기반 이력서로 커리어를 변화시킨 수천 명의 사람들과 함께하세요.

지금 만들기 시작

이 게시물 공유

75% ATS 거부율을 극복하세요

4개 중 3개의 이력서는 사람의 눈에 닿지 않습니다. 우리의 키워드 최적화는 통과율을 최대 80%까지 높여 채용 담당자가 실제로 당신의 잠재력을 볼 수 있도록 합니다.