Important
Troublog는 개발자의 트러블슈팅이 성장으로 이어지는 곳입니다.
프로젝트를 진행하면서 마주치는 버그나 에러들, 너무나 소중한 경험이죠. 하지만 대부분 해결하고 나면 그냥 넘어가 버리는 경우가 많습니다. 개발자들이 프로젝트 진행 중 발생하는 문제와 해결 과정을 체계적으로 기록하고 관리할 수 있는 플랫폼이 있다면 어떨까요? 이런 경험들을 이력서나 포트폴리오에도 활용할 수 있고, 트러블슈팅 경험을 통해 성장할 수 있겠죠. 그리고 유사한 문제가 발생했을 때 빠르게 대처할 수 있는 환경을 제공하는 서비스라면 정말 유용할 것 같습니다. 나의 문제 해결 경험이 누군가에게는 소중한 도움이 될 수 있으니까요.
- 🐛 트러블슈팅 포스트 작성: 문제 상황부터 해결까지의 과정을 단계별로 기록
- 🏷️ 태그 시스템: 기술 스택별, 문제 유형별 분류로 원하는 글을 빠르게 검색
- ⭐ 평가 기능: 다른 개발자들이 해결책의 유용성을 별점으로 평가
- 👥 팔로우 시스템: 관심있는 개발자의 트러블슈팅 경험을 지속적으로 확인
- 📊 프로젝트별 관리: 진행중인 프로젝트에서 발생한 문제들을 모아서 관리
- ❤️ 좋아요 & 댓글: 도움이 된 글에 반응하고 추가 정보나 의견 공유
- 🖼️ 이미지 업로드: 에러 스크린샷이나 코드 이미지를 첨부해서 문제 상황을 명확히 전달
- 📈 개인 통계: 내가 해결한 문제 유형과 주로 사용하는 기술 스택 분석
Tip
안정적이고 확장 가능한 백엔드 시스템을 위해 검증된 기술들로 구성했습니다.
Note
도메인 주도 설계(DDD)와 CQRS 패턴을 기반으로 한 확장 가능한 아키텍처를 적용했습니다.
주요 설계 원칙:
- 도메인별 패키지 분리: trouble, user, auth, project, like, image, statistics
- 계층형 아키텍처: Controller → Service → Repository → Entity
- CQRS 패턴: 명령과 조회 작업 분리
- Facade 패턴: 복잡한 비즈니스 로직 통합 관리
- Soft Delete: 데이터 안전성을 위한 논리 삭제
Warning
프로젝트 실행 전에 반드시 아래 환경을 확인해주세요.
필수 환경:
- Java 21 - OpenJDK 21 다운로드
- MySQL 8.0 - MySQL Community Server
- Git - 버전 관리 및 소스코드 클론
# 개발 환경 확인
java --version # Java 21 이상
mysql --version # MySQL 8.0 이상
git --version # Git 2.0 이상- Repository 클론
git clone https://github.com/IT-Cotato/11th-Troublog-BE.git
cd 11th-Troublog-BE- 데이터베이스 준비
# MySQL 서버 시작 후 데이터베이스 생성
mysql -u root -p
CREATE DATABASE troublog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
EXIT;Important
보안을 위해 실제 키 값들은 별도로 관리해주세요.
src/main/resources/application-local.yml 파일을 생성하고 다음 설정을 추가하세요:
spring:
profiles:
active: local
datasource:
url: jdbc:mysql://localhost:3306/troublog?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=Asia/Seoul
username: your-mysql-username
password: your-mysql-password
driver-class-name: com.mysql.cj.jdbc.Driver
jwt:
secret-key: your-jwt-secret-key-at-least-256-bits
aws:
s3:
access-key: your-s3-access-key
secret-key: your-s3-secret-key
bucket: your-s3-bucket-name
region: ap-northeast-2
openai:
api-key: your-openai-api-key개발 모드 실행
# Gradle을 통한 개발 서버 실행
./gradlew bootRun --args='--spring.profiles.active=local'프로덕션 빌드 및 실행
# JAR 파일 빌드
./gradlew clean build
# 빌드된 애플리케이션 실행
java -jar build/libs/troublog-*.jar --spring.profiles.active=prodNote
애플리케이션이 성공적으로 실행되면 http://localhost:8080에서 확인할 수 있습니다.
- 📖 API 명세서
POST /auth/login # 일반 로그인
POST /auth/oauth/google # 구글 소셜 로그인
POST /auth/refresh # 토큰 갱신GET /api/posts # 포스트 목록 조회
POST /api/posts # 새 포스트 작성
GET /api/posts/{id} # 상세 조회POST /api/ai/summarize # 트러블슈팅 내용 AI 요약
POST /api/ai/suggest-tags # AI 기반 태그 추천
POST /api/ai/similar-posts # 유사 포스트 추천POST /api/users/follow/{userId} # 팔로우/언팔로우
POST /api/posts/{id}/like # 좋아요/좋아요 취소
POST /api/posts/{id}/comments # 댓글 작성모든 API 엔드포인트와 상세 스펙은 API 명세서 에서 확인하실 수 있습니다.
- 해결:
application-local.yml에 최소 256비트jwt.secret-key추가
- 해결: MySQL 서버 상태 및 연결 정보 확인
systemctl status mysql # Linux
net start mysql80 # Windows- 해결: AWS IAM 사용자 S3 권한 확인 (
s3:PutObject,s3:GetObject)
- 해결: API 키 사용량 확인 및 요청 빈도 조절
- ✨
feat: 새로운 기능 추가 - 🐛
fix: 버그 수정 및 오류 해결 - 📝
docs: 문서 개선 및 업데이트 - 🔨
refactor: 코드 리팩토링 및 구조 개선 - ⚡
perf: 성능 향상 및 최적화
상세한 컨벤션은 트러블로그 BE 커밋 컨벤션 를 참고하세요.
|
신윤섭 🔧 Backend Team Leader @supsup-hae |
임재현 💻 Backend Developer @jay91537 |
Youjin ⚡ Backend Developer @marshmallowing |
Note
이 프로젝트는 오픈소스 프로젝트로, MIT 라이선스 하에 자유롭게 사용하실 수 있습니다.
주요 권한: 상업적 사용, 수정, 배포, 개인적 사용 가능
조건: 저작권 고지 및 라이선스 고지 포함
제한: 책임 및 보증 없음
MIT License
Copyright (c) 2024-2025 IT-Cotato Troublog Team
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
🚀 지금 시작해보세요 | 🤝 커뮤니티 참여 | 💡 아이디어 제안
Made with ❤️ by 11th-Troublog Team






