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로 보낼지 매핑
[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 데이터 |
🔸 동작 예시
- DispatcherServlet → 요청 받음
- HandlerMapping → /user/list → UserController 연결
- UserController → userService.getUserList() 호출
- UserService → userRepository.findAll() → DB 조회
- 결과를 Model에 담음
- ViewResolver → userList.jsp 선택
- View(JSP) → HTML 렌더링
- 클라이언트에 결과 반환
🔸 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 |