블로그 테이블 구조 확인
컬럼명 | 자료형 | null | 허용 키 | 설명 |
id | BIGINT | N | 기본키 | 일련번호, 기본키 |
title | VARCAR(255) | N | 게시물 제목 | |
content | VARCAR(255) | N | 내용 |
스프링 부트와 JPA 프로젝트에서 패키지 구조를 구성하는 트렌드는 도메인 주도 설계(Domain-Driven Design, DDD)의 원칙을 사용하는 사례가 많이 보인다. 이는 애플리케이션의 구조를 기능이나 역할에 따라 나누기보다는, 도메인 중심으로 나누어 애플리케이션의 유지보수성과 확장성을 높이려는 의도나 방식이다.
(여기서 도메인은 애플리케이션이 해결하려는 특정 비즈니스 문제나 현실 세계의 문제를 의미한다. 예를 들어, 은행 애플리케이션에서 "계좌", "고객", "거래"는 중요한 비즈니스 개념이며, 이것들이 바로 그 애플리케이션의 "도메인" 이 된다.)
여기서 잠깐!
DSL 이란?
개발 분야에서 DSL은 "Domain-Specific Language"의 약자로, 특정 도메인이나 문제 영역에 특화된 프로그래밍 언어나 언어적 표현을 의미한다. 일반적인 프로그래밍 언어와 달리, DSL은 특정 작업을 더 쉽게 수행할 수 있도록 설계되어 있다. 예를 들어, SQL(Structured Query Language)은 데이터베이스를 다루기 위한 DSL이고, HTML은 웹 페이지를 구조화하는 데 특화된 언어이다. DSL을 사용하면 특정 도메인에 대한 작업을 더 간결하고 효율적으로 수행할 수 있지만, 범용 언어에 비해 활용할 수 있는 범위는 제한적일 수 있다. 필요에 따라 DSL을 정의하고 구현하면, 개발 효율성을 크게 향상시킬 수 있다.
DDD 방식의 프로젝트 구조만들어 보기
1. 도메인별로 패키지 구성
- 각 도메인에는 그 도메인과 관련된 모든 엔티티, 서비스, 레포지토리, DTO 등이 포함된다.
2. 공통 패키지 (설정, 유틸리티 등)
- 도메인과는 별개로, 설정 관련 패키지나 공통적으로 사용하는 유틸리티 패키지를 포함한다.
package com.example.demo._domain.blog.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
// 반드시 기본 생성자가 있어야 한다.
@Entity(name = "tb_article")
@NoArgsConstructor
@Data
public class Article {
// 특정 생성자에만 빌더 패턴을 추가할 수 있다.
@Builder
public Article(String title, String content){
this.title = title;
this.content = content;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // DB로 위임
@Column(name = "id", updatable = false) // updatable = false 수정 막음
private Long id;
@Column(name = "title", nullable = false) // nullable = false not null
private String title;
@Column(name = "content", nullable = false) // nullable = false not null
private String content;
}
'Spring boot > Blog 프로젝트 만들기(JPA)' 카테고리의 다른 글
[Blog] 블로그 프로젝트 만들기 - 4 (서비스, 컨트롤러 만들기) (0) | 2024.10.02 |
---|---|
[Blog] 블로그 프로젝트 만들기 - 3 (레포지토리 만들기) (0) | 2024.10.01 |
[Blog] 블로그 프로젝트 만들기 - 1 (REST API) (1) | 2024.10.01 |
DELETE 방식에 이해 및 실습 (1) | 2024.09.30 |
PUT 방식에 이해 및 실습 (0) | 2024.09.30 |