Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Develog

코드스테이츠 35일차 본문

코드스테이츠

코드스테이츠 35일차

안형준 2022. 6. 15. 18:20

학습 목표

  • AOP(Aspect Oriented Programming)
  • PSA(Portable Service Abstraction)

 

AOP(Aspect Oriented Programming)

 

AOP란 무엇일까? AOP를 한글로 번역하면 관심 지향 프로그래밍 이라고 한다.

그렇다면 관심(Aspect)을 지향하는 프로그래밍에서 관심은 무엇을 의미하는걸까?

AOP에서의 Aspect는 부모들이 가지고 있는 아기의 건강 같은 공통 관심사와 비슷한 느낌으로 생각하자

애플리케이션에 필요한 기능 중에서 공통적으로 적용되는 공통 기능에 대한 관심과 관련이 있다고 볼 수 있다.

 

애플리케이션을 개발하다보면 애플리케이션 전반에 걸쳐 공통적으로 사용 되는 기능들이 있기 마련인데, 이러한 공통 기능들에 대한 관심사를 바로 공통 관심 사항(Cross-cutting concern)이라고한다.

애플리케이션의 주목적을 달성하기 위한 핵심 로직에 대한 관심사는 핵심 관심 사항(Core concern)이라고한다.

핵심 관심 사항에 반대되는 개념으로 공통 관심 사항부가적인 관심 사항이라고 표현하기도 한다.

카페로 예를 들자면 고객에게 제공하는 커피 메뉴를 구성하기 위해 커피 종류를 등록하는 것과 고객이 마시고 싶은 커피를 주문하는 기능은 애플리케이션의 핵심 관심 사항이고, 커피 주문 애플리케이션에 아무나 접속하지 못하도록 제한하는 애플리케이션 보안에 대한 부분은 애플리케이션 전반에 공통적으로 적용되는 기능이기 때문에 공통 관심 사항이라고 볼 수 있다.

AOP라는 것은 애플리케이션의 핵심 업무 로직에서 로깅이나 보안, 트랜잭션 같은 공통 기능 로직들을 분리하는 것이라고 생각하자.

 

AOP가 필요한 이유는?

  • 코드의 간결성 유지
  • 객체 지향 설계 원칙에 맞는 코드 구현
  • 코드의 재사용

 

예를들어 모든 작업이 성공적으로 수행되었을 경우 수행한 작업을 데이터베이스에 반영하는 기능을 가진 커밋, 작업이 하나라도 실패한다면 이전에 성공한 작업들을 작업 수행 이전 상태로 되돌리는 기능을 가진 롤백과 같은 애플리케이션 전반에 걸쳐서 사용되기 때문에 셀 수 없는 중복이 발생할 것이다.

그렇기에 중복된 코드를 공통화해서 재사용 가능하도록 만들어야 한다. 그리고 이 공통화 작업은 AOP를 통해서 할 수 있다.

게다가 Spring에서는 이미 이런 트랜잭션 처리 기능을 AOP를 통해서 공통화 해두었다.

 

@애너테이션을 통해 Spring 내부에서 이 애너테이션 정보를 활용해서 AOP 기능을 통해 트랜잭션을 적용한다.

 

PSA(Portable Service Abstraction)

 

추상화(Abstraction)의 개념

피카소의 그림처럼 객체지향 프로그래밍 세계에서는 어떤 클래스의 본질적인 특성만을 추출해서 일반화 하는것을 바로 추상화(Abstraction)라고한다.

객체지향 프로그래밍 언어인 Java에서 코드로 추상화를 표현할 수 있는 대표적인 방법이 바로 추상 클래스와 인터페이스이다.

클라이언트가 추상화 된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것이 바로 일관된 서비스 추상화(PSA)의 기본이다.

 

일반적으로 서버 / 클라이언트 측면에서는 서버 측 기능을 이용하는 쪽을 클라이언트라고 한다. 그 대표적인 예가 웹 브라우저

그런데 코드 레벨에서 어떤 클래스의 기능을 사용하는 측 역시 클라이언트라고 볼 수 있다.

 

서비스에 적용하는 일관된 서비스 추상화 (PSA)기법

 

서비스 추상화란 위와 같은 추상화의 개념을 애플리케이션에서 사용하는 서비스에 적용하는 기법이다.

예를들어 우리가 특정 서비스를 이용할 때 클라이언트에서 인터페이스를 통해 정보를 간접적으로 받아오더라도 정보를 얻는 방식은 get() 메서드를 사용해야 한다.

이와같이 서비스의 기능을 접근하는 방식 자체를 일관되게 유지하면서 기술 자체를 유연하게 사용할 수 있도록 하는 것을 PSA(일관된 서비스 추상화)라고 한다.

 

PSA가 필요한 이유는?

PSA가 필요한 주된 이유는 어떤 서비스를 이용하기 위한 접근 방식을 일관된 방식으로 유지함으로써 애플리케이션에서 사용하는 기술이 변경 되더라도 최소한의 변경만으로 변경된 요구 사항을 반영하기 위해서이다.

Spring에서 PSA가 적용된 분야로는 트랜잭션 서비스, 메일 서비스, Spring Data 서비스 등이 있다.

 

 

학습 목표

  • 아키텍처(Architecture)의 의미를 이해할 수 있다.
  • 우리가 알아야 할 애플리케이션의 아키텍처를 이해할 수 있다.
  • 아키텍처를 통해 Spring Framework의 모듈(Module) 구성을 이해할 수 있다.

 

아키텍처(Architecture)란?

아키텍처(Architecture)는 건축 분야에서 유래된 용어로써 요구 사항을 만족하는 건축물을 짓는데 있어 청사진 같은 역할을 한다.

이처럼 컴퓨터 시스템에서의 아키텍처 역시 어떠한 시스템을 구축하는데 있어 해당 시스템의 비지니스적 요구 사항을 만족하는 전체 시스템 구조를 정의하는 것이며, 이해 당사자들이 전체 시스템 구조를 이해하는데 무리가 없도록 일반적으로 이미지나 도형 등을 많이 사용한다.

또한 아키텍처는 우선 너무 복잡하면 안된다.

 

컴퓨터 시스템에서 아키텍처 유형

시스템 아키텍처

시스템 아키텍처는 하드웨어와 소프트웨어를 모두 포함하는 어떤 시스템의 전체적인 구성을 큰그림으로 표현한 것이다.

시스템 아키텍처를 통해 기본적으로 해당 시스템이 어떤 하드웨어로 구성되고, 어떤 소프트웨어를 사용하는지를 대략적으로 알 수 있다.

또한 시스템 구성 요소들 간의 상호작용이 어떻게 이루어지는지 등 시스템이 정상적으로 동작하기위한 동작 원리 등이 시스템 아키텍처 안에 표현이 되면 이해 당사자들이 해당 아키텍처를 이해하는데 도움이 된다.

 

소프트웨어 아키텍처 / 애플리케이션 아키텍처 의미

소프트웨어는 하드웨어를 제외한 컴퓨터내의 모든 프로그램을 포괄하는 의미를 가지고 있으며 이러한 소프트웨어의 구성을 큰 그림으로 표현한 것이 소프트웨어 아키텍처이다.

 

웹 애플리케이션과 연관이 있는 계층형 아키텍처(N-티어)

  • API 계층(API Layer)

API 계층은 클라이언트의 요청을 받아들이는 계층이다. 

일반적으로 표현 계층(Presentation Layer)라고도 불리지만 REST API를 제공하는 애플리케이션의 경우 API 계층이라고 표현한다.

  • 서비스 계층(Service Layer)

서비스 계층은 API 계층에서 전달 받은 요청을 업무 도메인의 요구 사항에 맞게 비즈니스적으로 처리하는 계층이다.

애플리케이션의 핵심 로직은 서비스 계층에 포함되어 있다고 해도 과언이 아닐 정도로 애플리케이션에 있어 핵심이 되는 계층이다.

  • 데이터 액세스 계층(Data Access Layer)

데이터 액세스 계층은 비즈니스 계층에서 처리된 데이터를 데이터베이스 등의 데이터 저장소에 저장하기 위한 계층이다.

 

 

학습 목표

  • Spring Boot이란 무엇인지 이해할 수 있다.
  • Spring Boot을 사용해야 하는 이유를 알 수 있다.
  • Spring Boot의 핵심 컨셉이 무엇인지 이해할 수 있다.

 

Spring Boot이란?

Spring Boot은 Spring Framework의 편리함에도 불구하고 Spring 설정의 복잡함으로 인해 Spring 기반 애플리케이션 개발을 시작하기도 전에 어려움을 겪는 문제점을 해결하기 위해 생겨난 Spring Project 중 하나이다

 

Spring Boot을 사용해야 하는 이유

  • XML 기반의 복잡한 설계 방식 지양
  • 의존 라이브러리의 자동 관리
  • 애플리케이션 설정의 자동 구성
  • 프로덕션급 애플리케이션의 손쉬운 빌드
  • 내장된 WAS를 통한 손쉬운 배포

 

애플리케이션 설정의 자동 구성

Spring Boot은 스타터(Starter) 모듈을 통해 설치되는 의존 라이브러리를 기반으로 애플리케이션의 설정을 자동으로 구성한다.

@애너테이션 애너테이션을 Spring 애플리케이션 코드에 추가해주면 Spring Boot에서 자동 구성 설정을 활성화해준다.

 

WAS(Web Application Server)란?

Java 기반의 웹 애플리케이션을 배포하는 일반적인 방식은 개발자가 구현한 애플리케이션 코드를 WAR(Web application ARchive) 파일 형태로 빌드한 후에 WAS(Java에서는 서블릿 컨테이너라고도 부릅니다)라는 서버에 배포해서 해당 애플리케이션을 실행하는 것이다. (Java 진영에서 사용되는 대표적인 WAS에는 Tomcat이 있습니다)

즉, WAS는 구현된 코드를 빌드해서 나온 결과물을 실제 웹 애플리케이션으로 실행되게 해주는 서버입니다.

 

Spring Boot은 Apache Tomcat이라는 WAS를 내장하고 있기때문에 별도의 WAS를 구축할 필요가 없으며, Spring Boot을 통해 빌드된 jar 파일을 이용해서 명령어 한 줄만 입력 해주면 서비스 가능한 웹 애플리케이션을 실행 할 수 있다.

java -jar <jar 파일명>.jar

 

'코드스테이츠' 카테고리의 다른 글

코드스테이츠 37일차  (0) 2022.06.17
코드스테이츠 36일차  (0) 2022.06.16
학습 계획표  (2) 2022.06.15
코드스테이츠 34일차  (0) 2022.06.14
코드스테이츠 33일차 회고  (0) 2022.06.13