🐢 꼬부기 LV.1 | 개념•기초/💧물대포(핵심개념)

Spring 프레임워크 개념 알아보기

서화 2026. 1. 13. 17:16

✔️프레임 워크란?

프레임 워크란 정해져 있는 큰틀이다

프레임 워크를 아는것이 중요한 점은 기존 레거시 코드를 볼 수 있게 되기때문이다

구조와 원리를 아는 것이야 말로 레거시의 구조를 이해하고 현대적으로 바꾸기 유리하기 때문이다

✔️프레임 워크의 장점

1. 개발자들의 역량이 상향 평준화되는 장점이 있다

프레임 워크는 정해져있는 형식이있기 때문에 어떤 개발자가 사용해도 똑같은 것을 보여준다

2. 정해져 있기때문에 구현 시간이 단축된다

3. 개발 비용의 절감

🔎스프링 프레임 워크 VS 스프링 부트의 차이점

  스프링 프레임 워크 스프링 부트
장점 .xml 설정파일로 세밀한 설정이 가능하다 @ 기반으로 자바코드에서 사용할수 있으며 가독성이 좋다
단점 가독성이 안좋다 적용에 한계가 있으며 @ 사용시 내가 직접 개발해서 사용해야한다

✔️스프링 프레임 워크의 개념

스프링 프레임워크는 자바기반으로 IoC와 AOP를 지원하는 경량의 프레임워크

📌경량이란

POJO 기반으로 이루어진 순수 자바를 말한다

여기서 POJO란 Plain Old Java Object의 줄임말로 순수 자바 객체를 의미한다

public class Member {
    private String name;
}

NOT-POJO의 대표적인 예시가 Servlet으로 파일을 만들었을때 import로 가져와야 하는 값이 있으면 NOT-POJO라고 할수 있다

public class LoginServlet extends HttpServlet

📌AOP란?

Aspect-Oriented Programming의 약자로 관점 지향 프로그래밍이다.
기존에 배운 OOP가 객체 중심의 프로그래밍이라면, AOP는 공통 관심사를 관점 기준으로 분리하여 프로그래밍한다.

결제 기능을 위해 결제 컨트롤러가 존재하고 로그를 찍고 본인확인을 하고 결제를 진행하고 로그를 찍고 마친다

회원 가입과 댓글삭제도 마찬가지로 로그를 찍고 본인확인을 하고 각 기능을 작동하기 위한 컨트롤러가 존재한다

여기까지가 객체지향중심의 프로그래밍이었다면, AOP에서는 반복되는 로직을 각 공통 관심사별로 모아서 관리할수 있다

이 공통 관심사들은 객체의 핵심 로직과 분리된 상태로, 정해진 시점에 적용된다. 

공통 관심사횡단 관심사 (concern) 라고 하는데

  • 본인인증
  • 권한확인
  • 인가
  • 보안
  • 로그
  • 트랜잭션

등에서 주로 사용하고 공통 관심사 / 공통 로직 / 횡단 기능으로 주로 말하는데,
공통 == common == 횡단이 같은 뜻이고
관심사 == 로직 == 기능 == concern이 같은뜻이다

공통관심사Spring이 관리하고 컨트롤러 실행시 어떤 공통 관심사를 어느 시점에 수행할지 설정해 줄 수 있다.

따라서 기존에는 각 기능 마다 있었던 로그와 본인인증과 컨트롤러가 관점에 따라 하나씩만 존재하는 구조로 바뀌게 된다

📌Ioc란?

IoC는 Inversion of Control의 약자로 제어의 역행을 의미한다.

제어의 역행이란 기존에 개발자가 직접 가지고 있던 제어권이 Spring에게 넘어가는 것을 말한다.

즉, 객체의 생성과 관리에 대한 책임을 개발자가 아닌 Spring 컨테이너가 담당하게 된다.

📌 여기서 말하는 제어권이란?

IoC에서 말하는 제어권은 객체의 생성, 관리, 생명주기(Life Cycle)를 의미한다.

기존에는 개발자가 직접 new 키워드를 사용해 객체를 생성했는데 IoC 환경에서는 이 역할을 Spring 컨테이너에게 위임한다.

따라서 개발자는 더 이상 직접 new를 사용하지 않지만, 객체는 여전히 누군가 생성해야 한다.

이 역할을 수행하는 것이 바로 컨테이너(Container)다.

📌 컨테이너란?

컨테이너는 객체를 생성하고, 관리하고, 필요할 때 제공하는 역할을 한다.

이전에 사용했던 서블릿 컨테이너에서는 톰캣이 웹 서버 역할과 동시에 컨테이너 역할을 수행했었다.

Spring에서는 이 컨테이너가 Spring Container로 확장되며, 객체(Bean)의 생성과 관리를 담당한다.

📌 IoC와 클린 코드의 관계

IoC는 클린 코드와 함께 이해하면 장점이 명확해진다.

✔ 결합도(Coupling)

결합도란
A가 변경되었을 때 B도 함께 변경되는 정도를 의미한다.

결합도가 낮을수록 코드는 유연해지고, 유지보수가 쉬워진다.

IoC는 객체 생성을 외부(Spring 컨테이너)에 맡김으로써
객체 간 결합도를 낮추는 방향으로 코드를 작성한다.

✔ 결합도 낮추는 방법

  • 다형성 사용 (인터페이스 기반 설계)
  • 디자인 패턴 활용
    • Factory
    • MVC
    • Template (JDBCUtil 등)
    • Singleton

Spring IoC 컨테이너는이 중 Factory + Singleton 패턴의 역할을 자동으로 수행한다.

📌 Bean과 IoC

Bean은 원래 객체를 의미하는 용어로 Spring에서는 컨테이너가 관리하는 객체를 Bean이라고 한다.

    • Bean = 객체 = POJO
    • 하나의 역할(기능)을 담당
    • DTO, DAO, Util 클래스 등이 Bean이 될 수 있다

Spring 컨테이너는 XML 설정 파일을 기반으로 Bean을 생성하고, 필요할 때 Lookup 방식으로 객체를 제공한다.

✔️ 스프링 프레임 워크 폴더별 설명

java Resources에는 두가지  폴더가 있다
src/main/java는 백단 코드가 들어간다 (컨트롤러랑 모델이 누르는 곳)
src/main/resources는 xml 설정파일이 들어간다

스태틱은 정적인 자원을 넣는공간이다 (html.css,에러페이지 js, 이미지)

properties는 xml과 매우 유사하다 즉 properties도 설정파일이다 
properties와 xml의 차이
properties는 서버에대한 설정파일이다
xml은 컨테이너설정파일이다

템플릿은 웹 정적자원 추가할때 사용하는데 보통은 스태틱을 더 많이 사용한다

src/main에 wepapp에 jsp를 넣는다(프론트단) 위에 있는 스태틱을 안쓰고 여기에 스태틱에 넣을 코드를 넣어도 된다 

pom.xml은 스프링컨테이너 설정파일이고
web.xml = 서블릿 컨테이너(톰캣,웹서버) 설정파일이다