# 스프링 에센셜 프로젝트 만들기

## 초기 설정

* 멀티 모듈
* 클린 아키텍처
* 롬복 셋팅
* 로깅 설정
* 메시지 / 국제화
* JSON 파싱 (ObjectMapper 설정)
* DB 연동
* Docker 인프라
* JPA 설정, QueryDSL

## 기능

* 로그인&#x20;
  * 인증/인가
  * 세션/쿠키
* 예외처리 (핸들러)
* 벨리데이션 (검증)
* API 문서화 (Swagger)
* 단위 테스트 / 통합 테스트
*

## 기술 선택 방법

* 예외처리 방법
  * 객체 생성자, 생성 메소드에서 validation 해서 throw 하는 방식을 선호 (객체가 낼 수 있는 오류는 객체에서 발생시키자)
* 상수 관리
  * Enum : 도메인 용어와 최대한 개발 용어를 일치 시키지만 그러지 못했다면 Enum 으로 관계를 맺어주자
  * 상수 딕셔너리
* 엔티티 설계
* 아키텍처
  * 클린 아키텍처
    * 도메인 중심의 클린 아키텍처는 모듈간 재사용성을 높여준다.
  * 레이어드 아키텍처
    * Controller - Service - Repository 로 각각 역할이 매우 명확하다.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://programmer-jjy.gitbook.io/second-brain/portfolio/undefined.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
