2022-06-15(Section2_Spring기초)

이상수·2022년 6월 17일
0

TIL_Spring Base

목록 보기
2/6
post-thumbnail
  1. 시작하게 된 계기 및 다짐 😮
  • 이번 코드스테이츠의 백엔드 엔지니어링 개발자 부트캠프에 참여하게 되면서 현직개발자 분들의 빠른 성장을 위한 조언 중 자신만의 블로그를 이용하여 배운 것 들을 정리하는게 많은 도움이 된다 하여 시작하게 되었다.

    • 그 날 배웠던 것을 길지 않아도 좋으니 정리하며 복습하는 습관 기르기
    • 주말에 다음주에 배울 내용들을 예습
    • 코딩 문제와 java코드들은 꾸준히 학습
    • 자료구조를 이용한 알고리즘 문제 해결 학습
  1. 학습 목표 😮
목표결과
Spring Framework 모듈이 무엇이고 Spring Framework에서 지원하는 모듈의 종류 이해O
Spring Framework의 아키텍처를 버드 아이 뷰 관점에서 이해O
Spring Boot이 무엇이고 Spring Boot을 왜 사용해야하는지 이해할 수 있다.O
아키텍쳐와 이를 통한 Spring framework모듈 구성 및 이해O
  1. 정리

아키텍처란?

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에서는 패키지 단위로 묶여서 재사용 가능하도록 라이브러리로 제공하는 경우가 많다.






Spring boot

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 구성 모듈

[사진](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 속성 및 접근, 처리, 메서드 호출, 배열,컬렉션 검색등을 위한 언어를 제공






  1. 피드백 😮
  • Spring boot란 무엇인지 살펴보았는데, 이는 Spring을 좀더 편리하게 사용할 수 있게 Spring을 사용하기 위한 복잡한 구성들(XML기반의 복잡한 Spring설정들을 개선)을 개선한 Spring이다.

  • 아키텍처를 이용하여 Spring Framework를 구성하는 여러 모듈들을 살펴보았는데, 각 모듈들에 대하여 간단하게 정리해 보았는데 각 모듈들이 어떠한 기능을 하고 있는지 이해하고 넘어가면 될 것같다.

  1. 앞으로 해야 될 것 😮
  • 매일 꾸준히 할 것
    • 꾸준히 velog 작성
    • Java 언어 및 Algorithm 공부(Coding-Test)
    • 틈틈히 운동 하기

  • 내일 해야 할 것
    • Spring framework의 핵심 개념들 중 DI(의존성 주입)과 AOP를 학습하게 된다.
    • 앞에서 간단히 훑고 갔던 내용들에 대하여 중요한 것들을 깊게 알아보기.
profile
Will be great Backend-developer

0개의 댓글