본문 바로가기
Backend boot camp/Session2

Spring Framework Basics

by orioncsy 2022. 10. 18.

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에 데이터를 저장하기 위한 계층

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