매일 업데이트
2022-11-10 06:26 16 min

22 자주 묻는 스프링 부트 인터뷰 질문 및 답변

다가오는 면접을 앞두고 어떤 질문을 해야 할지 고민이신 Java Spring Boot 개발자 여러분께

이 글은 면접에서 자주 나오는 Spring Boot 질문과 답변들을 정리하여, 면접 준비에 도움이 될 수 있도록 구성했습니다. 면접관은 Java Spring Boot 관련 질문을 통해 지원자의 기술 수준을 평가합니다. 따라서 예상 질문과 답변 준비는 필수입니다.

본격적인 질문과 답변에 들어가기 전에 Spring Boot가 무엇인지, 그리고 Java 개발자에게 어떻게 도움이 되는지 간략히 살펴보겠습니다.

자바 스프링 부트란 무엇인가?

2014년에 Spring 팀에서 개발한 오픈소스 프레임워크인 Spring Boot는 독립적이고 실용적인 애플리케이션을 효율적으로 개발하고 Java 가상 머신(JVM)에서 실행할 수 있도록 합니다.

Java 개발자들은 빠르고 간편한 설정과 안전한 구성 덕분에 웹 애플리케이션 및 마이크로서비스 개발에 Spring Boot를 선호합니다.

Spring 기반 애플리케이션을 쉽게 설정하고 구성할 수 있도록 돕는 Spring Boot의 핵심 기능은 다음과 같습니다.

  • 자동 구성: Spring 애플리케이션 설정의 자동화
  • Spring Boot는 기본 설정과 필요한 종속성 패키지를 설치하는 고유한 방법을 제공하여 프로젝트 설정을 빠르게 만듭니다.
  • Spring Boot는 웹 서버 없이도 독립적으로 애플리케이션을 실행할 수 있도록 합니다.

Spring Boot는 Java 개발자에게 어떻게 도움이 될까요?

Spring Boot를 활용하는 Java 개발자들은 프로덕션 수준의 Spring 애플리케이션 개발에 필요한 모든 구성 요소를 자동으로 구성하여 작업을 보다 쉽게 수행할 수 있습니다. 이는 개발 시간을 단축시키고 전반적인 효율성을 향상시킵니다.

또한 Spring Boot는 Spring JDBC, Spring Data, Spring Security 및 Spring ORM을 포함한 Spring 생태계와의 통합이 용이합니다.

Java 개발자는 Spring Boot를 Oracle, MySQL, PostgreSQL, MongoDB와 같은 다양한 데이터베이스에 연결할 수도 있습니다.

XML 구성, Java Beans, 데이터베이스 트랜잭션을 활용한 유연한 구성도 Spring Boot의 주요 장점입니다.

이제 Spring Boot에 대한 기본적인 이해를 갖추었으므로, 면접 준비에 도움이 될 자주 묻는 Spring Boot 질문과 답변들을 살펴보겠습니다.

Spring Boot 면접 질문 및 답변

Spring Boot의 주요 기능은 무엇인가요?

Spring Boot의 주요 기능은 다음과 같습니다.

  • Spring Boot CLI는 Groovy를 사용하여 Spring Boot 애플리케이션을 작성할 수 있게 해주며, 반복적인 코드 작성을 줄여줍니다.
  • 로깅 및 보안 기능을 제공하여 잠재적인 보안 위협으로부터 애플리케이션을 쉽게 보호합니다.
  • 프로젝트 관련 구성 요소의 자동 구성을 제공하여 불필요한 WAR 파일 사용을 줄입니다.
  • Starter Initializer를 통해 기본 프로젝트 구조를 설정하여 수동으로 구조를 설정할 필요가 없습니다.
  • Spring Boot Actuator 기능은 애플리케이션 실행 중 통찰력과 메트릭에 대한 접근성을 제공합니다.
  • Starter Dependency는 특정 기능에 필요한 일반적인 종속성을 모아 제공합니다.

Spring Boot Starter란 무엇인가요?

Spring Boot Starter는 애플리케이션의 종속성을 관리하는 데 필요한 종속성 설명자 세트를 제공합니다. 프레임워크에 자동 종속성 해결을 제공하여 쉽고 빠른 개발을 지원합니다.

Spring Boot에서 Actuator의 역할과 장점은 무엇인가요?

Actuator는 애플리케이션 실행 시 내부적으로 발생하는 일들을 모니터링할 수 있는 Spring Boot의 기능입니다.

예를 들어 디버깅 중에 Actuator를 사용하여 CPU 사용량과 빈 식별과 같은 기능을 통해 로그 분석에 도움을 받을 수 있습니다.

Actuator는 정보 모니터링 및 관리는 물론 웹에서 데이터 검색을 위한 REST 엔드포인트를 제공하여 생산 준비에 필요한 접근성을 높입니다.

Thymeleaf란 무엇이며, 어떻게 사용하나요?

Thymeleaf는 Spring 및 HTML5 Java 웹 애플리케이션을 위한 자연스러운 템플릿 레이아웃을 생성하는 Java의 서버 측 템플릿입니다.

Spring Boot는 pom.xml 파일에서 spring-boot-starter-thymeleaf 종속성을 사용하여 Thymeleaf의 자동 구성을 지원하여 동적 웹 콘텐츠를 쉽게 제공할 수 있도록 합니다.

Thymeleaf 템플릿 또는 HTML 파일을 읽고 렌더링하려면 해당 파일을 src/main/resources/templates 디렉토리에 배치해야 합니다.

Thymeleaf는 index.html 파일을 구문 분석하고 컨트롤러 클래스에서 전달된 실제 값으로 대체하여 웹 브라우저에 동적 메시지를 표시합니다.

org.springframework.boot spring-boot-starter-thymeleaf

Spring Initializer를 사용하여 Spring Boot 프로젝트를 만드는 과정을 설명해 주세요.

Spring Initializr는 웹 기반 툴로서, 프로젝트 세부 정보를 입력하여 Spring Boot 프로젝트를 생성할 수 있습니다. 다음과 같은 단계를 따릅니다.

  1. Spring Initializr 웹사이트에 접속하여 필요한 필드를 채웁니다.
  2. "생성" 버튼을 클릭하여 프로젝트 다운로드를 시작합니다.
  3. 다운로드된 zip 파일의 압축을 해제하고 IDE에서 프로젝트를 엽니다. IDE에서 파일 -> 새로 만들기 -> 기존 소스에서 프로젝트 -> Spring-boot-app으로 이동한 후 pom.xml 파일을 선택합니다. 변경 사항을 가져오라는 메시지가 나타나면 프로젝트가 동기화되도록 클릭합니다. 그런 다음 application.properties 파일로 이동하여 server.port 번호를 server.port=7000으로 편집합니다.
  4. 이제 src->main->java->com.gfg.Spring.boot.app에서 애플리케이션을 실행합니다.

Spring Boot에서 JPA란 무엇인가요?

JPA(Java Persistence API)는 ORM(Object-Relational Mapping)을 사용하여 관계형 데이터를 관리하는 Java 사양입니다. Java 객체와 애플리케이션의 관계형 데이터베이스 간의 데이터 접근을 가능하게 합니다.

JPA는 JPQL(Java Persistent Query Language)이라는 플랫폼 독립적인 객체 지향 쿼리 언어를 사용합니다.

또한 JPA는 Entity Manager API를 제공하여 데이터베이스 쿼리 처리 및 객체 트랜잭션을 관리합니다.

Spring Boot에서 자동 구성이란 무엇인가요?

자동 구성은 애플리케이션에 추가된 jar 종속성을 기반으로 Spring Boot 애플리케이션의 구성을 자동화하는 기능입니다.

클래스 경로에서 사용 가능한 종속성에 따라, 자동 구성은 JPA 및 Spring Security를 포함한 Spring 특정 모듈의 내장 객체를 자동으로 선언합니다.

Spring 어노테이션이란 무엇인가요?

Spring 어노테이션은 코드 스니펫에 정보를 제공하는 메타데이터이며, 클래스와 메서드와 같은 코드 구성 요소에 추가 데이터를 추가합니다.

어노테이션은 프로그램의 작동이나 컴파일된 코드의 후속 작업에 직접적인 영향을 미치지 않습니다. '@' 기호로 시작됩니다.

Spring Boot는 다음과 같은 6가지 주요 어노테이션 유형을 제공합니다.

  • Spring Core 어노테이션
  • Spring Data 어노테이션
  • Spring Bean 어노테이션
  • Spring Web 어노테이션
  • Spring Scheduling 어노테이션
  • Spring Boot 어노테이션

Spring Data REST는 무엇을 의미하나요?

Spring Data REST는 최소한의 코드로 Spring Data 리소스 주변의 RESTful 리소스를 노출하는 기능입니다.

다음 예에서는 POST 메서드를 사용하여 http://localhost/example을 URL로, Content-Type: application/json을 헤더로 사용하여 콘텐츠를 요청합니다.

콘텐츠 요청:

{
    "name": "Jimmy",
    "Gender": "Male",
    "Age": 23
}

응답 내용:

{
    "name": "Jimmy",
    "Gender": "Male",
    "Age": 23
    "_links": {
        "self": {
            "href": "http://localhost:8080/example/1"
        },
        "person": {
            "href": "http://localhost:8080/example/1"
         }
    }
}

이 기능은 개발을 간소화하고 개발 시간을 절약하기 위해 각 개발 환경에 적용되는 사전 정의된 도구 세트를 제공합니다.

Spring Boot DevTools 기능은 Spring Boot 애플리케이션에서 코드를 변경할 때마다 자동으로 애플리케이션을 다시 시작하므로, 코드를 변경할 때마다 수동으로 다시 시작해야 하는 번거로움을 줄여줍니다.

Spring Data란 무엇인가요?

Spring Data는 데이터 액세스 기술을 단순화하여 개발자가 관계형 및 비관계형 데이터, 클라우드 기반 데이터 서비스와 같은 다양한 데이터 저장소에 쉽게 접근할 수 있도록 지원합니다.

Bean이 존재할 때 자동 구성을 중지시키는 방법은 무엇인가요?

이 경우 name 및 value 속성을 포함하는 @ConditionalOnMissingBean 어노테이션을 사용할 수 있습니다.

  • value 속성은 확인할 Bean의 유형을 저장합니다.
  • name 속성은 확인할 Bean의 이름을 지정합니다.

Spring Boot에서 데이터베이스로부터 데이터를 가져오는 방법은 무엇인가요?

다음 단계를 따라 MySQL 데이터베이스에서 Spring Boot 애플리케이션으로 데이터에 액세스할 수 있습니다.

1단계: create DATABASE person 명령어를 사용하여 MySQL에 데이터베이스를 생성합니다.

2단계: 데이터베이스 내에 테이블을 생성합니다.

CREATE TABLE person(id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, name VARCHAR(255));

3단계: Spring Boot 애플리케이션을 생성한 다음 JDBC, MySQL 및 필요한 웹 종속성을 추가합니다.

4단계: 아래와 같이 application.properties 파일에서 데이터베이스를 구성합니다.

spring.datasource.url=jdbc:mysql://localhost:3306/personDetails
spring.datasource.username=example123
spring.datasource.password=example123
spring.jpa.hibernate.ddl-auto=create-drop

5단계: 컨트롤러 클래스에서 요청을 처리합니다.

package com.person;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class JdbcController {
   @Autowired
   JdbcTemplate jdbc;
   @RequestMapping("/save")
   public String index(){
      jdbc.execute("insert into person (name)values(Trial)");
      return "Name entered Successfully";
   }
}

마지막으로 데이터베이스 항목을 확인하면서 애플리케이션을 실행하여 액세스한 데이터를 확인합니다.

Spring Profiles가 필요한 이유는 무엇인가요?

Spring Profiles를 통해 애플리케이션 구성 요소들을 분리하여 특정 개발 환경에 맞게 사용할 수 있습니다.

Spring Profiles가 없으면 개발자는 환경별 외부 구성을 수동으로 관리해야 하는 번거로움이 발생합니다. 또한, 여러 개의 비슷한 구성 요소를 만들어야 하므로 동기화를 유지하기 어렵고, 특정 환경별 매개변수에 따라 구성 요소를 사용할 수 있도록 해야 하는 추가적인 필요성이 생깁니다.

Spring Boot에서 내장된 Tomcat 서버의 포트를 변경할 수 있나요?

네, 가능합니다.

application.properties 파일에 server.port 속성을 추가하고 원하는 포트 번호를 할당하여 변경할 수 있습니다. Spring Boot는 애플리케이션 속성 파일을 자동으로 로드하고 필요한 구성을 애플리케이션에 적용합니다.

예를 들어 server.port 번호를 기본값 8080에서 server.port=8081로 변경할 수 있습니다.

로깅을 위해 Log4j를 어떻게 구성하나요?

다음은 로깅을 위해 Log4j를 구성하는 간단한 단계입니다.

  1. 먼저 Java 프로젝트를 생성한 후 프로젝트를 마우스 오른쪽 버튼으로 클릭합니다. MyEclipse->파일->새로 만들기->Java 프로젝트로 이동하여 프로젝트 이름을 지정하고 마침을 클릭합니다.
  2. Java 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고 빌드 경로 -> 빌드 경로 구성을 선택합니다. 이 단계에서는 log4j 파일을 추가합니다.
  3. 라이브러리로 이동하여 "외부 JAR 추가" 버튼을 클릭하고 나타나는 드롭다운 메뉴에서 log4j 파일을 선택합니다. 그런 다음 "확인"을 클릭합니다.
  4. log4j.properties 파일을 호출할 새 Java 파일을 만든 후 "완료"를 클릭하고 해당 파일을 클래스 경로에 추가합니다.
  5. 클래스 경로에서 "고급"을 클릭한 다음 "폴더 추가" 옵션을 선택하고 "확인"을 클릭합니다.
  6. log4j.properties 파일을 찾아 "확인"을 클릭하고 프로젝트를 실행합니다.
  7. 콘솔에서 아래 출력을 확인합니다.
[main] DEBUG Example – Hello this is a debug message
[main] INFO Example – Hello this is an info message

IoC 컨테이너란 무엇인가요?

IoC(Inversion of Control) 컨테이너는 종속성 주입을 자동으로 구현하는 핵심 Spring 컨테이너입니다. 클래스 애플리케이션을 인스턴스화하고 필요한 종속성의 객체 구성과 조합을 담당합니다.

또한 인스턴스화에서 소멸까지 객체의 수명주기를 관리합니다.

IoC는 Java 코드, XML, Java 어노테이션의 메타데이터 구성을 사용하여 작업을 수행합니다.

컨테이너가 Java 객체와 객체의 수명주기를 제어하기 때문에 Inversion of Control이라고 합니다. 그렇지 않으면 개발자가 해야 할 작업입니다.

Maven을 사용하여 Spring Boot 애플리케이션을 만드는 방법을 설명해 주세요.

이 프로세스에는 다음과 같은 단계가 포함됩니다.

1단계: 프로젝트 유형을 선택합니다.

2단계: 구성할 프로젝트 이름을 지정한 다음 "완료" 버튼을 클릭하여 프로젝트를 생성합니다.

3단계: Maven 프로젝트의 pom.xml 파일을 구성하여 Spring Boot 프로젝트를 생성합니다.

pom.xml 파일:

<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.javatpoint</groupId>  
  <artifactId>spring-boot-example</artifactId>  
  <version>0.0.1-SNAPS<name>JavaTpoint Spring Boot Example</name>  
</project> 

구성에는 Maven 프로젝트에 상위 항목을 추가하는 작업이 포함됩니다. 이 작업은 Maven 프로젝트를 상위 프로젝트의 하위 프로젝트로 선언합니다.

<parent>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-parent</artifactId>  
    <version>1.4.2.RELEASE</version>  
</parent>  

4단계: 다음으로 웹 종속성 spring-boot-starter-web을 pom.xml 파일에 추가합니다.

<dependencies>  
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-web</artifactId>  
    </dependency>  
</dependencies>  

5단계: 프로젝트의 Java 버전을 추가합니다.

<properties>  
    <java.version>1.8</java.version>  
</properties> 

6단계: 새 종속성을 추가할 때마다 Maven 프로젝트를 업데이트해야 합니다.

7단계: src/main/java 패키지 내에서 Java 클래스를 생성하여 Maven 프로젝트를 실행 가능하게 만듭니다.

8단계: 다음으로 Spring 애플리케이션의 클래스 정적 실행 메서드를 호출합니다.

9단계: 마지막으로 클래스를 Java 애플리케이션으로 실행합니다.

Spring에 비해 Spring Boot의 장점은 무엇인가요?

  • Spring Boot의 부트스트랩 기능은 부트 이니셜라이저라는 기술을 사용하여 소스 언어를 컴파일하여 사용자 장치의 공간을 절약하고 애플리케이션의 로드 시간을 단축합니다.
  • Spring과 달리 Spring Boot는 부모 POM(Parent Object Model)이나 XML 파일에 의존하지 않고 spring-boot-dependencies를 추가한 후 의존성 관리가 가능합니다.
  • Spring Boot를 통해 개발자는 XML 구성 없이 어노테이션이나 XML 구성을 사용할 수 있습니다.
  • 개발자는 애플리케이션을 설정하는 데 필요한 상용구 코드가 적은 Spring Boot를 선호합니다. Spring Boot는 인메모리 데이터베이스와 임베디드 Tomcat 서버를 제공하여 상용구 코드를 줄입니다. 반면에 Spring은 더 많은 상용구 코드가 필요합니다.
  • Spring Boot는 WAR(Web Application Resource) 파일이 필요 없고 JAR(Java Resource)에만 의존할 수 있는 작고 단순한 구조를 가지므로 사용자에게 더 유용합니다.
  • Spring Boot는 Tomcat 및 Jetty와 같은 서버를 자동으로 포함합니다. 따라서 개발자는 Spring에서처럼 수동으로 서버를 설정할 필요가 없습니다.

페이지 매김 프로세스는 리소스를 절약하기 위해 데이터를 섹션으로 나눕니다. 페이지 크기와 페이지 번호의 두 가지 필드로 구성됩니다.

이 과정에는 다음과 같은 몇 가지 단계가 포함됩니다.

1단계: 초기 설정
구성 엔티티를 도메인 클래스로 Person이라는 이름을 지정합니다.

@Entity 
public class Person {
    @Id
    private long id;
    private String name; 
}

2단계: 리포지토리 생성
다음으로 PersonRepository extends PagingAndSortingRepository를 사용하여 페이징 및 정렬을 위한 findAll(Pageable pageable) 및 findAll(Sort sort) 메서드를 얻을 수 있습니다.

public interface PersonRepository extends PagingAndSortingRepository<Person, Integer> {
    List<Product> findAllByPrice(double price, Pageable pageable);
}

3단계: 페이지 매김 단계
여기에서 첫 번째 단계는 PageRequest 객체를 만드는 것입니다. Pageable 인터페이스를 구현하는 요청에 따라 페이지 번호와 페이지 크기를 전달합니다.

Pageable firstPageWithTwoElements = PageRequest.of(0,2);
Pageable secondPageWithThreeElements = PageRequest.of(1,3);

그런 다음 이 PageRequest 객체를 리포지토리 메서드에 매개변수로 전달합니다.

Page<Person> allProducts = personRepository.findAllByPrice(findPageWithTwoElements);
List<Items> allTwoDollarItems = itemsRepository.findAllByPrice(2, secondPageThreeElements) 

기본적으로 findAll(Pageable pageable) 메서드는 Page<T> 객체를 반환합니다.

사용자 지정 자동 구성을 등록하는 방법을 설명해 주세요.

@EnableAutoConfiguration 키에 META-INF/spring.factories 파일에서 정규화된 이름을 언급합니다. 이 단계에서 자동 구성 클래스를 등록합니다.

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.baeldung.autoconfigure.CustomAutoConfiguration

Maven을 사용하여 프로젝트를 빌드하려면 파일을 resources/META-INF 디렉토리에 배치해야 합니다.

Spring Boot에서 부트스트래핑이란 무엇인가요?

부트스트래핑은 Spring Boot 애플리케이션 시작 시 로직을 실행하는 프로세스입니다. Boot Initializer는 Spring Boot에서 소스 코드를 컴파일합니다. 이 프로세스는 장치 공간을 절약하고 애플리케이션의 로딩 시간을 단축합니다.

마지막 한마디 👨‍💻

이 글에서는 면접에서 자주 묻는 Spring Boot 질문과 자신 있게 답변할 수 있는 답변들을 살펴보았습니다. 면접에서 좋은 결과를 얻으시길 바랍니다!

Java 인터뷰에서 질문에 대한 몇 가지 관련 팁을 배우고 싶을 수도 있습니다.

행운을 빕니다! 🙂

저자
Korea

기술 트렌드와 실용적인 팁을 전하는 लेखक입니다.