240412 TIL #371 Spring 면접 복습 #1

김춘복·2024년 4월 12일
0

TIL : Today I Learned

목록 보기
371/571

Today I Learned

오늘은 면접 질문들을 복습했다. 그 중에서 스프링 관련 질문들을 정리해본다.


Q. 스프링에서의 주요 테스트 라이브러리에 대해 설명해주세요

스프링에서 주요 테스트 라이브러리는 JUnit과 Mockito가 있습니다.

JUnit은 자바에서 가장 널리 사용되는 테스트 프레임워크입니다. 스프링에선 JUnit을 이용해 단위, 통합 테스트를 작성할 수 있습니다. @Test 어노테이션을 사용해 메서드를 테스트 케이스로 지정하고 @Before, @After 같은 어노테이션을 이용해 테스트 전후 세팅을 할 수 있습니다.

Mockito는 Java에서 Mock 가짜 객체를 생성해 사용할 수 있도록 해주는 라이브러리입니다. Mockito를 사용하면 실제 객체 대신 가짜 객체를 이용해 의존성을 주입하고, 이를 통해 단절된 상태의 단위 테스트를 가능하게 해 의존성 관리를 더 쉽게할 수 있습니다. 스프링에선 특히 서비스나 레포지토리와 같은 컴포넌트간의 의존성을 테스트 하기위해 쓰입니다.


Q. 스프링 부트의 장점은 무엇이며, 어떻게 프로젝트의 구성 및 설정을 단순화시키는지 설명해주세요.

스프링부트는 스프링 프로젝트를 빠르고 쉽게 개발할 수 있게 해줍니다.
기본 설정을 자동으로 제동해서 개발자가 별도의 설정을 하지 않아도 된다는 점,
별도의 서버 설치 없이도 내장 tomcat 서버를 통해 애플리케이션을 빠르게 실행할 수 있다는 점,
스프링 부트 스타터를 통해 의존성을 쉽게 추가할 수 있다는 점이 장점이며 이런 장점을 통해 프로젝트 구성 및 설정을 단순화 시켜 개발 생산성을 높입니다.


Q. 스프링 프레임워크의 핵심 기능은 무엇이며, 어떻게 사용되는지 설명해주세요.

첫번째는 IoC 제어의 역전입니다. 스프링에선 개발자가 객체의 생명주기를 관리하지 않고, 스프링 컨테이너가 객체의 생성과 관리를 담당합니다. IoC는 DI 의존성 주입을 통해 실현됩니다. 이로 인해 객체간 결합도가 낮아지며, 유연성과 유지 보수성이 향상됩니다.

두번째는 PSA입니다. PSA는 스프링이 서로 다른 기술 스택을 추상화하고 표준화된 인터페이스를 제공하여 이식성을 향상시키는 방법입니다. 클라이언트 코드가 하나의 통합된 API를 통해 서로 다른 백엔드 기술과 상호작용할 수 있게 해줍니다. 예를들어 개발자는 JDBC를 직접 다룰 필요 없이 스프링의 JDBC 추상화 계층을 통해 DB와 상호작용할 수 있습니다.

세번째는 AOP입니다. 스프링은 관점 지향 프로그래밍을 지원해 핵심 비즈니스 로직과 횡단 관심사를 분리합니다. AOP를 이용해 분리된 횡단 관심사는 트랜잭션 관리, 보안, 로깅 등과 같은 부가적인 기능을 모듈화해 중복 코드를 줄여줍니다.


Q. Lazy initialization과 Eager initialization의 차이점은 무엇인가요?

둘은 빈(Bean)의 생성 시점에 따라 차이가 발생합니다.

Lazy initialization은 빈이 실제로 필요한 시점 즉, 처음으로 요청될 때 생성됩니다. 애플리케이션 시작 시점에 모든 빈을 미리 생성하지 않고, 필요한 빈만 생성해 자원을 절약합니다. 하지만 처음 사용될 때 빈을 생성하는 과정에서 지연이 발생할 수 있습니다.

Eager initialization은 반대로 애플리케이션 시작 시점에 모든 빈을 미리 생성합니다. 이는 애플리케이션 시작시간이 길어질 수 있습니다. 시작 시점에 모든 빈이 준비될 필요가 있는 경우에 사용합니다.

profile
Backend Dev / Data Engineer

0개의 댓글