[34일차] 아키텍처, 스프링 모듈, 스프링 부트

유태형·2022년 6월 15일
0

코드스테이츠

목록 보기
34/77

오늘의 목표

  1. 아키텍처
  2. 스프링 모듈
  3. 스프링 부트



내용

아키텍처(Architecture)

아키텍처는 구조적이라고 볼 수 있습니다. 가장 큰 그림으로 시스템 아키텍처를 표현하고 시스템은 다시 하드웨어 아키텍처소프트웨어 아키텍처로 나뉘어 집니다. 또 소프트웨어 아키텍처는 여러 소프트웨어의 종류에 따라 나뉘어 질 수 있고 소분류가 존재한다면 다시 나뉘어 질 수 있겠습니다.

어떤 요소들로 구성되고 어떻게 요소들을 사용하는지를 대략적이고 복잡하게 생각하지 않는 것이 아키텍처를 이해하는 것일 겁니다.

아래의 아키텍처 패턴 링크를 참조하면 자주사용되는 10가지 아키텍처 패턴을 확인 할 수 있습니다.

https://mingrammer.com/translation-10-common-software-architectural-patterns-in-a-nutshell/

아키텍처 패턴 중 웹 애플리케이션에서 아키텍처로 많이 사용되는 계층형 웹 애플리케이션 아키텍처를 살펴 보겠습니다.

  • API 계층(API Layer)

API 계층은 클라이언트 요청을 받아들이는 계층입니다. 일반적으로 표현 계층(Representation Layer)라고도 하지만 REST API를 제공하는 애플리케이션 경우 API계층이라고 표현합니다.

API계층은 클라이언트의 요청을 받아 서비스 계층에게 요청을 전달하는 역할을 수행합니다. 또 비즈니스 로직으로 부터 요청 처리 결과를 클라이언트에게 되돌려 주기도 합니다.

  • 서비스 계층(Service Layer)

서비스 계층은 API 계층에서 전달받은 요청을 업무 도메인의 요구 사항에 맞도록 비즈니스 로직에 맞춰 처리하는 핵심 계층입니다.

도메인이란 자바나 스프링api 같은 기술적인것이 아니라 제공중인 서비스에 맞게 어떤 일을 어떤 과정으로 처리해야 하는것 입니다.

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

데이터 엑세스 계층은 비즈니스 계층에서 생성된 데이터들을 데이터베이스에 저장하거나, 비즈니스 계층에서 필요한 데이터들을 데이터베이스에서 가져오는 역할을 하는 계층입니다.




스프링 모듈

스프링 모듈은 여러가지 기능들을 목적에 맞게 그룹화 하여 묶어놓은 것 입니다.

모듈들은 Java의 패키지 단위로 묶여있고 기능들은 클래스로 구현되어있습니다. 또 모듈은 재사용이 간으하도록 라이브러리 형태로 제공되는 경우가 많습니다.

크게 Web, AOP, Instrumentation, Message, Beans, Core, web, servlet등등은 직접 구현해 보진 않았지만, 33일차에서 짚고 넘어가 보았었습니다.

BeansCore등은 의존성 주입등에 사용되고, AOP, Instrumenttation은 AOP구현을 위하여, Web은 웹 구현등을 위해, Data Access/Integration은 데이터베이스 접근을 위해 사용되는것을 짐작할 수 있습니다.




스프링 부트(Spring boot)

스프링 부트를 줄임말로 스프링이라고 생각하시면 안됩니다.
Spring만을 사용할 경우 웹 환경 설정을 설정하는데 XML파일 조작이 매우 어려웠습니다. 이러한 개발을 시작하기도 전에 겪는 어려움을 극복하기 위해 개발된 Spring Project중 하나로 써 Spring boot가 개발되었습니다.



Spring Boot의 장점

XML 기반 복잡한 설계 방식 지양

기존의 web.xml파일에서 복잡하게 설정해야하던 것을 간단히 설정 할 수 있게 되었습니다.

의존 라이브러리의 자동 관리(라이브러리간 버전 의존)

기존에는 라이브러리를 사용하기 위해선 해당 라이브러리가 필요한 라이브러리의 이름과 버전을 일일이 추가해 주어야 했습니다. 이로 인해 빌드 및 실행에서 오류가 빈번히 발생했었지만 지금은 수동으로 설정하지 않아도 됩니다.

dependencies{
	implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    testImplementation 'org.psringframework.boot:spring-boot-starter-test'
    implementation 'com.h2database:h2'
}

이렇듯 간단한 몇줄로 많은 외부 라이브러리를 불러 들일 수 있습니다.

애플리케이션 설정 자동

Spring bootstarter모듈을 통해 의존 라이브러리를 기반으로 애플리케이션의 설정을 자동으로 구성합니다.

implementation 'org.springframework.boot:spring-boot-starter-web

starter가 존재하면 web설정을 자동으로 구성합니다.

implementation 'org.springframework.boot:spring-boot-start-jdbc

starter가 존재하면 JDBC설정을 자동으로 구성합니다.

Spring boot는 애플리케이션에 대한 설정을 직접 모두 해야하는 번거로움을 최소화 해줍니다.

@SpringBootApplication //애노테이션
public class SampleApplication{
	public static void main(String[] args){
    	SpringApplication.run(SampleApplication.class,args);
    }
}

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

손 쉬운 빌드

내장된 WAS를 통한 배포

직접 빌드 한 결과물 WAR파일WAS(Web Applictaion Server)에 올릴 필요가 없으며, 별도의 WAS를 구축할 필요가 없기 때문에 Spring Boot을 통해 빌드된 jar파일을 이용해서 웹 어플리케이션을 실행할 수 있습니다.

  • WAR : 개발자가 빌드한 웹 어플리케이션 파일
  • WAS : 서버 실행 환경, 실제로 웹 에플리케이션이 실행하게 해주는 서버 EX) 톰캣



후기

아키텍처는 이런게 있고 나중에 프로젝트를 감독할 때 쯤 필요하겠구나 싶고, 스프링 모듈은 이런걸 학습하게 되겠구나 생각이 듭니다. 또 스프링 부트를 이용하면 편리하게 비즈니스 로직에만 집중할 수 있는걸 알 수 있었습니다.




GitHub

없음!

profile
오늘도 내일도 화이팅!

0개의 댓글