웹 애플리케이션 아키텍처 (2)

이지윤·2022년 4월 1일
0

각 Layer의 역할

프레젠테이션 층

  • 사용자 인터페이스 + 컨트롤러 제공

    컨트롤러 : 클라이언트에서 전달되는 모든 데이터가 거쳐가는 곳, 페이지 화면 전환 또는 동작 제어를 하며 데이터를 주고 받는 기능을 처리

  • 컨트롤러는 사용자 인터페이스를 통해 사용자의 입력을 받아 적정한 로직을 호출
  • 그 결과를 사용자 인터페이스로 변환하는 작업
  • 사용자 인터페이스는 화면 인터페이스를 의미
  • 다양한 사용자 인터페이스 등장

모델 1 방식

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

모델 2 방식

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

비즈니스 로직 층의 역할

비즈니스 로직

  • 유즈케이스로 표현되는 특정 업무 처리를 위한 서비스와 도메인으로 구성

트랜잭션 스크립트 방식

  • 비즈니스 로직이 적은 일반적인 입출력 애플리케이션일 경우, 비즈니스 로직은 서비스 클래스에 포함
  • 도메인은 가능한 한 로직을 포함하지 않고 단순한 값만 저장
    • VO (Value Object)
    • DTO (Data Transfer Object)

트랜잭션 관리

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

트랜잭션 경계

  • 트랜잭션 경계는 프리젠테이션과 비즈니스 로직 층 사이에 존재하는 것이 일반적
  • 프리젠테이션 층에 공개된 비즈니스 로직 층의 서비스 클래스가 트랜잭션 시작과 끝

명시적 트랜잭션

  • 트랜잭션 시작과 커밋, 롤백과 같은 RDB에 대한 트랜잭션 관리를 소스 코드로 명시

선언적 트랜잭션

  • 프레임워크에서 제공하는 정의 파일 선언을 통해 트랜잭션 관리

데이터 액세스 층의 역할

데이터 액세스 층

  • RDB 액세스를 비즈니스 로직으로 숨기고, 비즈니스 로직에 필요한 데이터를 테이블에서 취득해서 오브젝트에 매칭
  • 이때 오브젝트와 RDB를 매핑하는 것을 O/R매핑이라고 함
    (객체 지향 분석설계 단계에서의 엔터티를 테이블로 작성)

DB 액세스 프레임워크의 종류

  • Hybernate : 대표적인 ORM
  • MyBatis, 스프링 JDBC: SQL문 사용 전제로 한 DB 액세스 프레임워크

데이터 액세스 층 설계 지침

  • 커넥션 풀 사용
  • RDB 제품이 바뀌어도 구현에 영향을 미치지 않음.
  • 이용하는 RDB에 의존적인 SQL문을 기술하지 않음.

부품화

  • 개발 효율성과 유연성 향상을 위해서는 티어 또는 레이어를 통해 부품화
    • 티어 > 레이어 > 패키지 ≥ 컴포넌트
  • 부품화를 위해서는 인터페이스가 중요

부품화를 위해서는 2가지 중요점

  • 연결해야 할 부품 간 중요한 부품이 인터페이스를 갖음
  • 절대적 기준은 없다. 성능이 허용하는 한 부품화할 필요가 있는 만큼 부품화

웹 애플리케이션이 안고 있는 문제

웹 애플리케이션 문제

EJB 문제

  • 현재 해결

오브젝트 생명 주기

  • 서블릿 인스턴스의 호출로 인한 성능 저하 및 메모리 압박 -> 싱글톤 구현이 필요한데 복잡
  • HTTP Session / request / Application 경우 객체 생명 주기 관리 필요

부품화 문제

  • 인터페이스 구현과 비의존 구현하기 위해서는 고도의 기술이 필요
  • 팩토리 메서드는 개발자가 new를 사용하지 않고 인스턴스화를 구현

기술 은닉과 부적절한 기술 은닉

  • 여러 클래스에 걸쳐 존재하는 예외 처리, 로깅, 트랜잭션은 프로그램 가독성을 훼손, 부품화와 테스팅에 비효율적

문제 해결은 스프링 프레임워크

  • 오브젝트 생명 주기 -> DI 컨테이너로 해결
  • 부품화 문제 -> DI 컨테이너로 해결
  • 기술 은닉과 부적절한 기술 은닉 문제 -> AOP로 해결

스프링 프레임워크의 주요 특징

POJO 관리

  • 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없는 가벼운 객체를 관리

IOC 경량 컨테이너

  • 객체 생성과 객체 간 의존 관계 연결을 개발자의 소스 코드가 아닌 스프링 프레임워크가 제공하는 DI 컨테이너가 대신해주기 때문에 제어가 역전되었다고 정의
  • 일반 오브젝트의 생애 주기 관리나 오브젝트 간의 의존관계를 해결하는 아키텍처 구현

DIxAOP 지원

  • DI : 각각의 계층이나 서비스들 간에 객체 의존성이 존재할 경우 프레임워크가 객체 간의 의존관계를 만들어줌 (변경 용이성, 확장성, 품질관리 용이)
  • AOP : 트랜잭션, 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 공통 모듈로 분리하여 관리 (프로그램 가독성, 기술 은닉)

Spring 프레임워크의 주요 특징

O/R 매핑 프레임워크 지원

  • 데이터베이스 라이브러이와 연결할 수 있는 인터페이스 제공

스프링 데이터를 통한 다양한 데이터 연동 기능

  • NoSQL DB 유형

스프링 배치

  • 대량의 데이터를 일괄 처리, 병행 처리할 수 있는 템플릿 제공

스프링 시큐리티

  • 인증, 인가 기능 제공
  • OAuth 개방형 표준 인증 서비스 제공

스프링 클라우드

  • Cloud 환경에서 동작하는 애플리케이션 개발 지원
profile
초보자

0개의 댓글