📘 프레임워크 기초

웹 애플리케이션

일반적인 웹 시스템

  • 정적 컨텐츠(HTML) : 웹 브라우저가 웹 서버로부터 저장된 HTML을 읽어와 표현
  • 동적 컨텐츠(JSP) : 웹 브라우저가 웹 서버에 동적 페이지를 요청하면 이 요청을 애플리케이션 서버가 실행하고, 처리결과(데이터 베이스 조회등)을 브라우저가 HTML형식으로 받아서 표현

스프링의 등장

  • ELB (Enterprise JavaBean)
    • 분산 환경에서의 트랜적션 처리를 위한 콤포넌트 (트랜잭션 : 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위, 콤포넌트: 재사용 가능한 웹의 구성요소)
    • J2EE버전업과 함께 EJB복잡도는 높아지고 확장성은 떨어짐
  • Spring Framework
    • 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크
    • POJO지원(특정 인터페이스 또는 클래스를 상속받을 필요가 없는 가벼운 격채를 의미)

애플리케이션 아키텍처

  • 물리층인 티어와 논리층인 레이어로 구분
    1. 프리젠테이션 층 - 사용자 인터페이스와 컨트롤러를 제공
    • 컨트롤러 - 페이지 화면 전환 또는 동작 제어
      1. 비지니스 로직 층 - 비지니스 로직을 제공
    • 서비스 - 유스케이스로 표현되는 특정 업무 처리, 트랜잭션 기점
    • 도메인 - 서비스로부터 기능을 실행하는데 사용되는 고객 또는 주문 같은 클래스의 집합, 관련 정보들을 저장
      1. 데이터 엑세스 층 - 데이터 엑세스를 추상화

오목형 레이어

  • 표현 층 또는 데이터 엑세스 층이 변경되어도 비즈니스 로직 층에는 영향을 최소화
  • 레이어 층 도입과 함께 결합 부분에 약한 결합 설계 구현(인터페이스 도입)필요

중요성

  • 서버 애플리케이션 구조의 변화
    • Client-server 구조에서 web server기반 구조로 진화
    • 요구사항 변경, 잦은 기능 추가 발생, 미래 환경의 빠른 변화에 대응 필요
    • 비지니스 로직과 ui로직이 서버에 종속
  • 서버 애플리케이션 특징에 적합한 구조가 필요
    • 유연하게 대응할 수 있는 개발 효율성인 구조는 서버 애플리케이션의 수명을 유지

프리젠 테이션 층의 역할

  • 프리젠 테이션 층
    • 사용자 인터페이스와 컨트롤러를 제공하는 역할
    • 먼트롤러는 사용자 인터페이스를 통해 사용자의 입력을 받아 적정한 로직을 호출하고, 그 결과를 사용자 인터페이스로 변환하는 작업
    • 사용자 인터페이스는 화면 인터페이스를 의미
    • 다양한 사용자 인터페이스 등장

모델 1 방식

  • jsp만 구현 개발하거나 javabean을 포함하여 개발하는 방식을 의미
  • jsp 뷰와 비즈니스 로직이 혼재되어 복잡도가 높음 -유지보수 어려움

MVC2

  • 모델 : 뷰에 필요한 비즈니스 영역의 로직을 처리
  • 뷰 : 비즈니스 영역에 대한 프레젠테이션 뷰를 담당
  • 컨트롤러 : 사용자의 입력 처리와 화면의 흐름 제어를 담당

비즈니스 로직 층의 역할

  • 비즈니스 로직 : 유즈 케이스로 표현되는 특정 업무 처리를 위한 서비스와 도메인으로 구성 (유즈 케이스 : 시스템의 동작을 사용자의 입장에서 표현한 시나리오 )
  • 트랜잭션 스크립트 방식 : 비즈니스 로직이 적은 일반적인 입출력 애플리케이션일 경우 , 비즈니스 로직은 서비스 클래스에 포함 , 도메인은 가능한 한 로직을 포함하지 않고 단순한 값만 저장(VO,DTO)

트랜잭션 관리

  • 트랜잭션의 ACID 특성 중 원자성과 독립성을 관리
  • 원자성 : 트랜잭션 내의 모든 처리는 전부 실행됐거나 아무것도 실행되지 않음
  • 독립성 : 병행해서 실행되는 트랜잭션 간에는 간섭받지 않고 독립적임

트랜잭션 경계

  • 트랜잭션 경계는 프리젠테이션과 비즈니스 로직 층 사이ㅇ 존재하는 것이 일반적
  • 프리젠테이션 층에 공개된 비즈니스 로직 층의 서비스 클래스가 트랜잭션 시작과 끝
    • 프리젠테이션 층에 공개된 비즈니스 로직 층의 서비스 클래스의 메서드가 호출되면 트랜잭션이 시작되고, 서비스 클래스의 메서드가 종료되고 프리젠테이션 층의 클래스로 되돌아갈 때 트랜잭션이 종료
  • 명시적 트랜잭션 : 트랜잭션 시작과 커밋, 롤백과 같은 RDB에 대한 트랜잭션 관리를 소스 코드로 명시
  • 선언적 트랜잭션 : 프레임 워크에서 제공하는 정의 파일 선언을 통해 트랜잭션 관리

데이터 액세스 층의 역할

데이터 액세스 층 : RDB액세스를 비즈니스 로직을 숨기고, 비즈니스 로직에 필요한 데이터를 테이블에서 취득해서 오브젝트에 매칭

  • 이때 오브젝트와 RDB를 매핑하는것을 O/R매핑이라고 함
    • 객체 지향 분석설계 단계에서의 엔터티를 테이블로 작성한 형태
  • DB액세스 프레임워크의 종류 Hybernate, JPA : 대포적인 ORM MyBatis,스프링 JDBC: SQL문 사용 전제로 한 DB액세스 프레임 워크
  • 설계 지침 : 커넥션 풀을 사용한다, RDB제품이 바뀌어도 구현에 영향을 미치지 않는다 , 이용하는 RDB에 의존적인 SQL문을 기술하지 않는다.

  • 부품화 : 개발 효율성과 유연성 향상을 위해서는 티어 또는 레이어를 통해 부품화 , 부품이 큰 쪽이 티어, 레이어 그리고 작은 부품은 패키지 또는 컴포넌트, 부품화를 위해서는 인터페이서가 중요
    • 중요점 : 연결해야 할 부품 간에 결국 중요한 부품이 인터페이스를 가진다, 절대적인 기준은 없다 성능이 허용하는 한 부품화할 필요가 있는 만큼 부품화 한다.

SPring Framework 의 주요 특징

  • POJO(Plain Old Java Object)관리
    • 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없는 가벼운 객체를 관리
  • IOC 경량 컨테이너
    • 객체 생성과 객체 간 의존 관계 연결을 개발자의 소스코드가 아닌 스프링 프레임 워크가 제공하는 DI컨테이너가 대신해 주기 때문에 제어가 역전되었다고 정의
    • 일반 오브젝트의 생애 주기 관리나 오브젝트 간의 의존관계를 해결하는 아키텍처를 구현
  • DIxAOP 지원
    • DI : 각각의 계층이나 서비스들 간에 객체 의존성이 존재할 경우 프레임 워크가 객체 간의 의존 관계를 만들어줌 (변경 용이성, 확장성,품질관리 용이)
    • AOP : 트랜잭션 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 공통 모듈로 분리하여 관리 (프로그램 가독성, 기술 은닉)
  • O/R매핑 프레임워크 지원
    • 데이터베이스 라이브러리와 연결할 수 있는 인터페이스를 제공
  • 스프링 데이터를 통한 다양한 데이터 연동 기능
    • NoSQL DB유형의 데이터 저장소 및 검색 엔진 연동
  • 스프링 배치
    • 대량의 데이터를 일괄 처리, 병행 처리할 수 있는 템플릿 제공
  • 스프링 시큐리티
    • 인증, 인가 기능 제공
    • OAuth 개방형 표준 인증 서비스 제공
  • 스프링 클라우드
    • Cloud환경에서 동작하는 애플리케이션 개발 지원

태그:

카테고리:

업데이트: