본문 바로가기
CS

Spring

by soohykim 2025. 6. 27.
728x90
반응형

🎯 Spring Framework vs. Spring Boot 차이


개념 자바 기반의 엔터프라이즈 애플리케이션 프레임워크 Spring 기반 애플리케이션을 쉽게 만들 수 있게 도와주는 도구 (Spring의 확장판)
설정 방식 XML 또는 Java Config로 수동 설정 자동 설정(Auto Configuration) 제공
구동 방식 외부 WAS 필요 (예: Tomcat, WAS에 배포) 내장 Tomcat 포함, JAR 파일로 바로 실행 가능 (java -jar)
설정 복잡도 설정 파일 매우 복잡, 초기 설정 어려움 최소 설정만으로 구동 가능 (application.yml, application.properties)
의존성 관리 의존성 직접 관리 (버전 충돌 주의) Spring Boot Starter로 관련 라이브러리 일괄 관리
목적 유연한 개발을 위한 프레임워크 설정과 배포를 단순화하여 빠른 개발 가능
배포 방식 보통 WAR 파일로 WAS에 배포 JAR 파일 자체 실행, 클라우드/도커 친화적
기능 추가 기능을 하나씩 직접 설정 Spring Boot Starter로 빠르게 추가 (예: spring-boot-starter-web)
 

 

"Spring은 자바 엔터프라이즈 애플리케이션의 핵심 프레임워크고, Spring Boot는 Spring을 더 쉽게 사용할 수 있게 해주는 도구라고 이해하고 있습니다. Spring Boot는 설정 자동화, 내장 서버, Starter 패키지를 통해 초기 설정과 배포를 훨씬 단순화할 수 있어 빠른 개발과 클라우드 환경에 유리합니다."

 

 

 

🔍 현재 프로젝트가 Spring Boot인지 확인하는 법

🔗 1. 프로젝트 구조에서 확인하기

  • 루트 디렉토리에 이런 파일이 있다면 → Spring Boot

→ 특히 application.yml 또는 application.properties 파일로 설정을 관리한다면 Spring Boot일 가능성이 매우 높아요.

 

🔥 2. 메인 클래스에서 확인하기

  • 아래처럼 메인 메서드에 SpringApplication.run()이 있다면 → Spring Boot
  • ❌ Spring Boot가 아닌 경우 이런 메인 클래스가 아예 없고, 외부 Tomcat 같은 WAS에 올립니다.

 

🔍 3. 의존성에서 확인하기 (build.gradle / pom.xml)

  • Spring Boot일 경우
 
  • ❌ 만약 spring-boot-starter-XXX가 없고, 그냥 spring-core, spring-context, spring-web 등만 개별로 선언되어 있다면 → Spring Framework (Boot 아님)

 

🏃 4. 실행 방식으로 확인하기

  • Spring Boot
    • 터미널에서 java -jar 어플리케이션.jar 로 바로 실행 가능
    • 내장 Tomcat 내장
  • Spring Framework
    • WAR 파일 만들어서 외부 WAS (예: WebLogic, Tomcat)에 올려서 실행

 

🛑 5. 외부 WAS 사용 여부로도 판단 가능

  • Boot → 내장 Tomcat 사용 (WAS 불필요)
  • Framework → 보통 WebLogic, JBoss, Tomcat 등의 외부 WAS 필요

 

✅ 최종적으로 판단할 수 있는 질문들

  • 배포 파일이 WAR였다 → Spring Framework
  • 배포 파일이 JAR이고 터미널에서 java -jar로 실행했다 → Spring Boot
  • 외부 WAS(WebLogic, JEUS)에 올렸다 → Spring Framework
  • 내장 Tomcat으로 구동했다 → Spring Boot

 

메인 클래스 없음 있음 (SpringApplication.run)
실행 방식 WAR → WAS JAR 자체 실행 가능
설정 web.xml, servlet-context.xml 등 application.yml/properties
의존성 spring-core, spring-web 등 spring-boot-starter-XXX
 

 

🔍 금융권이 Spring Framework + 외부 WAS를 선호하는 이유

 

1. ✅ 안정성 최우선

  • 금융 시스템은 하루 수십~수백만 건의 거래 처리
  • 장애 발생 시 손해액이 수억~수천억까지 발생 가능
  • 검증된 외부 WAS (WebLogic, JEUS, WAS 등)는 수년간 금융 시스템에서 안정성이 입증됨

2. ✅ 운영 규제 및 감사 대응

  • 금융당국(금감원, 금융위) 규제 대응
  • 로그, 세션, 트랜잭션 관리, 장애 복구 등 모든 운영 정책이 외부 WAS 기준으로 맞춰져 있음
  • 변경 시 내부·외부 감사 및 인증(전자금융감독규정 등) 대상

3. ✅ 장애 대응 및 이중화 구조

  • WAS는 자체적으로 클러스터링, 세션 스티키, 장애조치(HA), 이중화(Active-Standby) 기능을 제공
  • Spring Boot는 기본적으로 내장 Tomcat 기반이라 WAS 수준의 이중화는 직접 구현하거나 별도 인프라가 필요함

4. ✅ Legacy 인프라와의 높은 호환성

  • 기존 인사, 회계, 정산, 배치 등 레거시 시스템과의 연동이 WAS 환경 기준으로 구축됨
  • 새로운 아키텍처로 전환하면 전체 시스템 수정이 필요 → 리스크 큼

5. ✅ 보안 및 인증 체계

  • 외부 WAS는 자체적으로 SSL 종료, 접근제어, IP 화이트리스트, 인증서 관리 등 고도화된 보안 기능 지원
  • 금융권은 인증과 보안 기준이 일반 기업 대비 훨씬 엄격

6. ✅ 장기 유지보수 및 베테랑 인력 체계

  • 금융권 시스템은 한번 구축하면 보통 10년 이상 운영
  • 현재도 많은 금융 IT 인력이 WebLogic, JEUS, WebSphere 환경에 익숙함
  • Spring Boot 기반 클라우드 네이티브 환경은 최근 몇 년 사이에야 보급되기 시작

🚩 시스템 종류별 구조

코어 시스템 (계정계, 리스크, 퇴직연금 등) Spring Framework + 외부 WAS (WebLogic, JEUS)
신규 서비스 (앱 API, 모바일, 마이크로서비스) Spring Boot + 클라우드 (AWS, GCP, Azure) or 쿠버네티스

 

 

 

 

 


🔷 Spring MVC

 

🔸 개념

  • Model, View, Controller 패턴을 기반으로 하는 웹 애플리케이션 프레임워크입니다.
  • 웹 클라이언트의 요청을 처리하고, 비즈니스 로직을 수행하며, 최종적으로 화면(View) 혹은 데이터(API)를 응답합니다.

 

🔸 Spring MVC 아키텍처 흐름도

 
[클라이언트]
↓ (HTTP 요청)
[DispatcherServlet] (Front Controller)

[HandlerMapping] → 어떤 Controller로 보낼지 매핑
[Controller] → 요청 처리 (비즈니스 로직 호출)
[Service] → 실제 비즈니스 로직 처리
[DAO/Repository] → DB와 통신
[Model] → 처리 결과 데이터
[ViewResolver] → 어떤 화면(View)으로 보여줄지 결정
[View] (HTML, JSP, JSON 등)
↓ (HTTP 응답)
[클라이언트]

🔸 구성 요소

DispatcherServlet 프론트 컨트롤러 (모든 요청 진입점)
HandlerMapping URL과 컨트롤러 매핑 조회
Controller 클라이언트 요청 처리, 서비스 호출
Service 비즈니스 로직 처리
DAO/Repository 데이터베이스 처리
Model 처리 결과 데이터를 담음
ViewResolver 화면(View) 결정 (HTML, JSP, JSON 등)
View 최종 화면 or 데이터
 

🔸 동작 예시

  1. DispatcherServlet → 요청 받음
  2. HandlerMapping → /user/list → UserController 연결
  3. UserController → userService.getUserList() 호출
  4. UserService → userRepository.findAll() → DB 조회
  5. 결과를 Model에 담음
  6. ViewResolver → userList.jsp 선택
  7. View(JSP) → HTML 렌더링
  8. 클라이언트에 결과 반환

🔸 Spring MVC 특징

  • 명확한 역할 분리: View, Model, Controller
  • 유연한 View 선택: JSP, Thymeleaf, JSON 등
  • Spring DI, AOP와 자연스럽게 결합
  • Annotation 기반 간편화: @Controller, @RequestMapping

🔸 사용

  • 전통적인 금융권, 관공서 시스템
  • 외부 WAS(JBoss, WebLogic, WebSphere)에 배포
  • Monolithic 구조로 대형 서비스 관리
  • View 기반의 전통적인 화면 시스템 + REST API 서버

 

전통적인 웹 아키텍처 빠른 설정 및 내장 WAS
외부 WAS 필요 (Tomcat, WebLogic 등) 내장 WAS로 실행 (Tomcat 등)
XML 또는 Annotation 기반 설정 어노테이션 중심, 최소 설정
금융권/공공 SI에서 여전히 사용 스타트업, 클라우드, MSA 중심

 


✅ 1. Spring DI (의존성 주입)

🔹 개념

  • 객체 간의 의존관계를 외부에서 주입해주는 방식
  • 객체가 직접 의존 객체를 생성하지 않고, 스프링 컨테이너가 대신 주입해줌
 
 

🔹 장점

  • 객체 간 결합도 낮춤 → 유지보수성 향상
  • 테스트 용이 (Mock 객체 주입 가능)
  • 코드 재사용성 증가
  • 유연한 객체 교체 가능 (ex. @Qualifier, @Profile)

 

🔸 DI 주입 방식

생성자 주입 가장 권장되는 방식 (@Autowired 생략 가능)
필드 주입 간단하지만 테스트나 DI 프레임워크 없이 사용 불가
세터 주입 선택적 의존성 주입 시 사용
 

 

 


✅ 2. Spring AOP (관점 지향 프로그래밍)

🔹 개념

  • 공통적인 관심사(로깅, 보안, 트랜잭션 등)를 핵심 비즈니스 로직과 분리해서 모듈화
  • 관심사를 '횡단(cross-cutting) 로직'으로 분리해 코드 중복 제거
 
 

🔹 주요 AOP 용어

Aspect 공통 기능 모듈 (ex. 로그, 트랜잭션)
Advice 언제 실행할 것인가 (before, after, around 등)
JoinPoint Advice가 적용될 수 있는 지점 (메서드 호출 등)
Pointcut Advice가 실제로 적용될 위치 지정하는 표현식
Weaving 실제 코드에 Aspect를 적용하는 과정
 

✅ 실무에서의 DI + AOP 활용 예시

트랜잭션 관리 AOP @Transactional
로그인 체크 AOP @Aspect로 권한 체크
의존 객체 주입 DI @Autowired, 생성자
데이터 접근 DI + AOP Repository 주입 + 트랜잭션 AOP
 

 

 

 

728x90
반응형

'CS' 카테고리의 다른 글

WAS 튜닝, 쿼리 성능 튜닝  (1) 2025.06.27
트러블슈팅, 장애 대응  (1) 2025.06.27
REST API  (1) 2025.06.27
MSA  (1) 2025.06.27
데이터 ETL  (1) 2025.04.18