엔터프라이즈용 Java 애플리케이션 개발을 편하게 할 수 있게 해주는 오픈소스 경량급 애플리케이션 프레임워크이다.
IoC(Inversion of Control)란?✏️
우리말로 '제어의 역행'이라고 한다. 프로그램의 제어를 자신이 아닌 다른 곳에 위임하는 것을 말한다. 즉, 컨테이너에 객체 생성과 공급을 위임하는 형태다.
IoC의 특징✏️
👉🏻 IoC에서는 객체가 자신이 사용할 객체를 생성하거나 선택하지 않는다.
👉🏻 객체는 자신이 어떻게 생성되고 어떻게 사용되는지 알 수 없다.
👉🏻 모든 객체는 제어 권한을 위임받은 특별한 객체(컨테이너)에 의해 만들어지고 사용된다.의존 주입✏️
의존 주입(Dependency Injection : DI)은 IoC를 시스템적으로 구현하는 방법으로, 클래스 간의 의존관계를 Bean 설정에 기반해 컨테이너가 자동으로 연결해주는 방식이다.
AOP(Aspect-Oriented Programming)은 관점 지향 프로그래밍이라고도 한다.
관점 지향 프로그래밍이란?✏️
횡단 관심사(Cross-cutting concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적이다.
AOP 장점✏️
👉🏻 코드 자체를 수정하지 않는 대신 기존 코드에 추가 동작인 어드바이스(Advise)를 정의하여 추가된 기능이 실행된다. 어느 코드가 포인트컷(Pointcut)을 통해 수정되는지를 별도로 지정하는 구조를 가지고 있다.
👉🏻 횡단 관심사를 분리하고 포인트컷을 통해 실행하기 때문에 중복 코드를 줄일 수 있다.
횡단 관심사란?✏️
여러 프로그램에 흩어져서 존재하는 공통 기능으로 이해할 수 있다. 대표적으로 인증과 로깅이 있다.
WebMVC는 서블릿과 같이 MVC 패턴 기반의 웹 애플리케이션을 구현할 때 사용하는 모듈이다. 먼저 MVC 패턴에 대해 알아보자.
MVC 패턴이란?✏️
Model-View-Controller의 약어로, 애플리케이션 개발에 사용되는 디자인 패턴이다. 백엔드 기반의 웹 애플리케이션 개발의 기본 모델로 자리잡고 있다.
Model : 모델(Model)은 데이터를 처리하는 영역이다. 일반적으로 데이터베이스와 연동을 위한 DAO(Data Access Object)클래스와 데이터 구조를 표현하는 DO(Data Object) 그리고 엔티티 클래스 등으로 구성되는데, DO 이외에 DTO(Data Transfer Object)를 사용하기도 한다. 모델은 뷰나 컨트롤러에 독립적인 구조로 데이터베이스 처리를 필요로 하는 여러 애플리케이션에서 공유할 수 있다.
View : 뷰(view)는 화면 구성을 담당하는 영역이다. 뷰에서는 데이터를 직접 가져오기보다 주어진 데이터를 출력하는 용도로만 사용하는 것이 바람직하다. 기본적으로 모델, 컨트롤러와의 종속성이 없도록 구현해야 한다.
Controller : 컨트롤러(Controller)는 MVC 패턴의 핵심으로, 모든 사용자 요청의 중심에 위치한다. 사용자 요청은 컨트롤러를 통해 뷰로 전달되어야하며, 컨트롤러는 모델을 통해 데이터베이스와 연동하여 데이터를 처리하고 뷰로 전달한다. 컨트롤러는 특정 뷰를 지정해야하기 때문에 뷰와 종속관계가 발생할 수밖에 없다.
규모 확장고 향후 스프링 프레임워크로의 확장 등을 고려한다면 서블릿 기반의 구현이 권장된다.컨트롤러를 구성하는 방법✏️
👉🏻 사용자 요청마다 컨트롤러를 만드는 것.
👉🏻 특정 모듈 단위로 하나의 컨트롤러 안에서 여러 요청 단위를 구분해 처리하는 것.
👉🏻 프런트 컨트롤러를 따로 두어 모든 요청을 하나의 컨트롤러로 모든 다음 요청에 따라 구현 컨트롤러를 호출하도록 하는 것.WebMVC란?✏️
MVC 패턴 기반의 웹 애플리케이션을 구현할 때 사용하는 모듈이다. 컨트롤러 부분을 제외하면 모델과 뷰는 기존의 코드를 그대로 사용할 수 있을 만큼 유연한 구조를 가지고 있다.
- Model : 기존 코드를 그대로 사용할 수 있으며, 스프링의 JDBCTemplate을 사용해 코드를 간결하게 개선할 수도 있다. Spring Data JPA를 적용할 경우 보다 간편하게 데이터베이스 관련 작업도 처리할 수 있다.
- View : 타임리프, JSP, 프리마커 등 다양한 템플릿 엔진과의 연동을 지원하고 있다. EL과 JSTL 기반이라면 JSP가 구조적으로도 나쁘지 않기 때문에 많은 경우 JSP를 뷰로 사용한다. 하지만 커스텀 태그 기반보다는 HTML 속성 기반으로 동작하는 타임리프가 스프링 개발에 더 효율적이라고 한다.
- Controller : 컨트롤러 구조를 직접 구현할 필요없이 특정 요청에 대한 처리 메서드만 작성하면 된다.
이 외에도 다양한 기능(스케줄링, 메시지 연동, 이메일 발송, 테스트 지원 등)을 제공한다.
스프링을 주도적으로 개발하고 있는 피보탈은 스프링 프레임워크 뿐 아니라 어플리케이션 개발에 필요한 다양한 프로젝트를 진행하고 있다고 한다.
📌 스프링 프로젝트 중 자주 사용되는 것
스프링 데이터✏️
적은 양의 코드로 데이터 연동을 처리할 수 있도록 도와주는 프레임워크이다. JPA, MongoDB, Redis 등 다양한 저장소 기술을 지원한다.
스프링 시큐리티✏️
인증/인가와 관련된 프레임워크로서 웹 접근 제어, 객체 접근 제어, DB · 오픈 ID · LDAP 등 다양한 인증 방식, 암호화 기능을 제공한다.
스프링 배치✏️
로깅/추적, 작업 통계, 실패 처리 등 배치 처리에 필요한 기본 기능을 제공한다.
이 외에도 다양한 프로젝트를 https://spring.io 사이트에서 참고할 수 있다.
- 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 | 최범균님 저