# Intellij) JDBC 프로젝트 (6) UI와 Service

> ***Simple JDBC Project (kor)  
> (1) ***[Java, DB 설치 + Docker Compose로 쉽게 해 보기](https://letsdev.hashnode.dev/intellij-jdbc-1-kor)  
> (***2)*** [***프로젝트 생성, Postgresql 컨테이너 게시***](https://letsdev.hashnode.dev/intellij-jdbc-2-kor)  
> ***(3)*** [***Flyway 도입하기***](https://letsdev.hashnode.dev/intellij-jdbc-3-kor)  
> ***(4)*** [JDBC 연결하기](https://letsdev.hashnode.dev/intellij-jdbc-4-kor)  
> (5) [위임된 Main Application](https://letsdev.hashnode.dev/intellij-jdbc-5-kor)  
> (6) UI와 Service

# UI와 서비스의 구분

사용자에게 보여 주고 상호작용을 하는 '창구' 영역과, 그때 발생할 동작을 수행하는 '실무' 영역을 구분해 사용합니다. 식당으로 치면 마치 웨이터와 요리사가 업무를 나누는 것처럼요.

* **UI**: User Interface. 사용자에게 보여 주는 화면으로 이해할 수 있습니다. 조금 더 구체적으로는 사용자와 상호작용하는 영역을 뜻합니다.
    
* **Service**: 뒤에서 동작할 소스 코드 영역을 서비스라고 구분했습니다. 반드시 서비스라고 명명해야 하는 것은 아닙니다. 우리가 이해하기 편한 용어로는 Service, Manager 등 다양한 표현이 있을 수 있습니다.
    

(참고할 수 있는 개념: MVC 패턴)

## 대표적인 UI 분류

우리가 접할 수 있는 UI는 아주 다양합니다. 그중 대표적인 두 가지는 다음과 같습니다.

* **CLI**: 텍스트 기반의 UI입니다. TUI, CUI라고도 부를 수는 있습니다.
    
* **GUI**: 그래픽 기반의 UI입니다. 주로 데스크톱 애플리케이션, 게임 클라이언트, 웹 서비스의 페이지 등이 GUI에 해당합니다. 모바일 애플리케이션도요.
    

그 외에도 우리의 신체 동작을 센싱하여 반응하거나 자연물·사물을 이용한 각종 상호작용 등에도 용어를 붙여서 NUI, OUI라고 부르기도 합니다.

우리는 이번에 CLI로 구축해 볼 계획이죠.

## 서비스에도 추가적인 계층이 있을까?

사실 UI에도 여러 계층을 둘 수 있지만, 서비스는 더더욱 계층의 구분이 중요합니다.

다음 중 우리는 수평적인 분류와 수직적인 구분을 모두 수행합니다.

* 수평적 분류: 리소스(다루려는 데이터, 주제)나 피처(기능) 단위로 서비스를 분류합니다.
    
* 수직적 분류: 하나의 기능 구현에서도 세부적인 단계와 역할에 따라 계층을 구분합니다.
    

### 서비스와 DAO

UI 외의 기능 처리를 서비스에서 한다면, 그중에서도 데이터베이스에 접근해서 데이터의 입출력 작업을 담당하는 것을 'DAO'라고 부릅니다. 보통 서비스와 용어와 계층을 나누어서 보는 편입니다.

**UI가 주요 업무를 서비스에 인계한다면, 서비스는 작업들 중 데이터베이스와 주고 받을 내용을 DAO에게 인계하는 식입니다.**

* DAO: Data Access Object. 데이터베이스에 접속해서 데이터의 입출력을 담당합니다.
    

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1716358201506/3128956d-320b-4996-9a04-ad7a42ec841a.png align="center")

다음 글에서는 그중 DAO를 만드는 작업을 먼저 해 보겠습니다.

---

**&lt; Prev**

[(5) 위임된 Main Application](https://letsdev.hashnode.dev/intellij-jdbc-5-kor)
