-
Notifications
You must be signed in to change notification settings - Fork 1
doc: 리드미 초안 #413
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
doc: 리드미 초안 #413
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,10 +1,266 @@ | ||
| # Zipline 프로젝트 문서 | ||
| <!-- logo --> | ||
| <div align="center"> | ||
| <img src="https://github.com/user-attachments/assets/062fcbb7-3238-463e-8ae5-7c8a66bc321e" height=200 /> | ||
| </div> | ||
|
|
||
| 이 디렉토리는 Zipline 프로젝트의 기술 문서를 포함하고 있습니다. | ||
| <!-- | ||
| ## 당신의 중개 업무에 필요한 단 하나의 라인 ZIPLINE | ||
| --> | ||
|
|
||
| ## 문서 구조 | ||
| <div align="center"> | ||
| <a href="https://zip-line.kr"> | ||
| <img src="https://img.shields.io/badge/ZIPLINE-배포_사이트-4285F4?style=for-the-badge&logoColor=white" alt="배포 링크" /> | ||
| </a> | ||
| <p><code>https://zip-line.kr</code></p> | ||
| <img src="https://img.shields.io/badge/-readme.md-important?style=flat&logoColor=white" /> | ||
| <img src="https://img.shields.io/badge/release-v1.0.0-yellow?style=flat&logoColor=white" /> | ||
| <br/> | ||
| <img src="https://img.shields.io/badge/프로젝트 기간-2025.03.17~2025.05.16-green?style=flat&logo=&logoColor=white" /> | ||
| </div> | ||
|
|
||
| - [다이어그램](diagrams/): 시스템 아키텍처 및 프로세스 흐름도 | ||
| - [프록시 기반 매물 수집 서비스 흐름도](diagrams/proxy-article-service-flow.md) | ||
| - [문제 해결](troubleshoot/): 주요 문제 해결 문서 | ||
| - [2025-04-25: Redis 관련 StackOverflowError 문제 해결](troubleshoot/2025-04-25_RedisError.md) | ||
|
|
||
|
|
||
|
|
||
| <br /> | ||
|
|
||
|
|
||
| ## 📱 서비스 시연 영상 | ||
|
|
||
| <div align="center"> | ||
| <img src="https://github.com/user-attachments/assets/668b92be-c38d-4767-960c-f072af613fa2" height=200 /> </div> | ||
|
|
||
|
|
||
| ## 📝 서비스 소개 | ||
| > 집라인(Zipline)은 "집(Home)"과 "라인(Line)"의 합성어로, 공인중개사가 부동산과 고객을 최적의 경로로 연결하는 다리 역할을 할 수 있도록 돕습니다. | ||
|
|
||
| ## 🚀 주요 기능 | ||
| ### 📊 통계 | ||
|
|
||
| > 대시보드 화면에서 계약, 고객, 상담 현황을 요약해 제공하여, 중개사가 현재 업무 상황을 한눈에 파악할 수 있도록 돕습니다. | ||
|
|
||
|
|
||
|
|
||
| ### 📅 일정 | ||
|
|
||
| > 주간/월간 단위로 계약 일정과 상담 일정을 조회하고 관리할 수 있으며, 일정을 추가, 수정, 삭제하는 기능을 통해 체계적인 스케줄 관리를 지원합니다. | ||
|
|
||
|
|
||
|
|
||
| ### 📋 설문 | ||
|
|
||
| > 신규 고객 유입 시 필요한 정보를 사전에 수집할 수 있는 설문 기능을 지원합니다. | ||
| > | ||
| > QR코드 및 URL 링크를 통해 간편하게 설문을 배포하고, 제출된 답변을 통해 고객의 니즈를 빠르게 파악할 수 있습니다. | ||
|
|
||
|
|
||
|
|
||
| ### 📄 계약 | ||
|
|
||
| > 고객과 매물 간의 계약 과정을 체계적이고 효율적으로 관리합니다. | ||
|
|
||
|
|
||
|
|
||
| ### 🗨️ 상담 | ||
|
|
||
| > 고객과의 상담 기록을 등록하고 조회할 수 있으며, 상담 일시나 고객 정보를 기준으로 빠르게 검색할 수 있습니다. | ||
|
|
||
|
|
||
|
|
||
| ### 🏢 매물 | ||
|
|
||
| > 매물을 등록하고, 상세 조건(가격, 면적, 반려동물 여부 등)을 기준으로 조회 및 필터링할 수 있으며, 매물 히스토리도 관리할 수 있습니다. | ||
|
|
||
|
|
||
|
|
||
| ### 👥 고객 | ||
|
|
||
| > 고객 정보를 등록하고, 다양한 필터링 및 라벨링 기능을 통해 고객을 체계적으로 분류 및 관리할 수 있으며, 고객별 계약/상담/매물 내역도 손쉽게 관리할 수 있습니다. | ||
|
|
||
|
|
||
|
|
||
| ### 📩 문자 | ||
|
|
||
| > 단체 문자 발송, 문자 템플릿 관리, 생일 및 계약 기간 만료 전 알림 문자 발송 기능을 통해 고객 커뮤니케이션을 손쉽게 자동화하고 관리할 수 있도록 합니다. | ||
|
|
||
|
|
||
|
|
||
| ### 🌐 외부 매물 데이터 조회 | ||
|
|
||
| > 외부 부동산 플랫폼(네이버, 직방)에서 매물 정보를 확인할 수 있도록 하여, 중개사의 정보 수집 업무를 간편하게 만듭니다. | ||
|
|
||
| <br /> | ||
|
|
||
| ## ⚙ 기술 스택 | ||
|
|
||
| ### Front-end | ||
| <div> | ||
| <img src="https://img.shields.io/badge/react-0769AD?style=for-the-badge&logo=react&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/React_Router-CA4245?style=for-the-badge&logo=react-router&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/vercel-000000?style=for-the-badge&logo=vercel&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/axios-5A29E4?style=for-the-badge&logo=axios&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/vite-646CFF?style=for-the-badge&logo=vite&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/npm-CB3837?style=for-the-badge&logo=npm&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/typescript-3178C6?style=for-the-badge&logo=typescript&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/mui-007FFF?style=for-the-badge&logo=mui&logoColor=white"> | ||
| </div> | ||
|
|
||
| ### Back-end | ||
| <div> | ||
| <img src="https://img.shields.io/badge/Spring Boot-6DB33F?style=for-the-badge&logo=springboot&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/Spring Security-6DB33F?style=for-the-badge&logo=springsecurity&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/JWT-black?style=for-the-badge&logo=JSON%20web%20tokens"> | ||
| <img src="https://img.shields.io/badge/redis-DC382D?style=for-the-badge&logo=redis&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/java-%23ED8B00.svg?style=for-the-badge&logo=openjdk&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/gradle-02303A?style=for-the-badge&logo=gradle&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/querydsl-0769AD?style=for-the-badge&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/jpa-59666C?style=for-the-badge&logo=hibernate&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/mariadb-003545?style=for-the-badge&logo=mariadb&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/liquibase-2962FF?style=for-the-badge&logo=liquibase&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/rest_api-009688?style=for-the-badge&logo=postman&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/Swagger-85EA2D?style=for-the-badge&logo=swagger&logoColor=black"> | ||
| <img src="https://img.shields.io/badge/yaml-%23ffffff.svg?style=for-the-badge&logo=yaml&logoColor=151515"> | ||
| </div> | ||
|
|
||
| ### Infra | ||
| <div> | ||
| <img src="https://img.shields.io/badge/GitHub-181717?style=for-the-badge&logo=Github&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/GitHub_Actions-2088FF?style=for-the-badge&logo=githubactions&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/Docker_Hub-2496ED?style=for-the-badge&logo=docker&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/zsh-4EAA25?style=for-the-badge&logo=gnubash&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/Amazon EC2-FF9900?style=for-the-badge&logo=amazonec2&logoColor=black"> | ||
| <img src="https://img.shields.io/badge/Amazon S3-569A31?style=for-the-badge&logo=amazons3&logoColor=black"> | ||
| <img src="https://img.shields.io/badge/AWS_ElastiCache-FF9900?style=for-the-badge&logo=amazon-aws&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/Amazon_Linux-232F3E?style=for-the-badge&logo=amazon-aws&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=docker&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/nginx-%23009639.svg?style=for-the-badge&logo=nginx&logoColor=white"> | ||
| </div> | ||
|
|
||
| ### Tools | ||
| <div> | ||
| <img src="https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/Notion-000000?style=for-the-badge&logo=notion&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/IntelliJ_IDEA-000000?style=for-the-badge&logo=intellijidea&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/Neovim-57A143?style=for-the-badge&logo=neovim&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/Cursor-1d9bf0?style=for-the-badge&logo=cursor&logoColor=white"> | ||
| <img src="https://img.shields.io/badge/github_copilot-8957E5?style=for-the-badge&logo=github-copilot&logoColor=white"> | ||
|
|
||
| </div> | ||
|
|
||
| <br /> | ||
|
|
||
| ## 🛠️ 프로젝트 아키텍처 | ||
|  | ||
|
|
||
|
|
||
| ## 🛠️ CI / CD 파이프라인 | ||
|
|
||
| ⚙ GithubAction + DockerHub CI/CD Process | ||
| <details> <summary><b>1. GitHub Actions + DockerHub </b></summary> <br> | ||
|
|
||
| apiserver와 crawlerserver 멀티모듈 프로젝트의 백엔드 배포를 자동화. | ||
| 핵심 기능: | ||
|
|
||
| 1. 코드 변경 감지: dev 또는 test 브랜치에 푸시되거나 PR이 생성되면 CI/CD 워크플로우가 자동으로 시작됩니다. | ||
| 2. 자동화된 테스트 및 빌드: 각 모듈의 유닛 및 통합 테스트를 실행하여 코드 안정성을 검증하고, 독립적인 JAR 파일로 빌드합니다. | ||
| 3. Docker 이미지 관리: 빌드된 JAR 파일은 전용 Dockerfile을 통해 Docker 이미지로 변환되며, 이 이미지들은 Docker Hub에 푸시되어 중앙에서 관리됩니다. | ||
| - dev 브랜치: apiserver:dev, crawlerserver:dev 태그로 이미지를 푸시하고 개발 전용 EC2 인스턴스에 배포됩니다. SPRING_PROFILES_ACTIVE=dev와 같은 개발 환경 변수가 주입됩니다. | ||
| - test 브랜치: apiserver:test, crawlerserver:test 태그로 이미지를 푸시하고 테스트 전용 EC2 인스턴스에 배포됩니다. SPRING_PROFILES_ACTIVE=test와 같은 테스트 환경 변수가 주입됩니다. | ||
| 4. 분기별 EC2 배포: 각 브랜치(dev/test)에 맞는 EC2 인스턴스에 SSH로 접속하여, 기존 컨테이너를 중지 및 제거하고 최신 Docker 이미지를 Pull 받아 실행합니다. | ||
| 5. 환경 변수 주입: GitHub Secrets에 정의된 민감한 환경 변수들이 안전하게 Docker 컨테이너에 주입됩니다. | ||
|
|
||
|
|
||
| </details> <details> <summary><b>2. Vercel을 활용한 프론트엔드 배포</b></summary> <br> | ||
|
|
||
| 이 전략은 프론트엔드 애플리케이션의 배포를 효율적으로 처리합니다. | ||
| 핵심 기능: | ||
|
|
||
| 자동 배포: Vercel의 통합 CI/CD 기능을 활용하여 Git 저장소에 푸시되는 변경 사항을 자동으로 감지하고 빌드하여 배포합니다. | ||
| Preview Deployments: PR 생성 시 자동으로 Preview 환경을 제공하여, 실제 병합 전에 변경 사항을 쉽게 검토할 수 있습니다. | ||
| 글로벌 CDN: Vercel의 글로벌 CDN을 통해 사용자에게 빠르고 안정적인 서비스 접근성을 제공합니다. | ||
| 간편한 환경 설정: Vercel 대시보드에서 환경 변수 및 도메인 설정을 직관적으로 관리할 수 있습니다. | ||
|
|
||
| </details> <details> <summary><b>3. Redis, S3, RDS를 용도에 맞게 분리하여 확장성 보장</b></summary> <br> | ||
|
|
||
| 이 전략은 클라우드 서비스를 용도에 따라 분리하여 사용함으로써 시스템의 확장성과 안정성을 극대화합니다. | ||
| 핵심 기능: | ||
|
|
||
| Elasticache를 사용한 Redis (캐싱/토큰 관리): 인메모리 데이터 스토어인 Redis를 활용하여 빠른 데이터 접근이 필요한 캐싱, 사용자 토큰 관리, 실시간 데이터 처리 등에 사용합니다. 이를 통해 데이터베이스 부하를 줄이고 애플리케이션 응답 속도를 향상시킵니다. | ||
|
|
||
| Amazon S3 (객체 스토리지): 확장 가능한 클라우드 객체 스토리지인 S3를 이용하여 이미지, 동영상, 문서 등 정적 파일 및 대용량 데이터를 저장하고 관리합니다. 웹 서버와 분리하여 파일 저장 공간에 대한 확장성 문제를 해결합니다. | ||
|
|
||
| Amazon RDS (관계형 데이터베이스): 관계형 데이터베이스 서비스인 RDS를 사용하여 애플리케이션의 핵심 비즈니스 로직과 관련된 구조화된 데이터를 저장하고 관리합니다. RDS는 자동 백업, 복제, 패치 등 관리형 서비스를 제공하여 데이터베이스 운영 부담을 줄입니다. | ||
|
|
||
| </details> | ||
|
|
||
| <br /> | ||
|
|
||
|
|
||
| ## 🗂️ 기술 문서 | ||
| [📄 API 명세서](https://api.zip-line.kr/swagger-ui/index.html) | ||
|
|
||
| [📋 기능 명세서](notion.so/1f4a6de2aa428079b5f6ca5839b4f9f8?pvs=4) | ||
|
|
||
| [🔧 트러블 슈팅](troubleshoot/) | ||
|
|
||
| [📖 메뉴얼](manuals/) | ||
|
|
||
| [📊 ERD](https://www.erdcloud.com/d/NzDLMgfcF7efTeKRt) | ||
| <br /> | ||
|
|
||
| ## 💁♂️ 프로젝트 팀원 | ||
|
|
||
| | 이름 | 역할 | 담당 업무 | | ||
| |-----|--------------|----------------------------------------------------------------------------------| | ||
| | 채지원 | 백엔드 개발자 (팀장) | 문자 발송 / 문자 템플릿 관리, 공인중개사 일정 관리, 프론트엔드 개발 및 배포 | | ||
| | 신중우 | 백엔드 개발자 | AWS(EC2,RDS,Redis), CICD, 공개매물 크롤링 서버, 조회, 대쉬보드 통계, 리퀴베이스, 법정동코드 조회, 프로젝트 구조 리펙토링| | ||
| | 신윤상 | 백엔드 개발자 | 고객 관리, 설문 관리, 상담 관리, ExcelImport | | ||
| | 조수연 | 백엔드 개발자 | 회원가입/로그인, 계약, 매물, 고객 라벨 관리, 프론트 엔드 개발(계약, 매물 페이지) | | ||
|
|
||
| <br /> | ||
|
|
||
|
|
||
| <!-- | ||
| ## 🐛 이슈 보고 & 개선사항 제안 | ||
|
|
||
| <div align="center"> | ||
| <a href="https://docs.google.com/forms/d/e/1FAIpQLScIPclLeQxwTgsHOG_xAJ6ofQHC9oqUHbCUsKPzYhVFMwv5iw/viewform?usp=dialog"> | ||
| <img src="https://img.shields.io/badge/이슈_및_개선사항_제안하기-FF5722?style=for-the-badge&logo=googleforms&logoColor=white" alt="이슈 및 개선사항 제안하기" /> | ||
| </a> | ||
| </div> | ||
| <p align="center"><i>이슈 및 개선사항은 위 설문폼을 통해 남겨주시면 감사하겠습니다</i> 😊</p> | ||
| </br> | ||
| --> | ||
|
|
||
| ## 📁 관련 레포지토리 | ||
|
|
||
| <div align="center"> | ||
| <a href="https://github.com/Kernel360/Kernel360-KDEV4-ZIPLINE-FE"> | ||
| <img src="https://img.shields.io/badge/프론트엔드_레포지토리-181717?style=for-the-badge&logo=github&logoColor=white" alt="프론트엔드 레포지토리" /> | ||
| </a> | ||
| </div> | ||
|
|
||
| <!-- | ||
|
|
||
| ## 📝 추가 개선사항 | ||
|
|
||
| ### 🏆 주요 성과 및 통계 | ||
| > | ||
|
|
||
| ### 🌟 핵심 차별점 | ||
| > | ||
|
|
||
| ### 📱 서비스 스크린샷 | ||
| > | ||
|
|
||
| ### 🔄 현재 개발 진행 상황 | ||
| > | ||
|
|
||
| ### 📊 성능 지표 | ||
| > | ||
|
|
||
| ### 📋 빠른 시작 가이드 | ||
| > 로컬 환경에서 프로젝트를 실행하는 방법에 대한 간단한 가이드. | ||
| <div align="center"> | ||
|
|
||
|
|
||
| --> | ||
File renamed without changes.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,75 @@ | ||
| #Liquebase 프로시져 함수 유지보수 가이드 | ||
|
|
||
| ### 1. changeset과 id의 중요성 | ||
|
|
||
| - `changeset` 태그에 있는 `author:id` 조합은 Liquibase에서 고유한 식별자로 작동합니다. | ||
| - 동일한 `author:id`를 가진 changeset은 한 번만 실행됩니다. | ||
| - 따라서 **함수를 수정할 때는 새로운 id를 사용**해야 합니다. | ||
|
|
||
| ### 2. 유지보수를 위한 접근 방법 | ||
|
|
||
| #### 방법 1: DROP-CREATE 방식 | ||
| ```sql | ||
| --changeset jungwoo_shin:create-trigger-after-update-v1 endDelimiter:// dbms:mariadb | ||
| DROP FUNCTION IF EXISTS MyFunction// | ||
| CREATE FUNCTION MyFunction... | ||
|
|
||
| --changeset jungwoo_shin:create-trigger-after-update-v1 endDelimiter:// dbms:mariadb | ||
| DROP FUNCTION IF EXISTS MyFunction// | ||
| CREATE FUNCTION MyFunction... -- 수정된 버전 | ||
| ``` | ||
| dbms:mariadb | ||
| #### 방법 2: runOnChange 속성 사용 | ||
| ```sql | ||
| --changeset jungwoo_shin:create-trigger-after-update-v1 runOnChange:true endDelimiter:// dbms:mariadb | ||
| DROP FUNCTION IF EXISTS MyFunction// | ||
| CREATE FUNCTION MyFunction... | ||
| ``` | ||
| - `runOnChange:true`를 사용하면 changeset의 내용이 변경되었을 때만 재실행됩니다. | ||
| - 이는 함수 내용이 변경되었을 때만 업데이트 되므로 더 효율적입니다. | ||
|
|
||
| #### 방법 3: runAlways 속성 사용(현재 사용중인 방법) | ||
| ```sql | ||
| --changeset jungwoo_shin:create-function runAlways:true dbms:mariadb | ||
| DROP FUNCTION IF EXISTS MyFunction; | ||
| CREATE FUNCTION MyFunction... | ||
| ``` | ||
| - `runAlways:true`를 사용하면 매번 Liquibase가 실행될 때마다 해당 changeset이 실행됩니다. | ||
| - 개발 환경에서는 유용할 수 있지만, 프로덕션 환경에서는 주의해서 사용해야 합니다. | ||
|
|
||
| ### 3. 버전 관리 전략 | ||
|
|
||
| 함수나 프로시저를 업데이트할 때는 다음과 같은 버전 관리 전략을 고려할 수 있습니다: | ||
|
|
||
| (현재 사용중인 방법) | ||
| 1. **버전 번호를 id에 포함시키기**: | ||
| ```sql | ||
| --changeset jungwoo_shin:function-safe-to-double-v1 dbms:mariadb | ||
| --changeset jungwoo_shin:function-safe-to-double-v2 dbms:mariadb | ||
| ``` | ||
|
|
||
| 2. **날짜를 id에 포함시키기**: | ||
| ```sql | ||
| --changeset jungwoo_shin:function-safe-to-double-20250513 dbms:mariadb | ||
| ``` | ||
|
|
||
| ### 4. 최종 권장 방식 | ||
| ```sql | ||
| --liquibase formatted sql | ||
| --changeset jungwoo_shin:function-safe-to-double-v1 dbms:mariadb runOnChange:true | ||
| DROP FUNCTION IF EXISTS SafeToDouble; | ||
|
|
||
| CREATE FUNCTION SafeToDouble(str VARCHAR(255)) | ||
| RETURNS DOUBLE DETERMINISTIC | ||
| BEGIN | ||
| -- 함수 내 | ||
| 용 | ||
| END; | ||
| ``` | ||
|
|
||
| 이렇게 설정하면: | ||
| 1. 함수 변경 시 자동으로 업데이트됩니다 | ||
| 2. 변경이 없으면 실행되지 않습니다 | ||
| 3. 버전 히스토리가 명확히 추적됩니다 | ||
|
|
||
|
|
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 파트는
⚙ GithubAction + DockerHub CI/CD Process에 대해서 설명하는 부분이라서## 🛠️ CI / CD 파이프라인하위로 들어가면 더 자연스러울 것 같아요.