목차
Spring 이란 무엇인가요?
Spring 이란 자바 개발을 편리하게 해주는 오픈소스 프레임워크 입니다.
Spring을 사용하면 트랜잭션 관리, MVC 웹 개발 등 다양한 부가 기능을 활용하여 개발을 편리하게 할 수 있습니다.
Spring Boot 란 무엇인가요?
Spring Boot 란 Spring 기반의 애플리케이션을 빠르고 쉽게 개발할 수 있도록 지원해주는 프레임워크 입니다.
Spring 애플리케이션 개발에 필요한 설정을 최소화하거나 자동화함으로써 개발자가 비즈니스 로직 개발에 집중하게 해줍니다.
주요 기능은 다음과 같습니다.
프로젝트의 필요한 의존성을 관리하고 쉽게 추가할 수 있게 해줍니다.
라이브러리들이 서로 호환되는 버전을 찾아줍니다.
톰캣과 같은 내장 서버를 보유해 별도의 WAS 설치 없이 웹 애플리케이션을 실행할 수 있습니다.
DI 란 무엇인가요?
DI(Dependency Injection) 란 의존성 주입이라는 뜻 입니다.
객체들간의 의존 관계를 외부에서 주입하는 것을 말 합니다.
즉, 클래스 자신이 의존성을 직접 관리하는게 아니라 외부 설정 파일 등을 통해 외부에서 주입받는 것 입니다.
DI를 사용하면 결합도가 낮아지며, 재사용성이 증가합니다.
또한 개발자가 의존성 관리에 대해 신경쓰지 않고 비즈니스 로직 개발에 집중할 수 있습니다.
IoC 란 무엇인가요?
IoC(Inversion of Control) 란 제어의 역전이라는 뜻 입니다.
메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라 외부에서 결정하는 것 입니다.
기존에는 개발자가 프로그램의 흐름과 제어를 담당하여 필요한 모듈이나 객체를 호출하고 작업했습니다.
IoC는 이러한 흐름을 뒤집어 외부 컨트롤러(프레임워크 즉 Spring, Spring boot)가 제어를 관리하며 필요한 시점에 모듈이나 객체를 호출합니다.
IoC 원칙을 적용하면 코드의 전체 흐름에 대해 생각하지 않고 각각의 기능 작업을 할 수 있습니다.
이는 유지보수, 테스트가 쉬워지며 모듈간의 결합도가 낮아집니다.
Spring 도 IoC 원칙을 활용하여 IoC 컨테이너를 제공합니다.
IoC 컨테이너는 객체의 생성과 소멸, 의존성 주입 등을 담당합니다.
이를 통해 개발자들은 복잡한 제어 흐름을 신경쓰지 않고 비즈니스 로직 개발에 집중할 수 있습니다.
AOP 란 무엇인가요?
AOP(Aspect Oriented Programming) 란 관점 지향 프로그래밍이란 뜻 입니다.
관점이란 여러 클래스에 걸쳐 공통적으로 사용되는 기능을 말합니다.
AOP는 이러한 관점을 모듈화해서 재사용성을 높입니다.
AOP를 사용하면 코드의 재사용성이 높아지고 유지보수성 향상됩니다.
개발자들은 핵심 비즈니스 로직 개발에 집중 할 수 있습니다.
AOP의 예시로는 로그 생성, 성능 측정, 에러 핸들링 등이 있습니다.
Servlet 이란 무엇인가요?
Servlet 이란 Java 기반의 동적 웹 페이지를 만들어주는 웹 프로그래밍 기술 입니다.
Servlet은 클라이언트 요청에 따라 동적으로 웹 컨텐츠를 생성하고 반환합니다.
Servlet의 주요 특징 중 하나는 생명주기가 있는 것 입니다.
요청이 올 때 마다 생성, 초기화하고 요청을 처리한 후 해제합니다.
이러한 생명 주기를 통해 자원을 효율적으로 관리하며 웹 애플리케이션의 성능을 올려줍니다.
Dispatcher Servlet 이란 무엇인가요?
Dispatcher Servlet 이란 HTTP 프로토콜로 들어온 요청을 가장 먼저 받아서 적합한 컨트롤러에게 전달해주는 프론트 컨트롤러 입니다.
과거에는 모든 서블릿을 URL 매핑을 위해 web.xml에 등록했습니다.
dispatcher servlet은 해당 애플리케이션에 들어오는 요청을 핸들링하고 공통 작업을 처리했습니다.
이로 인해 모든 서블릿을 web.xml에 등록하지 않아도 되서 코드의 중복성이 줄이고, 요청 처리 과정을 효율적으로 바꿨습니다.
Spring MVC 란 무엇인가요?
Spring MVC 란 Spring 웹 애플리케이션 개발을 위한 프레임워크 입니다.
MVC란 Model, View, Controller를 뜻 하며 이 3가지 요소들로 이루어진 디자인 패턴 입니다.
Spring MVC는 이 패턴을 웹 어플리케이션에 적용한 것으로 각각의 요소들의 역할은 다음과 같습니다.
Model은 데이터와 비즈니스 로직을 처리하는 부분이며 일반적으로 DB와 상호작용을 처리합니다.
View 는 사용자에게 정보를 표시하는 부분 입니다.
Controller 는 사용자 요청을 받아 해당되는 Model에게 작업을 전달하고 그 결과를 View에게 전달하는 부분 입니다.
각 구성 요소들의 역할을 명확히 분리하여 애플리케이션의 유지보수성과 확장성을 향상시킵니다.
또한 서로 독립적으로 개발하고 테스트할 수 있어 개발 효율성을 높여 줍니다.
Spring MVC를 활용하면 사용자에게 효과적으로 응답하는데 도움을 줍니다.
Spring MVC 패턴 흐름에 대해 설명해 주세요.
Spring MVC는 Dispatcher Servlet을 중심으로 동작합니다.
1. 디스패쳐 서블릿이 클라이언트한테 요청을 받습니다.
디스패처 서블릿은 요청을 받아서 적절한 컨트롤러에게 전달하는 역할을 합니다.
2. 핸들러 매핑이 사용자 요청을 처리할 수 있는 적절한 컨트롤러를 찾아줍니다.
이 때, 핸들러를 실행하기 전/후 처리할 것들을 인터셉터로 만듭니다.
3. 디스패처 서블릿은 적절한 컨트롤러에게 요청을 넘깁니다.
컨트롤러는 비즈니스 로직을 처리하고 생겅된 데이터(Model)와 뷰(View)의 정보를 반환합니다.
4. 뷰 리졸버가 컨트롤러가 반환한 뷰 이름을 기반으로 뷰를 찾아내고 뷰에 Model 객체를 전달합니다.
5. 뷰는 Model 객체에 담긴 데이터를 사용해 실제로 사용자에게 보여줄 화면을 생성합니다.
6. 디스패처 서블릿이 생성된 화면을 사용자에게 반환합니다.
MVC1과 MVC2 에 대해 설명해 주세요.
MVC1 은 클라이언트 요청을 JSP 페이지가 받아서 처리합니다.
즉, JSP가 Controller 와 View 두 개의 역할을 합니다.
이 방식의 장점은 개발을 단순화하고 빠르게 할 수 있습니다.
하지만 단점으로 복잡한 애플리케이션에서 코드의 재사용성과 유지보수성이 떨어집니다. 즉 복잡해진다.
MVC2는 클라이언트 요청을 Servlet이 받아서 처리합니다.
즉, Servlet이 Controller 역할을 JSP가 View 역할을 합니다.
Servlet이 사용자 요청을 받아 처리하고, 처리한 결과를 JSP 페이지로 전달해 사용자에게 결과를 보여줍니다.
이러한 방식은 MVC1에 비해 복잡하지만 각 컴포넌트의 역할이 명확히 분리되어 있어 코드의 재사용성과 유지보수성이 높습니다.
스프링 컨테이너의 생명 주기는 어떻게 되나요?
스프링 컨테이너는 애플리케이션의 객체를 생성, 구성, 관리합니다.
이러한 객체들을 빈 이라 부릅니다.
생명주기는 초기화, 사용, 소멸의 순서로 진행됩니다.
초기화
컨테이너가 생성되면 설정 파일에서 지정한 빈 정의를 읽습니다.
빈 정의에 따라 객체를 생성하고 의존성을 주입합니다.
사용
컨테이너가 초기화된 후, 애플리케이션은 컨테이너로부터 필요한 빈을 가져와 사용합니다.
이 때 컨테이너는 빈의 생명주기를 관리하며 빈의 생성, 재사용, 빈 간의 의존성을 관리합니다.
소멸
애플리케이션이 종료될 때 컨테이너는 모든 빈의 생명주기를 마무리 합니다.
Bean 이란 무엇인가요? 어떻게 등록하나요?
Bean이란 스프링 컨테이너가 관리하는 객체 입니다.
빈 등록은 개발자가 작성한 class에 @Component 어노테이션을 붙이는 것으로 이루어 집니다.
@SpringBootApplication 어노테이션에는 @ComponentScan 어노테이션이 있습니다.
이 어노테이션은 @Component가 붙은 class를 탐색하고 어노테이션이 붙은 class를 빈으로 등록합니다.
BeanFactory 와 ApplicationContext의 차이점은 무엇인가요?
BeanFactory는 Bean을 제공하고 관리하는 기본적인 IoC 컨테이너 인터페이스 입니다.
ApplicationContext는 BeanFactory의 확장된 버전입니다.
BeanFactory가 제공하는 모든 기능을 포함하며 그 이상의 기능들을 제공합니다.
다국어 메시지 처리, 이벤트 발행, 리소스 관리 등의 추가 기능을 제공합니다.
다국어 메시지 :
Spring은 웹 사이트에서 다양한 언어를 지원합니다.
예를 들어, 영어 사용자와 한국어 사용자가 같은 웹 사이트를 사용할 때 각각의 언어로 메세지를 보여줍니다.
이벤트 발행 :
Spring에서 어떤 일이 발생했을 때, 그 사실을 다른 코드에 알려주는 기능 입니다.
예를 들어, 새로운 사용자가 등록되는 이벤트가 발생하면 환영 이메일을 보내는 특정 동작을 수행할 수 있습니다.
리소스 관리
Spring에서 파일, 이미지, 설정 파일 등 다양한 유형의 리소스를 쉽게 활용할 수 있도록 돕든 기능 입니다.
예를 들어, 웹 사이트의 이미지 파일을 로드하거나, 애플리케이션 설정 파일을 읽어올 수 있습니다.
Spring Annotation 이란 무엇인가요?
Spring Annotation 이란 클래스, 메소드, 변수 등 코드의 특정 부분에 메타데이터를 추가하는 방법 입니다.
Spring Framework는 이 메타데이터를 해석해 다양한 기능을 부여합니다.
Annotation을 통해 해당 클래스가 어떤 역할을 하는지 정하거나 Bean 주입하기도 하며, 자동으로 getter와 setter를 생성하기도 하는 등 다양한 역할을 수행합니다.
@Controller, @Service, @Repository의 차이점은 무엇일까요?
세 어노테이션은 코드의 역할을 명확히 하고 관리하기 위해 사용합니다.
이 3개의 어노테이션은 수행하는 역할이 다릅니다.
@Controller는 클라이언트 요청을 받고 view를 반환합니다. Http 요청을 받아 적절한 응답을 반환합니다.
@Service 는 비즈니스 로직을 처리합니다. 일반적으로 DAO나 리포지토리에 접근하여 데이터를 조작하는 로직을 담당합니다.
@Repository 는 DB 관리 및 DB CRUD 작업을 처리합니다. 주로 DB에 접근하는 코드를 포함하는 DAO 클래스에 사용합니다.
이 세 어노테이션은 모두 @Component 어노테이션을 상속받아 구현되었으므로 Spring 컨테이너에 의해 자동으로 빈으로 등록됩니다.
이들 어노테이션을 통해 클래스의 역할을 명확히 표시하며 이를 통해 코드의 가독성이 높아지며 유지보수성이 좋아집니다.
@Controller 와 @RestController 의 차이점은 무엇인가요?
두 어노테이션은 모두 웹 요청을 처리하는 컨트롤러 클래스에 사용됩니다.
하지만 두 어노테이션은 수행하는 역할의 차이가 있습니다.
@Controller 는 주로 View를 반환하기 위해 사용합니다.
뷰는 사용자에게 보여주는 페이지로 뷰 리졸버를 통해 뷰를 찾아 랜더링해 반환합니다.
데이터를 반환하고 싶으면 @ResponseBody 어노테이션을 활용해 Json 형태로 데이터를 반환할 수 있습니다.
@RestController는 주로 Json 형태로 데이터를 반환하기 위해 사용합니다.
@RestController는 @Controller와 @ResponseBody 2개의 어노테이션을 합친 것 입니다.
@RestController는 @ResponseBody 없이도 HTTP 응답 본문에 직접 값을 반환할 수 있습니다.
이 어노테이션은 주로 RESTful 웹 서베스를 개발하는데 사용합니다.
DAO, DTO, VO 란 무엇인가요?
DAO(Data Access Object) 란 데이터베이스의 데이터에 접근하기 위한 객체 입니다.
DTO(Data Transfer Object) 란 계층간 데이터 교환을 위한 객체 입니다.
DTO는 보통 각 필드에 대한 getter와 setter 메소드를 포함하는 POJO(Plain Old Java Object) 입니다.
이 객체는 일반적으로 웹 요청의 응답 데이터나 웹 요청을 통해 클라이언트로부터 받은 데이터 등을 나타냅니다.
VO(Value Object) 란 값을 나타내기 위한 객체 입니다.
VO는 불변 객체로 생성 시점에 값을 할당한 뒤로 변경할 수 없습니다.
VO는 주로 단순히 값을 저장하기 위해서 쓰는게 아니라 해당 값이 특정 비즈니스 규칙을 따르기 위해 사용합니다.
예를 들어, 금액을 나타내는 VO는 금액은 음수일 수 없다는 규칙을 강제할 수 있습니다.
이 세가지는 모두 데이터를 다루는 데 사용하지만 각각의 용도와 역할이 조금씩 다릅니다.
DAO는 DB와 상호작용
DTO는 서로 다른 시스템 간의 데이터 전송
VO는 비즈니스 로직에 따른 값을 표현하는데 사용합니다.