ljy.log
로그인
ljy.log
로그인
웹 애플리케이션 아키텍처 (2)
이지윤
·
2022년 4월 1일
팔로우
0
Spring
스프링
0
프레임워크프로그래밍
목록 보기
2/24
각 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 환경에서 동작하는 애플리케이션 개발 지원
이지윤
초보자
팔로우
이전 포스트
웹 애플리케이션 아키텍처
다음 포스트
Maven
0개의 댓글
댓글 작성