스프링 프레임워크(Spring Framework) 기본 개념과 활용

2024. 11. 9. 23:43·🗄️ Backend/Spring

스프링 프레임워크(Spring Framework)는 자바 플랫폼을 위한 애플리케이션 프레임워크로,
주로 엔터프라이즈 애플리케이션 개발에 사용됩니다.

스프링은 개발자들이 복잡한 애플리케이션을 효율적으로 개발할 수 있도록 다양한 기능과 지원을 제공합니다.

특히, 의존성 주입(DI), 관점 지향 프로그래밍(AOP), MVC 패턴 등을 통해

애플리케이션의 유연성, 테스트 용이성, 유지보수성을 높여줍니다.

이번 포스팅에서는 스프링 프레임워크의 주요 개념과 그 활용 방법을 상세히 설명합니다.

스프링 프레임워크의 주요 기능

  1. DI(Dependency Injection, 의존성 주입)
    • DI는 객체 간의 의존성을 외부에서 주입하는 방식으로, 코드의 결합도를 낮추고 유연성과 테스트 용이성을 향상시킵니다.
    • 예를 들어, 하나의 객체가 다른 객체를 필요로 할 때, 직접 생성하지 않고, 외부에서 객체를 주입받도록 합니다.
    • 스프링에서 DI 방식은 생성자 주입, 세터 주입, 필드 주입 등이 있습니다.
  2. AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)
    • AOP는 공통적인 기능(예: 로깅, 트랜잭션 관리 등)을 비즈니스 로직과 분리하여 코드의 중복을 줄이고, 재사용성을 높입니다.
    • 예를 들어, 트랜잭션 관리나 보안 처리를 한 곳에서 관리하고, 핵심 비즈니스 로직은 별도의 코드로 유지합니다.
  3. MVC(Model-View-Controller)
    • 스프링 MVC는 웹 애플리케이션을 구조화하는 데 사용되는 아키텍처로, 웹 요청을 처리하는 로직을 컨트롤러가 담당하고, 뷰는 사용자에게 결과를 보여줍니다.
    • 이는 코드의 응집도를 높이고, 변경에 대한 유연성을 제공하는 디자인 패턴입니다.
  4. 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 흐름

  1. 요청 처리: 클라이언트의 요청이 DispatcherServlet에 전달됩니다.
  2. 핸들러 매핑: DispatcherServlet은 HandlerMapping을 사용해 요청 URL에 맞는 컨트롤러를 찾습니다.
  3. 핸들러 실행: HandlerAdapter가 해당 컨트롤러를 실행하여 요청을 처리합니다.
  4. 뷰 선택: ViewResolver가 처리 결과를 표시할 뷰를 선택합니다.
  5. 응답 생성: 선택된 뷰가 최종 응답을 생성하여 브라우저로 반환합니다.

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 아키텍처 : Entity, DTO, Repository, Service, Controller 흐름과 활용  (1) 2025.01.28
SpringBoot 비동기(Async) 처리  (6) 2025.01.17
Spring Boot 기초: 웹 애플리케이션 설정  (0) 2024.11.10
HikariCP, MyBatis를 활용한 데이터베이스 연결 풀 설정 및 최적화  (1) 2024.11.10
스프링 프레임워크에서 Redirect, Request, Response 처리 및 서비스 계층 구현  (8) 2024.11.09
'🗄️ Backend/Spring' 카테고리의 다른 글
  • SpringBoot 비동기(Async) 처리
  • Spring Boot 기초: 웹 애플리케이션 설정
  • HikariCP, MyBatis를 활용한 데이터베이스 연결 풀 설정 및 최적화
  • 스프링 프레임워크에서 Redirect, Request, Response 처리 및 서비스 계층 구현
hjwjo
hjwjo
백엔드 및 풀스택 개발에 관심 있는 초보 개발자의 개발 블로그입니다.
  • hjwjo
    Jeongwoo's Devlog
    hjwjo
  • 전체
    오늘
    어제
    • Devlog
      • 🗄️ Backend
        • Java
        • Spring
        • JPA
        • SQL
        • JSP
        • AWS
        • GCP
        • Linux
        • GitHub
        • ML
        • Security
      • 🖥️ Frontend
        • React
        • CSS
      • 🏅 Project
        • Hackathon
        • Team Project
      • 📊 Algorithm
        • BOJ
      • 📜 Certs
        • ADsP
        • SQLD
        • 정보처리기사
      • 📖
        • JavaScript
      • 일상
        • 면접후기
  • 블로그 메뉴

    • 홈
    • Devlog
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    DML
    Spring
    정보처리기사
    java
    쿼리
    springboot
    ADsP
    데이터베이스
    GCP
    자바
    백엔드
    정처기
    스프링
    http
    jsp
    백준
    java기초
    스프링부트
    SQL
    AWS
  • 최근 댓글

  • 최근 글

hjwjo
스프링 프레임워크(Spring Framework) 기본 개념과 활용
상단으로

티스토리툴바