Spring Framework

2025. 4. 16. 22:42·SpringBoot
SMALL

Framwork?

 - Frame을 가지고 하는 작업 또는 구조물의 뼈대나 틀을 말한다.

 - SW의 시선으로 바라본다면 비지니스 로직이 빠진 뼈대만 갖춰진 반제품 형태의 애플리케이션이라고 볼 수 있다.

컴퓨터 프로그래밍에서 소프트웨어 프레임워크는 소기의 목적을 달성하거나 복잡한 문제를 해결하고 서술하는 데 사용되는 기본 개념 구조이다. 간단히 뼈대, 골조, 프레임워크라고도 한다.                - 위키백과 -

 

예시 )

파워포인트 [프레임워크] + 발표내용[비즈니스 로직]

전자레인지[프레임워크] + 음식[비즈니스 로직]

 

 

 

Spring Framework

 - 자바 애플리케이션 개발을 위한 경량 framwork

 - 스프링 부트랑 다른 개념인 것을 유의!!

 - 프레임워크는 비즈니스 로직하고는 무관한 귀찮고 어려우며 모듈화를 할 수 있는 일들을 담당한다.

spring + 비즈니스 로직 = 애플리케이션

 

다시 말해서, 개발자는 프레임에 적합한 비즈니스 로직를 공급하는데 집중해야한다.

 - 다만 그만큼 별도의 설정을 해줘야 한다.

 

예시)

JDBC작업

스프링을 몰랐을 때 스프링을 알았을 때
개발자 DB관리, TX처리, 비즈니스로직,JDBC코드 사용, 예외관리 개발자 비즈니스 로직
스프링 X 스프링 DB관리, TX처리, 비즈니스로직,JDBC코드 사용, 예외관리

 

  • DataSource(데이터소스) 설정
    • DB 연결 URL, 사용자명, 비밀번호, 드라이버 클래스를 XML이나 Java Config에 명시.
  • Connection Pool 설정
    • HikariCP, Tomcat Pool 등 어떤 커넥션 풀을 사용할지, 최대/최소 커넥션 수 등을 개발자가 직접 Bean 등록.
  • PlatformTransactionManager(트랜잭션 매니저) 설정
    • JDBC의 경우 DataSourceTransactionManager, JPA나 Hibernate 사용 시 JpaTransactionManager 등을 명시적으로 Bean 등록. ...등

 

개발자는 이런 설정들을 수동으로 해줘야 한다. 

 

 

Spring Boot

 - 스프링 애플리케이션을 개발하는 일종의 템플릿이다.

 - 스프링 부트는 스프링 프레임워크를 더욱 쉽게 사용할 수 있도록 도와주는 확장 도구라고 볼 수 있다.

 - 스프링의 복잡한 설정을 자동화 해주고, 단위 테스트 강화로 프로젝트 안정성 강화 하였다.

 

 

  • Auto Configuration으로 DataSource 자동 등록
    • application.properties 혹은 application.yml에 spring.datasource.url, spring.datasource.username, spring.datasource.password와 같은 프로퍼티만 설정하면, 스프링 부트가 DataSource Bean을 자동으로 생성.
  • 커넥션 풀 자동 설정
    • 프로젝트에 포함된 라이브러리를 보고 HikariCP(기본), Tomcat Pool 등으로 자동 선택 후 풀 사이즈나 타임아웃 값을 기본값으로 설정.
    • 필요하면 spring.datasource.hikari.maximum-pool-size=10 같은 식으로 프로퍼티로만 간단히 수정.
  • 트랜잭션 매니저 자동 등록
    • 데이터 액세스 계층 기술(JDBC, JPA 등)에 맞게 DataSourceTransactionManager나 JpaTransactionManager를 자동으로 Bean 등록.
    • @SpringBootApplication 안에 이미 @EnableTransactionManagement 등이 포함되어 있어, 별도 설정 없이 @Transactional이 동작.

 

 

스프링 부트에서는 스프링에서의 설정들을 자동으로 해준다.

설정 항목 전통 스프링(부트 이전) 스프링 부트
DataSource 설정 XML 또는 Java Config 파일에 데이터베이스 URL, 사용자명, 비밀번호, 드라이버 클래스 등 모든 정보를 직접 명시하여 Bean 등록 필요 application.properties 또는 application.yml에 간단히 프로퍼티만 지정하면, Auto Configuration이 자동으로 DataSource Bean을 생성
커넥션 풀 HikariCP, Tomcat Pool 등 원하는 커넥션 풀을 선택하고, 관련 설정(최대/최소 커넥션 수 등)을 직접 Bean으로 등록 의존성에 포함된 커넥션 풀 라이브러리 기반으로 기본값으로 자동 설정되며, 필요한 경우 프로퍼티로 간편히 수정 가능
트랜잭션 매니저 JDBC의 경우 DataSourceTransactionManager, JPA의 경우 JpaTransactionManager 등을 XML이나 Java Config로 명시적으로 등록 사용 중인 데이터 액세스 기술에 맞게 적절한 트랜잭션 매니저가 자동으로 등록되며, @EnableTransactionManagement와 함께 기본적으로 동작
트랜잭션 AOP 설정 XML <tx:annotation-driven> 또는 Java Config에서 트랜잭션 어드바이저를 직접 설정하여 AOP 기반 트랜잭션 처리를 구성 Auto Configuration에 포함되어 별도의 추가 설정 없이 @Transactional을 통해 자동으로 적용됨
예외 변환 각 기술(JDBC, JPA 등)에 따라 발생한 예외를 직접 처리하거나 변환하는 코드를 구현, 혹은 별도 설정 필요 스프링 부트 스타터에 포함된 예외 변환 계층이 자동으로 작동하여, 일관된 DataAccessException 계층으로 예외를 변환
JdbcTemplate 등 유틸 필요한 경우 JdbcTemplate, NamedParameterJdbcTemplate 등의 Bean을 XML 또는 Java Config 파일에 직접 등록 해당 의존성(spring-boot-starter-jdbc)만 추가하면, 자동으로 유틸 클래스들이 등록되어 바로 DI(의존성 주입)하여 사용 가능
로깅 설정 Log4j, Logback 등의 로깅 프레임워크를 직접 설정하고, SQL 로그 등 필요한 로그 출력 설정을 수동으로 구성 기본 제공되는 로깅 설정과 Auto Configuration을 통해 합리적인 기본 로그 설정이 자동으로 적용되며, 필요 시 프로퍼티로 간단히 조정 가능
테스트 환경 구성 @RunWith(SpringJUnit4ClassRunner.class), @ContextConfiguration 등을 사용하여 별도의 테스트 설정 파일(XML/Java Config) 관리<br/>Mock 객체나 임베디드 DB 등을 직접 설정 필요 @SpringBootTest, @WebMvcTest, @DataJpaTest 등 다양한 테스트 어노테이션 제공<br/>내장된 테스트 지원 스타터(spring-boot-starter-test)를 통해 환경 구성이 자동화됨

 

 

다시 말해서, 개발자는 프레임에 적합한 비즈니스 로직를 공급하는데 더!!!!! 집중해야한다.

 

 

Spring Framework 핵심 특징

다시 스프링으로 돌아와서 스프링 프레임워크의 특징에 대해서 알아보자.

 

 

1. IoC/DI,DL

IoC(제어의 역전)

  • 기존 방식:
    우리가 직접 필요한 객체(예: 서비스, DAO 등)를 new 연산자로 생성하거나 직접 관리함
    예) 자동차를 직접 부품에서 조립
  • IoC 적용 방식:
    "누가 객체를 만들어줄까요?"라는 문제를 외부(컨테이너)에게 맡기는 것
    예) 자동차를 조립하는데 필요한 부품들을 누군가 미리 준비해 놓으면, 조립만 하면 되는 것
    -> 즉, 객체 생성 및 관리의 권한이 개발자에서 컨테이너로 넘어가게 되는 것을 말한다.

 

DI(의존성 주입) - Dependency Injection

  • DI 개념:
    IoC의 한 형태로, 필요한 객체(의존성)를 외부 컨테이너가 "주입"해주는 것
    예) 자동차를 조립할 때, 엔진이나 바퀴 같은 부품이 이미 준비되어 있어, 조립 시에 그냥 "받아다 쓰는" 상황
  • 장점:
    개발자는 "어떻게 부품을 만드는지" 걱정할 필요 없이, 준비된 부품만 사용하면 됩니다.
    -> 그래서 코드가 더 깔끔하고, 관리하기 쉬워집니다.

DL(의존성 조회) - Dependency Lookup

  • DL 개념:
    DI와는 반대로, 필요한 객체를 외부 컨테이너에서 "찾아오는" 방식
    예) 자동차 조립 중에 직접 창고에 가서 부품을 가져오는 방법
    • DI와의 차이:
      • DI는 누군가(컨테이너)가 미리 부품(객체)를 주입해 주는 방식
      • DL은 개발자가 필요할 때 직접 부품(객체)을 찾아서 사용하는 방식
  • 단점: DL 방식은 코드가 컨테이너에 의존하게 되어, 결합도가 높아지고 테스트나 유지보수가 어려워질 수 있습니다.

 

2. AOP( Aspect Oriented Programming관점지향프로그래밍)

- AOP는 문제를 바라보는 관점을 기준으로 프로그래밍하는 기법이다.

- 이는 문제를 해결하기 위한 핵심관심 사항과 전체에 적용되는 공통관심 사항을 기준으로 프로그래밍 함으로서 공통 모듈을 여러 코드에 쉽게 적용할 수 있도록 한다.

 

예시)

금융사이트

  • 핵심 관심 사항: 금융 거래의 비즈니스 로직에 집중 (예: 예금 조회, 거래, 이체)
  • 공통 관심 사항: 로깅, 보안, 트랜잭션 관리 등 여러 기능에 공통으로 적용되는 부가 로직을 한 곳에 모아 관리

이렇게 분리하면, 개발자가 핵심 비즈니스 로직 작성에 집중할 수 있고, 나중에 로깅이나 보안 정책이 변경되어도 공통 관심 사항의 코드만 수정하면 되어 유지보수성이 향상된다.

 

 

3. PSA(Portable Service Abstraction : 이식 가능한 서비스 추상화)

- 어렵고 복잡한 개념을 특정 환경에 종속되지 않고 쉽게 사용할 수 있게 추상화된 레이어 제공

- 스프링이 제공하는 주요 특징 중 하나로, 다양한 환경과 기술에서 일관성 있게 사용할 수 있는 “추상화 레이어(Abstraction Layer)”를 의미

  • 예) 데이터 접근 계층의 PSA를 통해, JPA, MyBatis, JDBC 등 서로 다른 기술을 사용해도 트랜잭션 처리나 예외 변환 등은 스프링이 동일한 방식으로 지원한다.

 

 

4. POJO (Plain Old Java Object)

 

- “특정 프레임워크나 기술에 종속되지 않은 순수 자바 객체”를 의미한다.

- 즉, 스프링 같은 프레임워크가 제공하는 특정 인터페이스나 클래스를 반드시 상속받거나, 특정 애노테이션을 강제적으로 달 필요가 없는, 일반적인 자바 코딩 규칙에 따라 작성한 객체다.

- DI, AOP, PSA를 하기 위해 이제까지 하던 대로 그냥 평범하게 객체를 만들면 된다.

 

쉽게 말해서, 스프링 프레임워크가 다 지원해주니깐 우리는 괜히 어렵게 구현할 필요없이 수순 자바를 하면 되는 것이다.

 

스프링 프레임워크가 내부적으로 POJO에 대해 필요한 기능을 자동으로 적용해 주기 때문에, 개발자가 POJO 객체 자체를 작성할 때 특별한 제약 없이 작성할 수 있다는 점을 강조한 것입니다.

 

728x90

'SpringBoot' 카테고리의 다른 글

DI(Dependency Injection) - (3)  (0) 2025.04.18
DI(Dependency Injection) - (2)  (0) 2025.04.18
DI(Dependency Injection) - (1)  (1) 2025.04.18
세션과 JWT의 차이  (1) 2025.01.12
SpringBoot 잡동사니  (1) 2025.01.12
'SpringBoot' 카테고리의 다른 글
  • DI(Dependency Injection) - (2)
  • DI(Dependency Injection) - (1)
  • 세션과 JWT의 차이
  • SpringBoot 잡동사니
알파 조
알파 조
공부 일기장
  • 알파 조
    Blue Ocean
    알파 조
  • 전체
    오늘
    어제
    • 분류 전체보기 (93)
      • Algorithm (9)
      • Data Structure (3)
      • Python (7)
      • 컴퓨터 구조 요약 (6)
      • 몰입 교육 (7)
      • JavaScript (1)
      • Vue.js (7)
      • 코딩테스트 연습 (40)
      • SpringBoot (9)
      • 데이터베이스 (2)
  • 블로그 메뉴

    • Home
    • Computer structure
    • Algorithm
    • SpringBoot
    • Vuejs
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Git
    항해99
    MSA 기초
    티스토리챌린지
    오블완
    잔디 기부
    Udemy#Python#Bootcamp#Object and Data Structure Basics
    리그오브레전드 #롤 #LOL #60프레임 버그 #GPU #윈도우10 #롤 60프레임 고정
    잔디 기부 캠페인
  • hELLO· Designed By정상우.v4.10.3
알파 조
Spring Framework
상단으로

티스토리툴바