6. 개발 가이드 - LikeLionTeam/BootHouse GitHub Wiki
- fix : 버그 수정과 관련된 커밋 타입. Semantic Versioning의 Patch와 관련
- feat : 새로운 기능에 대한 커밋 타입. Semantic Versioning의 Minor와 관련
- build : 빌드 관련 파일 수정에 대한 커밋 타입
- chore : 분류하기 어려운 자잘한 수정에 대한 커밋 타입
- ci : CI 관련 수정에 대한 커밋 타입
- docs : Documentation 수정에 대한 커밋 타입
- style : 코드 의미에 영향을 주지 않는 수정에 대한 커밋 타입
- refactor : 코드 리팩토링에 대한 커밋 타입
- test : 테스트 코드 수정에 대한 커밋 타입
-
각 도메인 모듈 구성
- 각 도메인 모듈은
controller,converter,infra,model,service패키지로 구성된다.
- 각 도메인 모듈은
-
엔티티와 모델 도메인
-
엔티티(Entity)는 직접 다루지 않으며,model패키지 안에 각 엔티티에 대응되는 도메인 모델을 생성한다. -
converter패키지를 통해 엔티티 <-> 도메인 모델 간 변환을 처리한다.
-
-
도메인 모델 처리
- controller, service, infra 패키지 내에서 실제 기능은 모델 모데인을 사용해 처리한다.
- 이를 통해, 특정 데이터베이스 기술과의 분리 유지가 가능해진다
-
패키지 역할
-
model: 엔디티에 대응되는 도메인 모델을 정의한다.- 생성자에
@Builder를 사용해서 변환을 용이하게 한다. - 필드 생성시 필요한 로직은 모델 내에서 처리한다.
이를 통해, 데이터베이스에 종속된 기술(JPA)로부터의 분리로, 코드 유지보수성을 높일 수 있다.
- 생성자에
-
converter: 비즈니스 로직에서 엔디티에 접근이 필요할 때, 모델 도메인과 엔디티 간의 변환을 담당한다. -
service: 실제 비즈니스 로직과 예외 처리를 담당하며, 레포지토리 인터페이스를 통해 데이터 계층과 상호작용을 한다.-
port패키지에, 서비스에서 사용하는 레포지토리 인터페이스를 정의하고, 반환타입은 모두 '모델 도메인'으로 처리한다. - service 계층에서는 다른 도메인의 레포지토리 인터페이스를 호출할 수 있지만, 다른 도메인의 서비스를 직접 호출하는 것은 피하자.
-
-
infra: service 계층의 레포지토리 인터페이스의 실제 구현부. -
controller: 오로지 해당 도메인의 서비스만 주입받아 처리하도록 한다.
-
# 1단계: 빌드 이미지 설정
FROM openjdk:17-jdk-slim AS builder
# 작업 디렉토리 설정
WORKDIR /app
# Gradle Wrapper 및 빌드 파일 복사
COPY gradlew .
COPY gradle ./gradle
COPY build.gradle .
COPY settings.gradle .
# 각 서브프로젝트의 소스 코드 및 빌드 파일 복사
COPY db/build.gradle ./db/build.gradle
COPY db/src ./db/src
COPY view/build.gradle ./view/build.gradle
COPY view/src ./view/src
# 빌드 실행
RUN ./gradlew :view:build -x test
# 2단계: 실행 이미지 설정
FROM openjdk:17-jdk-slim
# 작업 디렉토리 설정
WORKDIR /app
# 빌드 결과물 복사
COPY --from=builder /app/view/build/libs/*.jar boothouse.jar
RUN mkdir -p /app/noticeImages
# 애플리케이션 실행 명령어 설정
ENTRYPOINT ["java", "-Dspring.profiles.active=docker", "-jar", "boothouse.jar"]
# 포트 노출
EXPOSE 8080
→ 멀티 스테이징 빌드 방법 사용
Dockerfile에서 여러 단계로 이미지를 빌드하는 방법으로 , docker 이미지의 크기를 줄이고 빌드 환경/실행 환경을 분리하여 최종 이미지를 효율적으로 생성
- 소스 코드 및 빌드 스크립트를 복사하고, 빌드 실행 → jar파일 생성
- 빌드 단계에서 생성된 jar 파일만 복사하여 포함
- jar 파일을 실행하는 명령어 설정 후, 8080 포트 노출
version: '3.8'
services:
app:
image: [도커ID]/boothouse:latest
container_name: boothouse-app
ports:
- "8080:8080"
environment:
SPRING_PROFILES_ACTIVE: docker
SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/boothouse?sslmode=disable&charSet=UTF-8
SPRING_DATASOURCE_USERNAME: postgres
SPRING_DATASOURCE_PASSWORD: postgres
SPRING_MAIL_HOST: smtp.gmail.com
SPRING_MAIL_PORT: 587
SPRING_MAIL_USERNAME:
SPRING_MAIL_PASSWORD:
AWS_ACCESS_KEY_ID:
AWS_SECRET_ACCESS_KEY:
AWS_REGION: ap-northeast-2
NAVER_CLIENT_ID:
NAVER_CLIENT_SECRET:
WEBDRIVER_CHROME_DRIVER:
depends_on:
- db
- redis
db:
image: postgres:15
container_name: boothouse-db
environment:
POSTGRES_DB: boothouse
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
ports:
- "5432:5432"
volumes:
- db_data:/var/lib/postgresql/data
redis:
image: redis:latest
container_name: redis
command: ["redis-server", "--requirepass", "1234"]
ports:
- "6379:6379"
volumes:
- ./redis-data:/data
volumes:
db_data:
redis-data:
→ 기존 yml 토대로 빈 곳 작성
현재 로컬 절대경로로 지정되어있는 경로 수정
📌 dockerfile이 있는 디렉토리로 이동 후 명령어 실행
# 멀티 플랫폼 빌드를 위함
docker buildx create --use --name mybuilder
docker buildx inspect mybuilder --bootstrap
# 빌드
docker buildx build --platform linux/amd64,linux/arm64 -t [도커사용자명/프로젝트명]:latest --push .
⭐️ EC2 터미널에서 진행
- 도커 설치
sudo apt update
sudo apt install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USE
- 도커 컴포즈 설치
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
📌 로컬 터미널(docker-compose.yml 파일이 있는 위치)에서 진행
scp -i "~/Downloads/boothouse.pem" docker-compose.yml [email protected]:~/
** ubuntu~~ 는 인스턴스→ 연결 → 예시란의 ubuntu~~를 붙여넣기(.pem 경로 주의)
→ :~/ 빼먹지 않도록 주의 !
⭐️ EC2 환경의 터미널에서 (우분투) 진행
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
** QEMU가 설치X → 다중 아키텍쳐 이미지 실행 X
** 로컬에도 QEMU 설치 필! (멀티플랫폼 빌드를 위해..)
docker pull [도커닉네임]/boothouse:latest
docker-compose up -d
docker ps 명령어로 나의 컨테이너,의존 컨테이너가 실행되면 완료
코드를 수정하면, 도커이미지를 다시 빌드→풀→ 실행 반복
-
docker logs -f <컨테이너 ID>: 로그 확인 가능
-
docker stop <실행중인 프로젝트 컨테이너 ID>: 해당 프로젝트만 중지 (DB…는 중지 X)
-
docker-compose down: 현재 실행중인 모든 서비스 중지
EC2 환경 터미널 켜기
- .pem 파일을 다운받은 디렉토리로 이동
- EC2 인스턴스 → 연결 → SSH 클라이언트 → “ 예: “ 부분 복사
- 붙여넣기