memo6759 님의 블로그
2025-11-17(Spring) 본문
1. 프레임워크란?
프레임워크(Framework)는 완성된 프로그램이 아니라,
특정 문제를 해결하기 위해 필요한 공통 기능을 미리 만들어 놓은 미완성 모듈이다.
모든 개발자가 반복해서 만드는 기능들을 미리 만들어 제공한다.
프레임워크가 제공하는 공통 기능들
- DB 연동
- 트랜잭션 처리
- 커넥션풀 관리
- 로그 처리
- 보안 처리
- 다국어(i18n) 지원
- 메시징 처리
개발자는 “시스템 고유 기능”만 개발하면 되고,
나머지 인프라 기능은 프레임워크가 자동으로 처리해 준다.
프레임워크의 특징
- 내부 흐름에 따라 개발자가 작성한 코드를 자동으로 실행
→ 이것을 제어의 역전(IoC: Inversion of Control) 이라고 한다. - 신뢰성 높은 코드를 빠르게 개발 가능
- 개발자 간의 협업·의사소통이 쉬워짐
- 유지보수 시간이 크게 감소함
2. 스프링의 핵심 기능
스프링(SPRING)은 자바 기반의 대표적인 프레임워크이며
다음과 같은 주요 기능을 제공한다.
스프링의 5대 핵심 기능
- IoC / DI 컨테이너
- AOP (관점 지향 프로그래밍)
- 스프링 MVC (웹 프레임워크)
- 스프링 JDBC (DB 접근)
- 트랜잭션 · 커넥션풀 · 스케줄러 등 인프라 기능
스프링은 특히 OOP 설계를 잘 살릴 수 있도록 돕는 프레임워크이다.
3. 스프링의 특징
자바 기반 프레임워크
순수 자바로 작성되어 있고, 자바 객체를 중심으로 개발한다.
OOP 설계를 잘 지원
인터페이스 기반 개발, 느슨한 결합, 유연한 구조를 만들기 쉽게 해준다.
다양한 패턴 내장
싱글톤 패턴, 팩토리 패턴, 프록시 패턴, MVC 패턴 등
IoC 컨테이너 내장
스프링이 모든 객체 생성 → 초기화 → 소멸까지 관리한다.
➡ 이 객체를 스프링에서는 Bean(빈) 이라고 부른다.
➡ 개발자가 new 를 직접 하지 않고 컨테이너에서 받아서 사용해야
스프링이 제공하는 기능(IoC, AOP, DI 등)을 활용할 수 있다.
4. IoC(Inversion of Control) 컨테이너란?
IoC 컨테이너 = 객체의 라이프사이클을 관리하는 관리자
과거에는 개발자가 직접 객체를 new 로 생성·연결·소멸시켰다.
스프링에서는 이 모든 작업을 IoC 컨테이너(ApplicationContext) 가 대신한다.
스프링에서 가장 많이 사용하는 컨테이너:
ApplicationContext는
설정 파일(XML 또는 @Configuration)을 분석해 모든 Bean을 생성하고 DI까지 처리한 후 초기화 한다.
5. DL & DI
1) DL(Dependency Lookup) – 의존성 조회
스프링 컨테이너에 등록된 객체를 직접 “찾아오는” 방식
➡ getBean() 사용
2) DI(Dependency Injection) – 의존성 주입
스프링이 객체를 생성하고,
객체가 필요로 하는 의존 객체를 자동으로 넣어주는 방식
즉,
DI가 자동으로 이루어지려면:
- 스프링 설정파일에서 의존성 관계 등록
- 객체가 의존성을 받을 준비가 돼 있어야 함
- 생성자 주입(Constructor Injection)
- setter 주입(Setter Injection)
DI 방식 (중요)
1) 생성자 주입 (Constructor Injection)
가장 많이 쓰고 가장 안정적인 방식.
public class Player { private Dice dice; public Player(Dice dice) { this.dice = dice; } }
Spring XML:
<constructor-arg ref="dice"/>
2) Setter 주입 (Property Injection)
setter 메서드를 만들어 DI하는 방식.
public void setDice(Dice dice) { this.dice = dice; }
XML:
<property name="dice" ref="dice"/>
마무리
프레임워크와 스프링의 핵심은 단 하나로 요약된다.
“내가 객체를 만드는 것이 아니라, 프레임워크가 생성하고 관리한다.”
프레임워크가 공통 기능을 제공하고
스프링이 객체를 생성 → 연결 → 관리까지 모두 해주므로
개발자는 “비즈니스 로직”에만 집중하면 된다.
'HDC 학습일지' 카테고리의 다른 글
| 2025-11-20(JPA) (0) | 2025.11.20 |
|---|---|
| 2025-11-18(Spring) (0) | 2025.11.19 |
| 2025-11-14(서블릿, jsp 구조 파악, 스프링) (0) | 2025.11.17 |
| 2025-11-13(백엔드 - Servlet) (0) | 2025.11.13 |
| 2025-11-12(React -final) (1) | 2025.11.13 |