본문 바로가기

프로젝트 기록/백엔드 심화 부트캠프

241210 프로젝트 TIL

도메인 주도 설계 (DDD, Domain-Driven Design) 프로젝트 구조 설계하기

1) application 계층

비즈니스 로직을 실행하고, 도메인 모델을 조작하며, 외부 인터페이스와 도메인 간의 중재 역할을 수행한다.

- 외부와 연결되는 service 

- 애플리케이션 내부에서만 사용되는 dto (요청/응답 x)

 

2) domain 계층

애플리케이션의 핵심 비즈니스 로직과 규칙을 포함한다.

ex) model, repository, 핵심 비즈니스 service (외부와 연결 x)

- model 

- 인터페이스만 있는 repository (추상화)

 

3) infrastructure 계층

외부 시스템과의 통합을 담당하며, 기술적인 세부 사항을 처리한다. 

- configuration

- domain 계층의 인터페이스를 구현해서 실제 데이터 저장소와의 상호작용을 처리하는 repository (실제 구현체)

 

4) presentation 계층

사용자 또는 외부 시스템과의 상호작용을 처리하며, HTTP 요청/응답과 같은 인터페이스를 관리한다. 

- controller

- request, response (HTTP 요청의 응답의 형태를 표현함)

 

postgreSQL 환경 변수 설정

db 설정을 환경 변수로 추가해보자.

Edit configuration 으로 들어가서 Modify Options을 누른 후 Environment variables 설정을 해준다.

db 설정에 필요한 url, username, password 를 넣어준다.

 

PostGIS, JPA를 사용해 위도 경도 데이터 다루기

1) PostGIS 설치하기

 

Application Stack Builder에 접속해서 PostGIS를 따로 설치해준다.

그리고 사용을 원하는 DB에서 PostGIS 확장 기능을 활성화해준다.

PostGIS 기능 활성화
잘 활성화 되었는지 버전 확인을 하며 확인해준다. 활성화 완료!

 

2) 인텔리제이에서 설정 추가하고 Point 컬럼 추가하기

 

먼저 gradle.build에 설정을 추가한다.

// Point
implementation 'org.postgresql:postgresql'
// Point - hibernate-spatial
implementation 'org.hibernate:hibernate-spatial:5.6.11.Final'

 

다음으로 생성한 위도와 경도를 Point로 저장해주어야 하기 때문에 GeoUtils 클래스가 필요하다.

@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class GeoUtils {
  public static Point toPoint(double lng, double lat) {
    return new GeometryFactory().createPoint(new Coordinate(lng, lat));
  }
}

 

엔티티에는 주소, 생성된 위도와 경도, Point로 변경한 location 정보를 모두 저장해줄 것이다.

이때 postgreSQL에 Point 값으로 저장할 컬럼에 columnDefinition 을 따로 명시해줘야한다. 

@Column(columnDefinition = "geometry(Point, 4326)", nullable = false)
private Point location;

db엔 geometry로 잘 들어간 걸 확인할 수 있다!

 

+) response에는 복잡한 Point 타입을 같이 보내줄 필요 없이, 위도 경도와 주소만 깔끔하게 보내주면 되겠다고 생각했다.

{
    "code": 1,
    "msg": "허브가 생성되었습니다.",
    "data": {
        "hubId": "6c1bc34a-6f45-4020-8a5f-f4128d296656",
        "hubName": "테스트 허브",
        "address": "임시 주소값",
        "latitude": 37.2749264,
        "longitude": 126.9994644,
        "deleted": false
    }
}

'프로젝트 기록 > 백엔드 심화 부트캠프' 카테고리의 다른 글

241218 프로젝트 마무리 회고 TIL  (0) 2024.12.19
241119 프로젝트 TIL  (0) 2024.11.19
241118 프로젝트 TIL  (1) 2024.11.18
241115 프로젝트 TIL  (1) 2024.11.15
241114 프로젝트 TIL  (2) 2024.11.14