Amateurs는 프로그래머스 데브코스 수강생들을 위해 만들어진 커뮤니티 플랫폼입니다.
💡 단순한 정보 공유를 넘어, AI 기술로 개인화된 추천글을 제공하고,
실시간 채팅 기능을 제공해 함께 성장하는 개발자 생태계를 구축합니다.
- 🤖 AI 맞춤 추천: 개인 관심사 기반 게시글 자동 큐레이션
- ⚡ 실시간 채팅: WebSocket 채팅 & SSE 알림으로 즉각적인 커뮤니케이션
- 🔐 스마트 인증: OCR + AI 이미지 분석을 통한 자동 수강생 인증
- 📊 데이터 기반: 사용자 행동 분석을 통한 지속적인 UX 개선
@Service
public class PostRecommendService {
@Autowired
private EmbeddingStore<TextSegment> embeddingStore;
public List<PostResponseDTO> recommendPosts(Long userId) {
UserProfile profile = aiProfileService.getProfile(userId);
List<EmbeddingMatch<TextSegment>> matches =
embeddingStore.findRelevant(profile.getEmbedding(), 10);
return matches.stream()
.map(this::convertToPostDTO)
.collect(toList());
}
} |
@MessageMapping("/chat/{roomId}")
public void sendMessage(@DestinationVariable String roomId,
@Payload DirectMessageRequest request) {
DirectMessageResponse response =
directMessageService.saveMessage(request);
messagingTemplate.convertAndSend(
"/topic/room/" + roomId, response);
// 실시간 알림 전송
sseService.sendAlarm(response.getReceiverId(),
createAlarm(response));
} |
|
OCR + AI 이미지 분석을 통한 완전 자동화된 인증 프로세스 sequenceDiagram
participant User
participant API
participant OCR
participant AI
participant DB
User->>API: 수료증 이미지 업로드
API->>OCR: 텍스트 추출 요청
OCR-->>API: 추출된 텍스트
API->>AI: 이미지 유사도 분석
AI-->>API: 유사도 점수 (0-100)
alt 점수 >= 80
API->>DB: 인증 승인
API-->>User: 인증 완료
else 점수 < 80
API-->>User: 인증 실패
end
|
|
# 전체 테스트 실행
./gradlew test
# 커버리지 리포트 생성
./gradlew jacocoTestReport
# 커버리지 검증 (최소 50% 요구)
./gradlew jacocoTestCoverageVerification모든 PR에 대해 최소 2명 이상 승인 필요
src/main/java/kr/co/amateurs/server/
├── 📝 annotation/ # 커스텀 어노테이션
├── ⚙️ config/ # 설정 클래스
├── 🎮 controller/ # REST API 컨트롤러
├── 📊 domain/ # 도메인 모델
├── 🗄️ repository/ # 데이터 접근 계층
├── 💼 service/ # 비즈니스 로직 계층
├── ❌ exception/ # 예외 처리
├── 🛠️ handler/ # 핸들러 클래스
├── 🔧 utils/ # 유틸리티 클래스
└── 🚀 ServerApplication.java # Spring Boot 메인 애플리케이션
- 📖 API 문서 - Swagger UI
- 🎯 코딩 컨벤션 - 개발 표준 가이드
- 🗄️ 데이터베이스 가이드 - DB 설계 원칙
- ⚡ JOOQ 가이드 - 타입 안전 SQL 작성법







