- 시작하게 된 계기 및 다짐 😮
이번 코드스테이츠의 백엔드 엔지니어링 개발자 부트캠프
에 참여하게 되면서 현직개발자 분들의 빠른 성장을 위한 조언 중 자신만의 블로그를 이용하여 배운 것 들을 정리하는게 많은 도움이 된다 하여 시작하게 되었다.
- 학습 목표 😮
목표 | 결과 |
---|---|
Spring Framework 모듈이 무엇이고 Spring Framework에서 지원하는 모듈의 종류 이해 | O |
Spring Framework의 아키텍처를 버드 아이 뷰 관점에서 이해 | O |
Spring Boot이 무엇이고 Spring Boot을 왜 사용해야하는지 이해할 수 있다. | O |
아키텍쳐와 이를 통한 Spring framework모듈 구성 및 이해 | O |
- 정리
1. 아키텍처(Architecture)
- 일종의 설계도(구조)의 역할을 한다.
- HW/SW를 포함하는 시스템의 전체적인 구성의 형태
- 시스템 구성 요소들 간의 상호작용이 어떻게 이루어지는지 등 시스템의 정상 동작하기 위한 동작 원리등이 포함되며, 이해 당사자들이 이를 이해하는데 도움이 됨
2. SW 아키텍처/ 애플리케이션 아키텍처
1). SW아키텍처
- HW제외한 컴퓨터내의 모든 프로그램을 포괄하는 의미를 가지고, 이를 그림으로 표현한 것
2). 애플리케이션 아키텍처
- 소프트 웨어의 한 종류로, 애플리케이션은 응용 프로그램을 말하며, 넓게는 클라이언트의 요청을 처리하는 서버 애플리케이션을 의미
- 많은 유형중 주로, 계층형 아키텍처(N-티어_ #사진)을 자주 만나게 됨
(1) API 계층(API Layer)
- [컨트롤러에 해당]
- 클라이언트의 요청을 받고/ 응답주는 계층으로, REST API를 제공하는 애플리케이션의 경우 API 계층이라 표현
(2) 서비스 계층(Service Layer) or [비지니스 계층]
- API 계층에서 받은 요청을 업무 도메인의 요구 사항에 맞게 처리하는 계층으로, 핵심 로직이 포함되어 있는 핵심 계층이다.
- 애플리케이션의 도메인(Domain) : 비지니스적인 업무 영역으로, 식당을 예로 음식을 주문/조리(처리)/배달하는 과정등이 도메인 지식이고 이를 서비스 계층에서 구현해야 한다.
(3) 데이터 엑세스 계층(Data Access Layer)
- 비즈니스 계층에서 처리된 데이터를 DB등의 데이터 저장소에 저장하기 위한 계층
[extra]
- 10가지 아키텍처 : https://mingrammer.com/translation-10-common-software-architectural-patterns-in-a-nutshell/
2. 아키텍처로 보는 Spring framework 모듈(Module) 구성
[사진](Spring framework_구성)
- 모듈 : 여러 기능들을 목적에 맞게 그룹화 시켜 놓은 것
Java에서는 패키지 단위로 묶여서 재사용 가능하도록 라이브러리로 제공하는 경우가 많다.
1. Spring Boot란?
- Spring boot : Spring의 설정의 복잡함으로 개발을 시작전 어려움을 해결하기 위해 생겨난 Spring project
[#참고] Spring framework으로 엔터프라이즈 애플리케이션을 개발하기 위한 Spring Project로써,
굉장히 편리하지만 기본 구조 설정이 복잡함
2. Spring boot 사용 이유
- ★Spring 구성은 Spring에 맞기고 비지니스(서비스) 로직에만 집중 할 수 있다.
1). XML 기반의 복잡한 설계 방식 지양
2). 의존 라이브러리의 자동 관리
- starter 모듈 구성 기능을 통하여 기존 수동 라이브러리 설정으로 버전 불일치로 인한 빌드 및 실행 오류를 제거
3). 애플리케이션 설정의 자동 구성
- starter 모듈을 통해 설치되는 의존 라이브러리를 기반으로 애플리케이션 설정을 자동 구성
- '서블릿 컨테이너(default : Tomcat)/JDBC' 설정을 자동으로 구성
4). 내장된 WAS(web application server)를 통한 손쉬운 배포
- 빌드된 jar파일을 이용하여 [java -jar 파일이름.jar] 코드 한줄로 실행가능
5). 프로덕션급 애플리케이션의 손쉬운 빌드
- 개발한 애플리케이션 구현 코드를 손쉽게 빌드 및 War파일 형태로 WAS에 올릴 필요가 없음
[#참조] WAS : 웹 애플리케이션 배포의 일반적인 방식, 구현한 앱코드를 War파일 형태로 WAS(sublet container__ex)Tomcat)에 배포하여 해당 애플리케이션 실행
[extra]
- 아파치 톰캣(Apache Tomcat)이외에 Spring boot에서 사용할 수 있는서블릿 컨테이너(WAS)에는 어떤 것들이 있는지 검색.
[사진](Spring framework_구성)
- https://docs.spring.io/spring-framework/docs/5.0.0.M5/spring-framework-reference/html/overview.html
1. 데이터 엑세스/통합(Data Access/Integrate) 계층
- 데이터베이스 및 외부 인터페이스와 통신
1). JDBC
- DB 커넥션을 가져오는 DataSource를 Bean으로 등록하고 사용
기존 JDBC단점을 극복하여 간결한 형태의 API 사용을 제공한다.
# JDBC는 DB에 접근할 수 있는 API로, DB에 비 종속적인 DB연동로직을 구현할 수 있음(Mysql -> postgre)
단, SQL문을 실행하는 데 중복된 코드가 반복적으로 사용이 필요(단점)
2). ORM
- JPA(persistence),JDO(Java data Objects), Hibernate와 같은 ORM API를 위한 통합 레이어 제공
# ORM은 객체-관계 매핑으로, 객체와 관계형 DB의 불일치 발생 문제를 해결해 준다.
3). OXM
- XStream, XMLBeans,Castor,JAXB와 같은 Object/XML매핑을 지원
# OXM은 자바 객체를 XML파일로 변환하거나 그 반대의 변환을 해줌
4). JMS
- 메시지 생산/소비를 위한 기능을 제공, [Spring-messaging과 통합]
# JMS : Java message Service
2. Bussiness 계층
- 애플리케이션의 비지니스 로직을 실행하는데 초점을 맞춤
1). Spring-tx
- POJO로 구성된 Spring의 POJO 및 다른 클래스에 대한 선언적 트랜잭션을 관리
# 선언적 트랜잭션 : @Annotaion과 같은 어노테이션 방식으로 선언된 트랜잭션
3. 웹(WEB) 계층
- 대중적인 웹 프레임워크(ex. Apache Structs)같은 통합을 제공하는 것 외에도 자체 프레임워크 Spring MVC제공
1). Web
- 멀티파일 업로드 기능(기본 웹기능) 및 Servlet 리스너를 통한 IoC컨테이너 및 다른 웹 어플리케이션 통합을 통한 초기화
- HTTP클라이언트와 Spring의 원격 지원의 웹 관련 부분을 포함
2). Servlet(spring-webmvc)
- 자체 MVC프레임워크를 포함하고 REST 웹 서비스 구현을 포함한다.
3). WebSocket(spring-websocket)
- 웹 소켓을 지원
# 소켓 : 양방향 통신을 구현하기 위한 구조
4). Portlet(spring-webmvc-portlet)
- 포틀릿 환경에서 사용할 MVC 구현을 제공한다.
# 포틀릿 : 웹의 구성요소로, 날씨/뉴스등 같은 작은 컨테이너 같은것
4. 횡단 관심(Crosscutting Concerns)
- 로깅,보안,예외처리,모니터링등 기본적인로직들
1). AOP(spring-aop)
- 관점지향 프로그래밍에 대한 기본적인 기능들 제공
2). Aspect(spring-aspects)
- AOP 프레임워크인 aspectJ와의 통합을 제공
3). Instrument(spring-instrument)
- 특정 어플리케이션 서버에서 사용할 클래스 계측지원 및 클래스로더 구현을 제공한다.
# Instrumentation : 수단
4). Message
- MVC 모델과 비슷하게 메시지를 메소드에 매핑하기 위한 기능을 제공
5. 코어 컨테이너(Core Container)
- DI,IoC,Application Context의 핵심기능들을 제공
1). Core(spring-core)
- 스프링 모듈이 사용하는 유틸리티로, 프레임워크의 기본 부분을 제공
2). Bean(spring-bean)
- IoC Container가 관리하는 자바 객채로, 스프링이 직접 제어권을 가지고 생성하며 관계를 부여하는 오브젝트
- spring-bean 지원, 의존성 주입을 제공
- 빈 팩토리(Beanfactory)의 구현을 포함한다.
# 빈 팩토리 : 빈을 생성하고 관계를 설정하는등의 제어를 담당하는 IoC 오브젝트
3). Context(spring-context)
- 빈 팩토리를 상속하는 애플리케이션 컨텍스트를 구현하고 리소스 로드 및 국제화 지원 제공
- Servlet 컨테이너에 의한 컨텍스트의 투명한 생성에 대한 지원
- 캐싱(JCache) 및 스케줄링(CommonJ)를 위해 공통 타사 라이브러리를 Spring 애플리케이션 컨텍스트에 통합하기 위한 지원을 제공
# 애플리케이션 컨텍스트 : Ioc컨테이너라고도 불리며, 애플리케이션 전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 IoC엔진, 일종의 빈팩토리로 볼 수 있다.
★애플리케이션 콘텍스트 인터페이스는 빈 팩토리 인터페이스를 상속한다.
4). SpEL(spring-expression)
- EL(Expression Language, 표현언어)를 확장하는 Bean 속성 및 접근, 처리, 메서드 호출, 배열,컬렉션 검색등을 위한 언어를 제공
- 피드백 😮
Spring boot란 무엇인지 살펴보았는데, 이는 Spring을 좀더 편리하게 사용할 수 있게 Spring을 사용하기 위한 복잡한 구성들(XML기반의 복잡한 Spring설정들을 개선)을 개선한 Spring이다.
아키텍처를 이용하여 Spring Framework를 구성하는 여러 모듈들을 살펴보았는데, 각 모듈들에 대하여 간단하게 정리해 보았는데 각 모듈들이 어떠한 기능을 하고 있는지 이해하고 넘어가면 될 것같다.
- 앞으로 해야 될 것 😮