스프링 프레임워크(Spring Framework)는 자바 플랫폼을 위한 애플리케이션 프레임워크로,
주로 엔터프라이즈 애플리케이션 개발에 사용됩니다.
스프링은 개발자들이 복잡한 애플리케이션을 효율적으로 개발할 수 있도록 다양한 기능과 지원을 제공합니다.
특히, 의존성 주입(DI), 관점 지향 프로그래밍(AOP), MVC 패턴 등을 통해
애플리케이션의 유연성, 테스트 용이성, 유지보수성을 높여줍니다.
이번 포스팅에서는 스프링 프레임워크의 주요 개념과 그 활용 방법을 상세히 설명합니다.
스프링 프레임워크의 주요 기능
- DI(Dependency Injection, 의존성 주입)
- DI는 객체 간의 의존성을 외부에서 주입하는 방식으로, 코드의 결합도를 낮추고 유연성과 테스트 용이성을 향상시킵니다.
- 예를 들어, 하나의 객체가 다른 객체를 필요로 할 때, 직접 생성하지 않고, 외부에서 객체를 주입받도록 합니다.
- 스프링에서 DI 방식은 생성자 주입, 세터 주입, 필드 주입 등이 있습니다.
- AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)
- AOP는 공통적인 기능(예: 로깅, 트랜잭션 관리 등)을 비즈니스 로직과 분리하여 코드의 중복을 줄이고, 재사용성을 높입니다.
- 예를 들어, 트랜잭션 관리나 보안 처리를 한 곳에서 관리하고, 핵심 비즈니스 로직은 별도의 코드로 유지합니다.
- MVC(Model-View-Controller)
- 스프링 MVC는 웹 애플리케이션을 구조화하는 데 사용되는 아키텍처로, 웹 요청을 처리하는 로직을 컨트롤러가 담당하고, 뷰는 사용자에게 결과를 보여줍니다.
- 이는 코드의 응집도를 높이고, 변경에 대한 유연성을 제공하는 디자인 패턴입니다.
- JDBC(Java Database Connectivity)
- 스프링은 JDBC를 통해 데이터베이스에 접근할 수 있는 간편한 방법을 제공합니다. 스프링의 JDBC 템플릿을 사용하면 데이터베이스와의 연결, 쿼리 실행 등을 간소화할 수 있습니다.
스프링 프레임워크 구성 모듈
스프링은 여러 개의 모듈로 구성되어 있으며, 각 모듈은 특정 기능을 제공합니다.
- 스프링 코어(Core): 핵심 기능을 제공하는 모듈로, IoC(제어의 역전) 및 DI(의존성 주입)를 담당합니다.
- 스프링 AOP: AOP 기능을 제공하여 공통 기능을 모듈화합니다.
- 스프링 데이터: 데이터 접근을 단순화하는 기능을 제공합니다. JDBC, JPA, MyBatis와 같은 다양한 데이터베이스 연동을 지원합니다.
- 스프링 MVC: 웹 애플리케이션을 위한 MVC 아키텍처를 제공합니다.
- 스프링 부트(Spring Boot): 스프링 애플리케이션을 빠르게 개발할 수 있도록 지원하는 모듈로, 설정을 최소화하고 내장 서버를 제공합니다.
XML 설정 및 스프링 컨테이너
스프링에서는 XML 파일을 통해 객체를 설정하고 의존성을 주입할 수 있습니다.
스프링 컨테이너는 객체를 생성하고, 객체 간의 의존성을 관리하는 역할을 합니다. 이 객체들을 빈(Bean)이라고 하며, 빈은 스프링 컨테이너에 의해 관리됩니다. 스프링에서 주요한 IoC 컨테이너는 BeanFactory와 ApplicationContext가 있습니다.
XML 설정 예시
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 빈 정의: Chef -->
<bean id="chef" class="cohttp://m.example.Chef" />
<!-- 빈 정의: Hotel -->
<bean id="hotel" class="cohttp://m.example.Hotel">
<constructor-arg ref="chef" />
</bean>
</beans>
자바 클래스 예시
// Chef.java
package com.example;
public class Chef {
// Chef 관련 코드
}
// Hotel.java
package com.example;
public class Hotel {
private Chef chef;
// 생성자 주입
public Hotel(Chef chef) {
this.chef = chef;
}
// Hotel 관련 코드
}
Main 클래스에서 스프링 컨테이너 사용하기
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
// 스프링 컨테이너 초기화
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 빈 가져오기
Hotel hotel = context.getBean("hotel", Hotel.class);
// 빈 사용
hotel.someMethod();
}
}
스프링 + JSP
스프링 프레임워크는 JSP(JavaServer Pages)를 사용하여 동적 웹 페이지를 생성하고, MVC 아키텍처와 함께 사용됩니다. 스프링은 DispatcherServlet을 사용하여 클라이언트의 요청을 처리하고, ModelAndView를 반환하여 뷰를 렌더링합니다.
스프링 MVC 흐름
- 요청 처리: 클라이언트의 요청이 DispatcherServlet에 전달됩니다.
- 핸들러 매핑: DispatcherServlet은 HandlerMapping을 사용해 요청 URL에 맞는 컨트롤러를 찾습니다.
- 핸들러 실행: HandlerAdapter가 해당 컨트롤러를 실행하여 요청을 처리합니다.
- 뷰 선택: ViewResolver가 처리 결과를 표시할 뷰를 선택합니다.
- 응답 생성: 선택된 뷰가 최종 응답을 생성하여 브라우저로 반환합니다.
Spring Boot와 Spring Legacy
- Spring Boot: 스프링 프레임워크를 더 쉽게 사용할 수 있도록 도와주는 도구입니다. 설정을 최소화하고, 내장 서버를 통해 애플리케이션을 빠르게 실행할 수 있습니다.
- Spring Legacy: 스프링 프레임워크의 초기 버전으로, XML 기반 설정을 많이 사용합니다. Spring Boot와 비교하면 설정이 복잡하고, 기본적인 설정을 다루기 위해 많은 작업이 필요합니다.
스프링 프로젝트 설정
Maven Project 생성
스프링 프레임워크를 사용할 때 Maven을 이용하여 의존성 관리를 쉽게 할 수 있습니다. pom.xml 파일에 필요한 라이브러리를 선언하면, Maven이 자동으로 필요한 라이브러리를 다운로드하고 프로젝트에 포함시킵니다.
pom.xml 예시:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
Maven은 프로젝트 관리 및 빌드 도구로, 라이브러리 관리, 자동화된 빌드, 테스트 실행 등을 지원합니다.
IoC(제어의 역전)와 DI(의존성 주입)
- IoC (Inversion of Control): 애플리케이션의 흐름을 개발자가 아니라 스프링 컨테이너가 제어합니다. 객체의 생명 주기와 의존성 관리가 컨테이너에 의해 이루어집니다.
- DI (Dependency Injection): 객체가 필요한 의존성을 스프링 컨테이너가 주입하는 방식입니다. DI는 IoC의 한 형태로, 개발자가 객체를 직접 생성하지 않고 외부에서 주입받습니다.
어노테이션을 이용한 의존성 주입
스프링에서는 XML 설정 외에도 어노테이션을 이용해 의존성 주입을 설정할 수 있습니다.
- @Autowired: 필드, 생성자, 세터 메서드에 사용하여 빈을 자동으로 주입합니다.
@Autowired private Chef chef;
- @Qualifier: 동일한 타입의 빈이 여러 개 있을 때, 특정 빈을 선택하여 주입할 수 있습니다.
@Autowired @Qualifier("specificChef") private Chef chef;
스프링 프레임워크는 자바 애플리케이션 개발에서 가장 강력한
도구 중 하나입니다. DI, AOP, MVC 패턴을 통해 애플리케이션을 구조화하고 유연성, 유지보수성, 테스트 용이성을 극대화할 수 있습니다. 이를 통해 엔터프라이즈 애플리케이션부터 간단한 웹 애플리케이션까지 다양한 프로젝트에서 활용할 수 있습니다.
스프링은 또한 Spring Boot를 통해 설정의 복잡성을 최소화하고 빠르게 애플리케이션을 구축할 수 있는 기능을 제공하므로, 최신 애플리케이션 개발에서 핵심적인 역할을 합니다.
'🗄️ Backend > Spring' 카테고리의 다른 글
Spring Boot 기초: 웹 애플리케이션 설정 (0) | 2024.11.10 |
---|---|
HikariCP, MyBatis를 활용한 데이터베이스 연결 풀 설정 및 최적화 (1) | 2024.11.10 |
스프링 프레임워크에서 Redirect, Request, Response 처리 및 서비스 계층 구현 (8) | 2024.11.09 |