Skip to content

코테이토 11기 프로젝트 Troublog의 Backend 레포지토리입니다

IT-Cotato/11th-Troublog-BE

Repository files navigation

Troublog Icon Troublog BE

Java Spring Boot MySQL GitHub Issues GitHub Stars

배포 링크 API 문서 이슈 신고 기능 요청

✨ 개발자의 트러블슈팅이 성장으로 이어지는 곳 ✨

Troublog Banner

📋 목차

🔍 프로젝트 소개

🛠️ 기술 정보

🚀 시작하기

📚 사용 가이드

🔧 문제 해결 & 정보

📖 프로젝트 개요

Important

Troublog는 개발자의 트러블슈팅이 성장으로 이어지는 곳입니다.

프로젝트를 진행하면서 마주치는 버그나 에러들, 너무나 소중한 경험이죠. 하지만 대부분 해결하고 나면 그냥 넘어가 버리는 경우가 많습니다. 개발자들이 프로젝트 진행 중 발생하는 문제와 해결 과정을 체계적으로 기록하고 관리할 수 있는 플랫폼이 있다면 어떨까요? 이런 경험들을 이력서나 포트폴리오에도 활용할 수 있고, 트러블슈팅 경험을 통해 성장할 수 있겠죠. 그리고 유사한 문제가 발생했을 때 빠르게 대처할 수 있는 환경을 제공하는 서비스라면 정말 유용할 것 같습니다. 나의 문제 해결 경험이 누군가에게는 소중한 도움이 될 수 있으니까요.

✨ 주요 기능

  • 🐛 트러블슈팅 포스트 작성: 문제 상황부터 해결까지의 과정을 단계별로 기록
  • 🏷️ 태그 시스템: 기술 스택별, 문제 유형별 분류로 원하는 글을 빠르게 검색
  • 평가 기능: 다른 개발자들이 해결책의 유용성을 별점으로 평가
  • 👥 팔로우 시스템: 관심있는 개발자의 트러블슈팅 경험을 지속적으로 확인
  • 📊 프로젝트별 관리: 진행중인 프로젝트에서 발생한 문제들을 모아서 관리
  • ❤️ 좋아요 & 댓글: 도움이 된 글에 반응하고 추가 정보나 의견 공유
  • 🖼️ 이미지 업로드: 에러 스크린샷이나 코드 이미지를 첨부해서 문제 상황을 명확히 전달
  • 📈 개인 통계: 내가 해결한 문제 유형과 주로 사용하는 기술 스택 분석

🖥️ 서비스 화면

가이드라인 기반 관리 AI 템플릿 요약
AI 요약 템플릿 요야
가이드라인에 따른 트러블슈팅 관리 AI를 이용한 템플릿 요약
프로젝트별 트러블슈팅 관리 커뮤니티 기능 트러블슈팅 분석
프로젝트별 관리 커뮤니티 통계 분석
프로젝트별 트러블슈팅 관리 및 보관 개발자 간 소통 및 지식 공유 트러블슈팅 분석 및 통계

⚙️ 기술 스택 & 아키텍처

📦 기술 스택

Tip

안정적이고 확장 가능한 백엔드 시스템을 위해 검증된 기술들로 구성했습니다.

Backend Framework

Java Spring Boot Spring Security Spring Data JPA Spring AI

Database & Storage

MySQL Redis AWS S3

Infrastructure & DevOps

AWS EC2 Nginx Docker GitHub Actions

Security & Authentication

OAuth 2.0 JWT

Development Tools

Swagger CodeRabbit

🏗️ 시스템 아키텍처

시스템 아키텍처
Troublog 시스템 아키텍처

Note

도메인 주도 설계(DDD)와 CQRS 패턴을 기반으로 한 확장 가능한 아키텍처를 적용했습니다.

주요 설계 원칙:

  • 도메인별 패키지 분리: trouble, user, auth, project, like, image, statistics
  • 계층형 아키텍처: Controller → Service → Repository → Entity
  • CQRS 패턴: 명령과 조회 작업 분리
  • Facade 패턴: 복잡한 비즈니스 로직 통합 관리
  • Soft Delete: 데이터 안전성을 위한 논리 삭제

⭐ 설치 및 실행

📋 필수 환경

Warning

프로젝트 실행 전에 반드시 아래 환경을 확인해주세요.

필수 환경:

# 개발 환경 확인
java --version    # Java 21 이상
mysql --version   # MySQL 8.0 이상
git --version     # Git 2.0 이상

💾 설치 과정

  1. Repository 클론
git clone https://github.com/IT-Cotato/11th-Troublog-BE.git
cd 11th-Troublog-BE
  1. 데이터베이스 준비
# 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=prod

Note

애플리케이션이 성공적으로 실행되면 http://localhost:8080에서 확인할 수 있습니다.


📖 API 문서

💡 핵심 기능 API

🔐 인증 (JWT + OAuth 2.0)

POST /auth/login              # 일반 로그인
POST /auth/oauth/google       # 구글 소셜 로그인  
POST /auth/refresh            # 토큰 갱신

📝 트러블슈팅 포스트

GET  /api/posts               # 포스트 목록 조회
POST /api/posts               # 새 포스트 작성
GET  /api/posts/{id}          # 상세 조회

🤖 AI 요약 기능 (핵심)

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 명세서 에서 확인하실 수 있습니다.


❗ 자주 발생하는 문제

🔑 JWT Secret Key Missing

  • 해결: application-local.yml에 최소 256비트 jwt.secret-key 추가

🗄️ Database Connection Failed

  • 해결: MySQL 서버 상태 및 연결 정보 확인
systemctl status mysql  # Linux
net start mysql80       # Windows

☁️ S3 Upload Failed

  • 해결: AWS IAM 사용자 S3 권한 확인 (s3:PutObject, s3:GetObject)

🤖 OpenAI API Rate Limit

  • 해결: API 키 사용량 확인 및 요청 빈도 조절

📝 커밋 컨벤션

  • feat: 새로운 기능 추가
  • 🐛 fix: 버그 수정 및 오류 해결
  • 📝 docs: 문서 개선 및 업데이트
  • 🔨 refactor: 코드 리팩토링 및 구조 개선
  • perf: 성능 향상 및 최적화

상세한 컨벤션은 트러블로그 BE 커밋 컨벤션 를 참고하세요.


👥 Team Members

신윤섭
신윤섭
🔧 Backend Team Leader
@supsup-hae
임재현
임재현
💻 Backend Developer
@jay91537
Youjin
Youjin
⚡ Backend Developer
@marshmallowing

📄 라이선스

Note

이 프로젝트는 오픈소스 프로젝트로, MIT 라이선스 하에 자유롭게 사용하실 수 있습니다.

주요 권한: 상업적 사용, 수정, 배포, 개인적 사용 가능
조건: 저작권 고지 및 라이선스 고지 포함
제한: 책임 및 보증 없음

MIT License

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.

Troublog와 함께 더 나은 개발 경험을 만들어가세요!

🚀 지금 시작해보세요 | 🤝 커뮤니티 참여 | 💡 아이디어 제안

Made with ❤️ by 11th-Troublog Team