You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Spring Framework는 **자바 애플리케이션 개발을 위한 오픈 소스 프레임워크**로,
**IoC와 DI를 기반으로 객체 지향 설계를 지원**합니다.
웹 애플리케이션 개발, 트랜잭션 관리, 데이터 액세스 등 다양한 기능을 제공합니다.
Spring Boot와 Spring Framework의 차이점을 설명해주세요.
Spring Boot는 Spring Framework의 확장판으로,
자동 설정, 내장 서버, 빠른 애플리케이션 구동을 제공합니다.
**Spring Framework는 더 세밀한 설정과 복잡한 설정을 요구**하지만,
**Spring Boot는 이를 간소화하여 빠르게 실행**할 수 있게 합니다.
Spring MVC에 대해 설명해주세요.
Spring MVC는 **웹 애플리케이션에서 HTTP 요청을 처리하는 프레임워크**입니다.
**Model**, **View**, **Controller** 세 가지 컴포넌트를 사용하여 요청을 처리하고,
사용자 요청을 적절히 분리하여 관리합니다.
MVC는 어떠한 흐름으로 요청을 처리하는지 설명해주세요.
사용자가 요청하면, **DispatcherServlet**이 **Controller**로 전달합니다.
**Controller**는 비즈니스 로직을 처리하고, **Model**을 **View**에 전달합니다.
**View**는 화면을 렌더링해 사용자에게 응답을 반환합니다.
제어의 역전(IoC, Inversion of Control)에 대해 아는대로 설명해주세요.
IoC는 객**체 생성과 관리의 제어를 개발자가 아닌 컨테이너가 담당하는 개념**입니다.
Spring에서는 IoC 컨테이너가 **객체의 생명 주기를 관리하고, 필요한 객체를 주입**합니다.
의존성 주입(DI, Dependency Injection)에 대해 설명해주세요.
DI는 **객체 간의 의존 관계를 외부에서 주입하는 방식**입니다.
Spring에서는 IoC 컨테이너가 **의존성을 주입해 결합도를 낮추고, 코드의 유연성을 높입**니다.
Annotation에 대해 설명해주세요.
Annotation은 **메타데이터를 정의하여 클래스나 메서드에 추가 정보를 제공하는 방법**입니다.
Spring에서는 `@Autowired`, `@Service`, `@Controller` 등의
Annotation을 사용하여 **의존성 주입 및 컴포넌트 스캔 등을 처리**합니다.
POJO란 무엇인가요?
POJO는 **Plain Old Java Object**의 약자로,
특별한 라이브러리나 규칙에 의존하지 않는 순수한 자바 객체를 의미합니다.
보통 getter, setter, 생성자 등을 가진 데이터 객체를 뜻합니다.
Lombok 라이브러리에 대해 알고 있나요? 알고 있다면 롬복이 만드는 메소드들이 생성되는 시점은 언제인가요?
Lombok은 코드에서 **반복되는 작업을 줄여주는 라이브러리**로,
`@Getter`, `@Setter`, `@ToString` **등을 자동으로 생성**합니다.
이 메서드는 **컴파일 시점에 생성**됩니다.
Spring의 싱글톤 패턴에 대해 설명해주세요.
Spring은 기본적으로 **싱글톤 스코프를 사용**하여,
**애플리케이션에서 동일한 객체가 여러 번 생성되지 않도록** 합니다.
이를 통해 **성능을 최적화하고, 메모리 사용을 효율적으로 관리**합니다.
JPA N + 1 문제와 발생하는 이유 그리고 해결하는 방법을 설명해주세요.
JPA의 N+1 문제는 **연관된 엔티티를 조회할 때, 하나의 쿼리로 모든 데이터를 불러오지 않고,
추가적인 쿼리가 실행되는 문제**입니다.
이를 해결하려면 **FetchType.LAZY** 대신 **FetchType.EAGER**를 사용하거나,
**JPQL**에서 `JOIN FETCH` 를 사용하여 한 번의 쿼리로 데이터를 불러올 수 있습니다.
VO와 BO, DAO, DTO에 대해 설명해주세요.
- **VO(Value Object)**: 값 객체로, 상태를 변경하지 않는 객체.
- **BO(Business Object)**: 비즈니스 로직을 처리하는 객체.
- **DAO(Data Access Object)**: 데이터베이스와의 상호작용을 담당하는 객체.
- **DTO(Data Transfer Object)**: 데이터를 전송하기 위한 객체, 주로 계층 간 데이터 전송에 사용됩니다.