Notice
Recent Posts
Recent Comments
Link
250x250
반응형
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

백고등어 개발 블로그

Spring Boot 면접 예상 질문 & 답변 완벽 가이드 본문

면접

Spring Boot 면접 예상 질문 & 답변 완벽 가이드

백고등어 2025. 9. 16. 16:33
728x90
반응형

Spring Boot는 현재 자바 백엔드 개발에서 가장 널리 사용되는 프레임워크 중 하나입니다. 많은 기업에서 Spring Boot를 사용하고 있기 때문에 면접에서도 자주 다뤄지는 주제예요. 오늘은 Spring Boot 면접에서 꼭 나오는 질문들을 정리해보겠습니다.

1. Spring Boot란 무엇이고 왜 사용하나요?

Spring Boot는 Spring 프레임워크를 더 쉽고 빠르게 사용할 수 있도록 만든 도구입니다. 기존 Spring에서는 XML이나 Java Config로 복잡한 설정을 해야 했는데, Spring Boot는 이런 설정들을 자동으로 해줘서 개발자가 비즈니스 로직에만 집중할 수 있게 해줍니다.

주요 특징:

  • 자동 설정: 클래스패스의 라이브러리를 보고 자동으로 설정
  • 독립 실행: 내장 톰캣으로 jar 파일만으로 실행 가능
  • 스타터 의존성: 관련 라이브러리들을 묶어서 간편하게 추가
  • 프로덕션 기능: 헬스체크, 메트릭 등 운영 기능 제공

카페를 차리는 것에 비유하면, 기존 Spring은 커피머신, 테이블, 의자를 하나하나 직접 준비하는 것이고, Spring Boot는 모든 것이 갖춰진 프랜차이즈 매장을 받는 것과 같습니다.

2. 자동 설정(Auto Configuration)이 어떻게 동작하나요?

Spring Boot의 핵심 기능인 자동 설정은 @EnableAutoConfiguration 애노테이션을 통해 동작합니다. Spring Boot는 클래스패스에 있는 jar 파일들을 스캔해서 필요한 빈들을 자동으로 등록해줍니다.

동작 과정:

  1. spring.factories 파일에서 자동 설정 클래스 목록을 읽음
  2. @ConditionalOnClass, @ConditionalOnProperty 등의 조건을 확인
  3. 조건이 맞으면 해당 설정 클래스를 실행해서 빈을 등록

예를 들어, spring-boot-starter-web을 추가하면 톰캣, 스프링 MVC 등이 자동으로 설정됩니다. H2 데이터베이스가 클래스패스에 있으면 자동으로 DataSource가 생성되죠.

3. Spring Boot Starter가 무엇인가요?

Starter는 특정 기능을 사용하기 위해 필요한 의존성들을 묶어놓은 패키지입니다. 개발자가 일일이 호환되는 버전을 찾아서 추가할 필요 없이 하나의 스타터만 추가하면 됩니다.

대표적인 Starter들:

  • spring-boot-starter-web: 웹 애플리케이션 (톰캣, 스프링 MVC, Jackson 등)
  • spring-boot-starter-data-jpa: JPA (Hibernate, JDBC 등)
  • spring-boot-starter-security: Spring Security
  • spring-boot-starter-test: 테스트 (JUnit, Mockito, AssertJ 등)

마치 라면을 끓일 때 각 재료를 따로 사는 대신 라면 세트를 사는 것과 같습니다. 필요한 것들이 다 들어있어서 편리하죠.

4. Spring Boot와 Spring Framework의 차이점은 무엇인가요?

Spring Framework:

  • 핵심 기능 제공 (DI, AOP, MVC 등)
  • 개발자가 직접 설정 파일 작성 필요
  • 외부 웹서버에 배포 필요
  • 의존성을 개별적으로 관리

Spring Boot:

  • Spring Framework 위에 구축된 도구
  • 자동 설정으로 설정 파일 최소화
  • 내장 웹서버로 독립 실행 가능
  • Starter로 의존성 그룹 관리

Spring Framework가 도구 상자라면, Spring Boot는 이미 조립된 완제품이라고 생각하면 됩니다.

5. application.properties와 application.yml의 차이점은 무엇인가요?

둘 다 Spring Boot 설정 파일이지만 문법이 다릅니다.

application.properties:

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=user
spring.datasource.password=password

application.yml:

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: user
    password: password

YAML은 계층 구조를 더 명확하게 표현할 수 있고 가독성이 좋습니다. 하지만 들여쓰기에 민감해서 실수할 수 있어요. Properties는 단순하지만 중복이 많아질 수 있습니다.

6. Profile이란 무엇이고 어떻게 사용하나요?

Profile은 환경별로 다른 설정을 적용할 수 있게 해주는 기능입니다. 개발, 테스트, 운영 환경마다 데이터베이스나 로그 레벨이 다를 수 있잖아요.

사용 방법:

# application-dev.yml (개발용)
spring:
  datasource:
    url: jdbc:h2:mem:testdb
logging:
  level:
    root: DEBUG

# application-prod.yml (운영용)
spring:
  datasource:
    url: jdbc:mysql://prod-server:3306/mydb
logging:
  level:
    root: WARN

Profile 활성화는 spring.profiles.active=dev 또는 --spring.profiles.active=prod로 할 수 있습니다.

7. Spring Boot Actuator란 무엇인가요?

Actuator는 애플리케이션의 상태를 모니터링하고 관리할 수 있는 기능을 제공하는 라이브러리입니다. 운영 환경에서 서비스 상태를 확인하거나 문제를 진단할 때 유용해요.

주요 엔드포인트:

  • /actuator/health: 애플리케이션 상태 확인
  • /actuator/metrics: 메모리, CPU 등 메트릭 정보
  • /actuator/info: 애플리케이션 정보
  • /actuator/env: 환경 변수 정보
  • /actuator/loggers: 로그 레벨 동적 변경

병원의 건강검진처럼 서비스의 건강 상태를 체크할 수 있는 도구라고 생각하면 됩니다.

8. Bean Validation은 어떻게 사용하나요?

Bean Validation은 객체의 데이터 유효성을 검증하는 기능입니다. Spring Boot에서는 spring-boot-starter-validation으로 쉽게 사용할 수 있어요.

public class User {
    @NotBlank(message = "이름은 필수입니다")
    private String name;
    
    @Email(message = "올바른 이메일 형식이 아닙니다")
    private String email;
    
    @Min(value = 0, message = "나이는 0 이상이어야 합니다")
    private int age;
}

@PostMapping("/users")
public ResponseEntity<User> createUser(@Valid @RequestBody User user) {
    // 유효성 검증 실패 시 자동으로 400 에러 반환
    return ResponseEntity.ok(userService.save(user));
}

9. Spring Boot에서 예외 처리는 어떻게 하나요?

Spring Boot에서는 @ControllerAdvice와 @ExceptionHandler를 사용해서 전역 예외 처리를 할 수 있습니다.

@ControllerAdvice
public class GlobalExceptionHandler {
    
    @ExceptionHandler(IllegalArgumentException.class)
    public ResponseEntity<ErrorResponse> handleIllegalArgument(IllegalArgumentException e) {
        ErrorResponse error = new ErrorResponse("INVALID_ARGUMENT", e.getMessage());
        return ResponseEntity.badRequest().body(error);
    }
    
    @ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorResponse> handleGeneral(Exception e) {
        ErrorResponse error = new ErrorResponse("INTERNAL_ERROR", "서버 오류가 발생했습니다");
        return ResponseEntity.status(500).body(error);
    }
}

10. Spring Boot 테스트는 어떻게 작성하나요?

Spring Boot는 다양한 테스트 도구를 제공합니다.

통합 테스트:

@SpringBootTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class UserServiceIntegrationTest {
    
    @Autowired
    private UserService userService;
    
    @Test
    void shouldCreateUser() {
        User user = new User("테스트", "test@example.com");
        User saved = userService.save(user);
        
        assertThat(saved.getId()).isNotNull();
        assertThat(saved.getName()).isEqualTo("테스트");
    }
}

웹 레이어 테스트:

@WebMvcTest(UserController.class)
class UserControllerTest {
    
    @Autowired
    private MockMvc mockMvc;
    
    @MockBean
    private UserService userService;
    
    @Test
    void shouldReturnUser() throws Exception {
        given(userService.findById(1L))
            .willReturn(new User("테스트", "test@example.com"));
        
        mockMvc.perform(get("/users/1"))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.name").value("테스트"));
    }
}

슬라이스 테스트:

  • @WebMvcTest: 웹 레이어만 테스트
  • @DataJpaTest: JPA 레이어만 테스트
  • @JsonTest: JSON 직렬화/역직렬화 테스트

핵심 정리

Spring Boot는 단순히 편의성만 제공하는 것이 아니라, 현대적인 애플리케이션 개발에 필요한 모든 기능을 통합해서 제공하는 플랫폼입니다. 자동 설정의 원리를 이해하고, 각 기능을 언제 어떻게 사용해야 하는지 아는 것이 중요해요.

면접에서는 단순히 "어떻게 사용하는가"보다는 "왜 이런 방식으로 동작하는가"를 물어보는 경우가 많습니다. 내부 동작 원리를 이해하고 실제 프로젝트에서 어떻게 활용했는지 경험을 바탕으로 설명할 수 있도록 준비하세요.

728x90
반응형