JAVA

<Java Spring> Spring Boot 패키지

제이미로그 2024. 7. 15. 18:03

📌 1. JAR, WAR, EAR

 

JAR (Java Application Resource or Java Application Archive)

JAR 파일은 자바 애플리케이션과 관련된 클래스 파일, 메타데이터, 리소스 파일 등을 하나의 압출 파일로 묶은 것이다. 이 파일은 자바 애플리케이션을 쉽게 배포하고 설치할 수 있도록 하는 데 도움이 된다. 또한, JAR 파일은 자바 라이브러리를 포함할 수 있어, 재사용 가능한 코드 모듈을 효율적으로 관리할 수 있다. 즉, 개발자가 개발하기 위해 필요한 기능을 압축한 것을 JAR 이라고 한다.

 

WAR (Web Application Resource or Web Application Archive)

WAR 파일은 웹 어플리케이션과 관련된 파일들을 하나의 압축 파일로 묶은 것이다. JSP, 서블릿(Servlet), 클래스 파일, XML 설정 파일, 웹 리소스(HTML, CSS, 자바스크립트, 이미지 등) 웹 애플리케이션 구성을 포함한다. WAR 파일은 웹이나 애플리케이션 서버에 배포할 수 있으며, 이를 통해 웹 애플리케이션을 쉽게 설치하고 관리할 수 있다. JAR은 웹으로 실행이 불가능하지만, WAR로 묶었을 때는 사용이 가능하다. 

 

EAR (Enterprise Application Resource or Enterprise Application Archive)

EAR 파일은 자바 기반의 엔터프라이즈 애플리케이션을 패키징 하는데 사용되는 파일 형식이다. EAR 파일은 웹 애플리케이션(WAR 파일), EJB(Enterprise Java Bean) 모듈, 자바 어플리케이션(JAR 파일) 및 관련 리소스를 포함하며, 이들은 각각 서로 다른 계층의 구성 요소를 나타낸다. EAR 파일을 사용하면 여러 모듈과 리소스가 포함된 대규모 엔터프라이즈 애플리케이션을 하나의 파일로 통합하여 배포하고 관리할 수있다. 주로 자바 EE 애플리케이션 서버에서 사용되며, 서버 관리자는 EAR 파일을 통해 애플리케이션의 배포와 관리를 손쉽게 수행할 수 있습니다. 

 

 

📌 2. MVC 패턴

 

패키지 구조를 알기 위해서는 기본적으로 MVC 패턴을 이해해야 한다. MVC는 프로젝트를 구성할 때 Model, View, Controller의 역할로 구분하는 패턴이다. 

 

WAR 파일은 웹 어플리케이션과 관련된 파일들을 하나의 압축 파일로 묶은 것이다. JSP, 서블릿(Servlet), 클래스 파일, XML 설정 파일, 웹 리소스(HTML, CSS, 자바스크립트, 이미지 등) 웹 애플리케이션 구성을 포함한다.

 

Model

애플리케이션의 정보, 데이터를 나타낸다. 데이터베이스, 처음의 정의하는 상수, 초기화값, 변수 등을 의미한다. 추가로 이러한 데이터를 파싱하거나 데이터베이스와의 통신 또한 책임지는 컴포넌트(비즈니스 로직) 이다. 

<모델의 규칙>

1. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.

2. 뷰나 컨트롤러에 대해서 어떤 정보도 알지 말아야 한다.

3. 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야 한다. 

 

View

사용자가 보는 화면, 즉 input 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 의미한다. 데이터를 기반으로 사용자들이 볼 수 있는 화면이다. 

<뷰의 규칙>

1. 모델이 가지고 있는 정보를 따로 저장해서는 안된다.

2. 모델이나 컨트롤러와 같이 다른 구성요소를 몰라야 한다. 

3. 변경이 일어나면 변경 통지에 대한 처리 방법을 구현해야 한다. 

 

Controller

Model과 View의 중간다리 역할을 한다. 즉, 사용자가 데이터를 클릭하고, 수정하는 것에 대한 "이벤트"들을 처리하는 부분을 의미한다. 

<컨트롤러의 규칙>

1. 모델이나 뷰에 대해서 알고 있어야 한다.

2. 모델이나 뷰의 변경을 모니터링 해야 한다.

 

📌 3. Spring Web Layer

스프링에는 5가지 요소가 존재한다.

 

1. Web Layer

컨트롤러(@Controller)가 대표적이고, 이외에도 필터(@filter), 인터셉터, 컨트롤러 어드바이스 등이 포함된다. 외부 요청과 응답에 대한 전반적인 영역을 의미한다.

 

2. Service Layer

말 그대로 서비스(@Service) 이다. 일반적으로 컨트롤러와 저장소(Repository, Dao) 의 중간에 위치한다. 트랜젝션(@Transactional)과 도메인 간의 연산 순서를 보장해준다.

 

3. Repository Layer

DB와 같은 데이터 저장소에 접근하는 영역이다. JPA를 사용한다면 @Repository를 생각하면 된다. DAO라고도 한다.

 

4. DTOs

DTO(Data Transfer Object)는 계층 간의 데이터 교환을 위한 객체이다.

 

5. Domain Model

개발 대상, 즉 도메인을 모든 사람이 동일한 관점에서 이해할 수 있고 공유할 수 있도록 단순화한 것을 도메인 모델이라고 한다. 비즈니스 로직 처리. JPA를 사용한다면, @Entity가 사용되는 영역 또한 도메인 영역

 

📌 4. 동작과정

 

📌 5. 구조

 

스프링 부트는 다음의 형식으로 구성되어 있다. 

 

src/main/java

자바 파일들을 담는다.

- web(controller)

- service

- db (repository (dao), entity)

- entity

- global (공통적으로 사용되는 것들, auth, exception)

- model(dto)

- config

 

src/main/resources

리소스 파일들을 담는다.

- static (js, css, img)

- templates (thymeleaf)

- application.properties

 

src/test/resources

테스트에 필요한 설정파일

 

 

📌 6. 제네릭 타입 종류

타입 설명
<T> Type
<E> Element
<K> Key
<V> Value
<N> Number

 

 

📌 7. 제네릭 함수형 인터페이스 Generic Functional Interface

[Type Parameter]

T : type R : Return Type

함수형 인터페이스 Descripter Method  
Predicate T -> boolean boolean test(T t) java.util.function
Consumer T -> void void accept(T t) java.util.function
Supplier () -> T T get() java.util.function
Function<T, R> T -> R R apply(T t) java.util.function
Comparator (T, T) -> int int compare(T o1, To2) java.util
Runnable () -> void void run() java.lang
Collable () -> T V call() java.util.concurrent

 

제네릭 함수형 인터페이스(Generic Functional Interface)는 자바에서 사용되는 함수형 인터페이스에 제네릭을 도입했다. 다양한 타입의 매개변수와 리턴 타입을 갖아 코드의 재사용성을 높이고 타입 안전성을 확보할 수 있다. 

함수형 인터페이스는 단 하나의 추상 메서드만을 가지고 있으며, 자바 8에서 도입된 람다 표현식과 함께 사용된다. 함수형 인터페이스로는 'Function', 'Predicate', 'Consumer', 'Supplier' 등이 있다. 

T : type R : Return Type