[spring] 비즈니스 로직층(BLL)

sesame·2021년 8월 4일

Spring

목록 보기
8/12

비즈니스 로직층

애플리케이션이 제공하고자 하는 서비스나 도메인을 직접적으로 구현한 부분(유스케이스로 표현)

비즈니스 로직층 pattern

  • 트랜잭션 스크립트 설계 pattern

    • 하나의 트랜잭션으로 구성된 로직을 단일 스크립트(함수)에서 처리(로직 주도 설계)

    • 행위(script), 속성(data; VO, DTO) 분리

      • VO: 값을 저장하는 객체
      • DTO: 값을 전달하는 객체
    • 단순하고 간편하지만 비즈니스 로직이 복잡해지면 난해하고 중복된 코드가 우려된다.

  • 도메인 모델 설계 pattern

    • 객체지향 분석·설계에 기반하여 구현하고자 하는 도메인(비즈니스 영역)의 모델 생성

    • 상속 등을 통해서 객체의 기능과 역할 확장·변경

    • 하나의 도메인 모델을 구축하는데 많은 노력 필요


트랜잭션 관리

  • 트랜잭션: 업무 처리 단위

  • ACID: Atomicity(원자성), Consistency(일관성), Isolation(독립성), Durability(영속성)

  • 트랜잭션 시작 begin ~ 커밋 commit/롤백 rollback

명시적인 트랜잭션

트랜잭션 관리(시작, 커밋, 롤백)를 소스 코드로 명시

선언적인 트랜잭션

프레임워크의 정의 파일에 선언하여 트랜잭션 관리

의존성 주입(DI)

객체를 직접 생성하지 않고, 스프링 컨테이너가 외부에서 가져와 자동으로 연결해 주는 방식


DI 하는 이유?

자바는 클래스 간 의존성이 높다. 의존성이 높은 객체를 생성하게 되면 클래스 간의 결합도가 높아지기 때문에 코드의 재활용성이 떨어지고, 클래스가 수정되었을 때 의존되어 있는 클래스들을 수정해야 하는 단점이 생긴다. DI를 사용하면 애플리케이션 안에서 관련 있는 클래스 간 결합도를 낮추고 유지 보수가 쉬워진다.

DI 장점

  • 코드의 재활용성이 높아진다

  • 코드를 단순화한다.

  • 클래스 간 결합도가 낮아져 유연성과 확장성이 높아진다

DI 사용 적절한 경우

  • 컨트롤러와 서비스의 의존관계

  • 서비스와 DAO의 의존관계

DI의 2가지 방법

  • 애너테이션을 이용한 DI : 소규모 프로젝트

  • Bean 정의 파일을 이용한 DI : 대규모 프로젝트


AOP(관점지향 프로그래밍)

spring의 핵심 개념 중 하나인 DI가 애플리케이션 모듈들 간의 결합도를 낮춰준다면, AOP는 애플리케이션 전체에 걸쳐 사용되는 기능을 재사용하도록 지원하는 것이다.

AOP 장점

  • 애플리케이션 전체에 흩어진 공통 기능이 하나의 장소에서 관리된다는 점

  • 다른 서비스 모듈들이 본인의 목적에만 충실하고 그 외 사항들은 신경 쓰지 않아도 된다는 점

AOP 용어

아래 용어들은 Spring에서만 사용되는 용어들이 아닌 AOP 프레임워크 전체에서 사용되는 공용어

  • Target: 부가기능을 부여할 대상

  • Aspect: 객체지향 모듈을 오브젝트라 부르는 것과 비슷하게 부가기능 모듈을 Aspect라고 부른다.

    • Aspect는 Advice와 PointCut을 함께 가지고 있다.
  • Advice: JoinPoint 때 실행되는 코드로 실질적으로 부가기능을 담은 구현체

    • Aspect가 '무엇'을 '언제' 할지를 정의함
  • PointCut: JoinPoint에서 Advice의 호출 여부를 결정하는 조건

  • JoinPoint: Advice를 실행시킬 수 있는 때

  • Proxy: Target을 감싸서 Target의 요청을 대신 받아주는 랩핑 오브젝트

    • 클라이언트에서 Target을 호출하게 되면 Target이 아닌 Target을 감싸고 있는 프록시가 호출되어, 타겟 메소드 실행전에 선처리, Target 메서드 실행 후 후처리를 실행시키도록 구성

0개의 댓글