Spring Framework 개념
Framework
- 소프트웨어의 설계와 구현을 재사용할 수 있게 협업화된 형태로 클래스들을 제공
- 장점
- 효율적인 코드 작성
- 정해진 규약에 따라 효율적 관리 가능
- 단점
- framework에 대한 학습 필요
- 정해진 구조 때문에 자유로운 개발 불가
- 종류
- Django, Express, Flask, Lalavel
Framework VS Library
- Library : 데이터나 프로그래밍 코드/ 필요한 기능을 미리 구현
- Framework : 프로그램의 구조, 틀
- framework는 교체가 어렵지만 library는 교체가 용이(제어권 차이)
- library는 제어권이 개발자에게 있고, framework는 framework에게 있다(IoC, 제어의 역전)
Spring Framework
- Spring framework의 장점
- POJO(Plan Old Java Object)
- DI(Dependency Injection)
- AOP(Aspect Oriented Programming)
- PSA(Portable Service Abstraction)
- 자바 사용 - 정적 타입 언어를 사용하여 코드 수정, 보완 용이, 서버 구축에 오류 예방
- 기업용 엔터프라이즈 시스템
- 기업의 업무를 처리해주는 시스템을 의미
- 효율성, 보안성, 안전성이나 확장성을 고려해서 구축
- Spring을 주로 사용
Spring 이전의 코드
JSP를 사용한 애플리케이션
- JSP(Java Server Page)
- 클라이언트의 요청을 처리하는 html/javaScript코드와 서버 측 JAVA코드가 섞여있는 형태
- 서버에서 클라이언트 요청을 처리하는 java 코드
- 서버로부터 전달 받은 응답을 화면에 표시하기 위한 jstl 태그 영역
- html, css, javascript 코드
- 코드 가독성이 떨어짐
Servlet을 사용한 애플리케이션
- servlet - 클라이언트 요청 처리에 특화된 java 클래스
- jsp에서 java코드는 서블릿 클래스로 분리
- servlet container
- servlet 기반 웹 애플리케이션을 실행 및 servlet과 thread 매핑 작업
- Apache Tomcat이 대표적 servlet container
Spring MVC
- servlet에서 개발자가 데이터를 꺼내오고 캐릭터 셋도 지정한 것을 spring이 처리함
- 코드 간결
- spring mvc 설정파일을 설정해야 하는 복잡함
Spring boot
- 복잡한 설정 파일들을 spring이 처리
Spring Framework 특징
POJO(Plain Old Java Object)
순수 java 객체로 제작
- java나 java의 스펙에 정의된 것 외의 특정 기술에 종속되지 않은 순수 객체 사용
- 특정 환경에 종속되지 않아야 한다
목적
- 특정 환경과 기술에 종속되지 않으면 재사용 가능, 확장 가능
- 저수준 레벨의 기술, 환경에 종속된 코드 제거로 코드 간결
- 디버깅 용이
- 테스트 단순
- 객체지향 설계 적용 가능
POJO & spring framework
- spring에서 POJO를 구현하기 위해서 IoC/DI, AOP, PSA를 사용
SOLID
- 객체지향 설계 5가지 원칙
- SRP - Single Responsibility Principle(단일 책임 원칙)
- 클래스가 제공하는 기능들은 하나의 책임을 수행
- OCP - Open Close Principle
- 확장은 열려있고, 변경은 닫혀있다
- LSP - Liskov Substitution Principle
- 하위 클래스 객체는 인스턴스를 상위 클래스의 참조 변수에 넣고 사용 가능
- ISP - Interface Segregation Principle
- 하나의 인터페이스보다 여러 개의 구체적인 인터페이스로 분리
- DIP - Dependency Inversion Principle
- 구체적인 클래스에 의존하지 않고 추상화된 클래스에 의존한다
IoC(Inversion of Control)
개념
- 애플리케이션 흐름의 주도권을 Spring이 갖는다
Java 콘솔 애플리케이션의 일반적인 제어권
- 개발자가 작성한 코드의 순서대로 흐르는 일반적인 제어 흐름
Java 웹 애플리케이션에서 제어권
- 서블릿 기반의 애플리케이션을 웹에서 실행할 때
- 애플리케이션이 시작되는 지점이 Entry point
- servlet container 안에 있는 container logic이 직접 servlet 실행
- servlet container가 servlet을 제어하고 있기 때문에 제어권은 컨테이너에게 있다
- 서블릿과 웹 애플리케이션 간의 IoC 발생
DI(Dependency Injection)
개념
- IoC를 조금 더 구체화 시킨 것이다.
- 생성자 파라미터에 외부의 객체를 전달받는 것을 의존성 주입이라고 한다
- 클래스 의존 관계
- A클래스가 B클래스의 기능을 사용할 때 A가 B에 의존한다
- 엔드 포인트
- 서버의 엔드 포인트는 서버의 resource를 이용하기 위한 끝 지점
- stub
- 미리 준비된 데이터를 몇 번이고 호출해도 반환하는 것
목적
- new 키워드로 객체를 생성하면 클래스 변경할 때 모두 수정해야 한다(강한 결합)
- 특정 클래스가 일반화된 클래스, 즉 인터페이스를 의존하고 있을 때(느슨한 결합)
- new 키워드를 사용하지 않고 느슨한 결합을 만들기 위해 의존성 주입(DI)을 사용
- Spring이 의존 객체들을 주입하기 때문에 애플리케이션 코드 유연하게 구성 가능
AOP(Aspect Oriented Programming)
개념
- 애플리케이션에서 필요한 공통 기능에 대한 공통 관심 사항을 핵심 관심 사항과 분리
공통 관심 사항과 핵심 관심 사항
- 공통 관심 사항(Cross-Cutting Concern)
- 애플리케이션 전반에 사용되는 공통 기능에 대한 관심사
- 비즈니스
- 로직(앱 주목적 달성 로직)에 대한 관심사
목적
- 코드 간결성
- 객체 지향 설계에 적합
- 코드 재사용
사용 효과
- 트랜잭션
- 데이터를 처리하는 하나의 작업 단위
- 트랜잭션 안의 모든 작업이 성공하면 commit
- 하나라도 실패하면 rollback으로 모두 이전 상태로 돌린다
- 트랜잭션, 로깅, 보안, 트레이싱, 모니터링 등의 공통 기능을 비즈니스 로직에서 분리
- 중복된 코드를 제거하고 유지 보수 용이
PSA(Portable Service Abstraction)
추상화의 개념
- 공통된 부분들을 추상 클래스나 인터페이스로 구현해 놓는다
PSA
- 추상 클래스만 일관되게 바라보며 하위 클래스의 기능을 사용
- 서비스 접근 방식을 동일하게 설정하여 기술을 유연하게 사용 가능
목적
- 접근 방식을 일관되게 하여 기술이 변경되어도 최소한의 수정을 요구
- 트랜잭션, 메일, Spring data 서비스에 적용
Spring Framework 모듈 구성
Architecture
개념
- 컴퓨터 시스템 구축에 있어 비지니스 요구 사항을 만족하는 구조를 정의
- 초대한 단순하게 제작
Architecture Type
System Architecture
- 하드웨어와 소프트웨어를 모두 포함한 시스템 전체 구성
- 시스템의 구성 요소와 상호작용을 이해하기 위한 설계
Software Architecture
- 소프트웨어 구성을 표현한 아키텍처
- 자바 플랫폼 아키텍처 - 자바에서 사용할 수 있는 기능과 자바가 사용하는 기능을 알 수 있음
Application Architecture
- 애플리케이션
- 응용 프로그램 혹은 서버 애플리케이션
- 계층형 아키텍처
- API layer(presentation layer)
- client의 요청을 받아들이는 계층
- Presentation layer라고 부르지만 REST API를 제공하는 경우 API layer로 부름
- Service layer(business layer)
- 전달 받은 요청을 업무 도메인에 맞게 비즈니스적으로 처리
- 도메인 - 비지니스적 업무 영역
- data access layer
- DB에 데이터를 저장하기 위한 계층
- API layer(presentation layer)
Software Architecture type
- layered pattern
- 계층화된 시스템 구조
- 각 계층은 다음 상위 계층에 서비스 제공
- 마주 보는 두 층 사이에서만 상호작용
- client-server pattern
- 하나의 서버와 다수의 클라이언트로 구성
- 클라이언트 서버에 서비스 요청
- 서버는 요청 대기
- pipe-filter pattern
- 데이터 스트림 생성 및 처리 방식
- 서브 시스템이 데이터를 처리하고 결과를 다음 서브 시스템으로 넘기는 방식
- broker pattern
- 분산 시스템에 사용
- 원격 서비스를 통해 상호작용 가능
- MVC pattern
- model(데이터 보관), view(정보 표시), controller(요청을 입력받아 처리)
- 각 부분이 분리되어 영향을 받지 않음
Spring framework module 구성
출처 : https://docs.spring.io/spring-framework/docs/5.0.0.M5/spring-framework-reference/html/overview.html
- module - 목적에 맞게 여러 기능들을 모아 그룹화한 것
- 자바 패키지 단위로 묶여 여러 클래스들을 포함
- 재사용이 가능하도록 library 형태로 제공
Spring Boot
개념
- spring framework의 편리함에도 spring 설정에 복잡함을 해결하기 위해 나타난 spring project
사용 목적
XML 기반의 복잡한 설계 지양
- spring의 복잡한 설정에서 해방
의존 라이브러리의 자동 관리
- spring boot 이전에는 필요한 라이브러리 이름과 버전 추가
- spring boot의 starter 모듈을 통해 라이브러리 수동 설정 불편 해소
애플리케이션 설정의 자동 구성
- starter 모듈을 통해 의존 라이브러리 기반 애플리케이션 설정 자동 구성
- @SpringBootApplication을 추가해 자동 구성 설정 활성화
프로덕션급의 애플리케이션의 간단한 빌드업
- War파일 형태로 WAS에 올릴 필요 없이 빌드 가능
- bootJar 명령어를 클릭하여 빌드하여 실행 가능한 파일로 사용
- WAS(Web Application Server)
- Java 기반 웹 앱을 배포하는 방식은 WAR(Web application ARchive) 파일로 빌드 후 WAS(java에서는 servlet container)라는 서버에 올려서 배포
- 결과물을 실제 웹 애플리케이션이 되게 하는 서버
내장된 WAS를 통한 배포
- Spring boot는 Apache Tomcat이라는 WAS를 내장하여 WAS 구축 없이 jar 파일을 명령어로 웹 애플리케이션 실행 가능
- java -jar [fime_name].jar
'Backend boot camp > Session2' 카테고리의 다른 글
Technical interview (1) | 2022.10.18 |
---|---|
Spring Framework Cores(DI/AOP) (1) | 2022.10.18 |
Relational DataBase (0) | 2022.10.03 |
REST API (0) | 2022.10.03 |
Network (1) | 2022.09.30 |