3 minute read

Untitled

JPA logic architecture


image



계층도


API Layer 계층

API 계층: 사용자의 요청을 받고 응답을 반환하는 계층

1. 클라이언트 요청: 사용자의 브라우저나 앱 등 클라이언트가 서버에 HTTP 요청을 보고 응답을 받게된다.
   사용자의 인터페이스 레벨의 요청과 응답을 처리하게 된다.

2.  컨트롤러(Controller): Controller 클래스가 클라이언트의 HTTP 요청을 받고, 특정 요청에 대해 어떤 처리를 해야
     할지 결정하는 엔드포인트를 정의한다. (GET,POST,PUT, DELETE)

3.  DTO(Data Transfer Object): 계층 간 데이터 전송에 사용된다.
    클라이언트로부터 받은 데이터를 서버 내부로 전달하거나, 서버에서 처리한 데이터를 클라이언트에게 응답하는 데
    사용된다. Entity의 데이터를 클라이언트에게 직접 노출하지 않고, 필요한 데이터만을 전송하는 데 유용하다.

Service 계층

서비스 계층: 애플리케이션의 비즈니스 로직을 처리하는 계층

4. 서비스(Service): 컨트롤러는 비즈니스 로직을 수행하기 위해 service 폴더 내에 정의된
   Service 클래스의 메소드를 호출한다. 이곳에서 비즈니스 규칙을 처리하고, 데이터의 유효성 검사,
   비즈니스 규칙의 적용, 트랜잭션 관리 등을 수행한다.

5. 도메인/엔티티: 비즈니스 데이터와 관련된 로직을 표현하는 객체들이다.
   데이터베이스의 테이블과 매핑되어 CRUD 작업에 사용된다.
   서비스 계층에서는 이들 엔티티를 사용하여 비즈니스 로직을 수행한다.

Data Access Layer 계층

데이터 액세스 계층: 데이터베이스와의 상호작용을 담당하는 계층

6. 레포지토리(Repository): 서비스 계층은 데이터를 영속화하거나 데이터베이스로부터 데이터를 조회하기 위해
   repository 폴더 내의 Repository 인터페이스를 사용한다.
   데이터베이스의 각 테이블에 대응하는 엔티티 클래스의 CRUD 작업을 처리합니다. 데이터 액세스 계층은
   데이터베이스 연산을 추상화하고, 비즈니스 로직과 데이터베이스의 세부 구현 사이를 분리합니다.


JPA Request and Response


요청 데이터 흐름도 (Client to Server)

  1. 클라이언트 요청: 사용자가 게시판에 글을 작성하거나 읽는 등의 요청을 보낸다.
  2. 컨트롤러: 요청을 받아 해당 서비스 로직을 호출한다.
  3. 서비스 계층: 비즈니스 로직을 수행한다. 예를 들어, 게시글 생성, 조회 등의 작업을 담당한다.
  4. 레파지토리 계층 (JPA 사용): 게시글에 대한 CRUD 작업을 JPA를 통해 처리한다. Entity 객체를 사용하여 데이터베이스와의 상호 작용을 수행한다.
  5. 데이터베이스(DB): 실제 데이터가 저장, 조회, 수정, 삭제되는 장소이다.

응답 데이터 흐름도 (Server to Client)

  1. 데이터베이스(DB): 처리 결과를 반환한다.
  2. 레파지토리 계층 (JPA 사용): JPA를 통해 데이터베이스로부터 데이터를 검색하고, 이를 Entity 객체로 변환한다.
  3. 서비스 계층: 비즈니스 로직에 따라 데이터를 처리하고, 필요한 경우 DTO(Data Transfer Object)로 변환한다.
  4. 컨트롤러: 클라이언트에 반환할 응답을 준비한다.
  5. 클라이언트: 최종적으로 사용자에게 데이터가 전달된다 (예: 게시글 목록, 게시글 내용 등).


Entity 와 Domain


의문점이 생겨 한번 찾아보았다. 개발에서 “엔티티(Entity)”와 “도메인(Domain)”이라는 용어는 종종 같은 맥락에서 사용된다. 그러나, 이 두 용어의 의미에는 약간의 차이가 있을 수 있다.

  1. 엔티티 (Entity):
    • JPA(Java Persistence API)와 같은 ORM(Object-Relational Mapping) 컨텍스트에서, 엔티티는 데이터베이스의 테이블을 반영하는 Java 클래스를 의미한다.
    • 이 클래스들은 @Entity 어노테이션으로 표시되며, 데이터베이스의 행(row)과 객체 간의 매핑을 정의한다.
    • 엔티티는 데이터베이스와의 상호작용을 위해 사용되며, 보통 ID, 열(column) 매핑, 관계 매핑 등을 포함한다.
  2. 도메인 (Domain):
    • 보다 넓은 의미에서, 도메인은 특정 비즈니스 로직이나 요구사항을 모델링하는 객체의 집합을 의미한다.
    • 도메인 모델은 해당 비즈니스의 규칙, 작업, 엔티티, 관계 등을 포함하여, 비즈니스의 문제 영역을 표현한다.
    • 때때로, “도메인 객체”는 엔티티와 동일한 의미로 사용되기도 하지만, 좀 더 넓은 범위의 비즈니스 로직과 규칙을 포함할 수도 있다.

요약

  • 엔티티: 데이터베이스 테이블과 직접적으로 매핑되는 Java 클래스, 주로 데이터의 저장과 검색에 사용됩니다.
  • 도메인: 비즈니스 로직과 요구사항을 모델링하는 더 넓은 개념으로, 엔티티를 포함할 수 있다.

따라서, 특정 컨텍스트(예: JPA 사용 시)에서 엔티티와 도메인은 같은 클래스를 가리키는 경우가 많지만, 도메인은 보다 광범위한 비즈니스 로직과 규칙을 표현하는 데 사용되는 개념이라고 할 수 있다.



JPA 사용 vs 사용하지 않았을 때의 차이점


JPA 사용

  1. 객체-관계 매핑 (ORM): JPA는 ORM(Object-Relational Mapping)을 제공하여, 객체와 관계형 데이터베이스 테이블 간의 매핑을 쉽게 해준다. 이를 통해 개발자는 객체 중심적으로 데이터를 다룰 수 있게 되며, SQL을 직접 작성하는 복잡성을 줄일 수 있다.
  2. 데이터베이스 독립성: JPA는 데이터베이스에 독립적인 프로그래밍이 가능하게 해주어, 다양한 데이터베이스 시스템에 적응할 수 있다.
  3. 표준화된 API: JPA는 Java의 표준 ORM API로, 다양한 JPA 구현체를 사용할 수 있으며 이식성이 높다.
  4. 자동화된 데이터 처리: CRUD 작업과 같은 기본적인 데이터 처리 로직을 JPA가 자동으로 처리해 준다.

JPA를 사용하지 않았을 때

  1. 직접적인 SQL 작업: 데이터베이스와의 모든 상호 작용을 SQL을 통해 직접 처리해야 합니다. 이는 데이터베이스 스키마와 밀접하게 연관되어 있어, 객체 중심의 개발이 어려울 수 있다.
  2. 데이터베이스 종속성: 특정 데이터베이스에 맞춘 SQL 작성이 필요하므로, 다른 데이터베이스로의 전환 시 코드의 변경이 필요할 수 있다.
  3. 수동적인 데이터 처리: CRUD 및 트랜잭션 관리 등을 모두 개발자가 수동으로 처리해야 한다.


맨 위로 이동하기

Leave a comment