AI가 일정, 메일, 회고, 회의를 간편화해 업무를 간편하게 만드는 서비스입니다.
사회초년생의 성장을 돕고, 통합 플랫폼에서 모든 업무를 해결하도록 설계되었습니다.
프로젝트 기간 - 2025.01. ~ 2025.04.
2025.04 | Carrier 서비스 배포
2025.04 | 교내 AI 경진 대회 우수상
2025.05 | 국제인공지능 대전 부스 운영
이메일
- 이메일 가져오기, 본문 요약 처리, 일정 자동 추가 기능
캘린더 및 투두
- 일정 및 할 일의 생성, 조회, 수정, 삭제 기능 제공
사용자
- 하루 일정 요약 제공 및 프로필 사진 등록 기능 지원
녹음 요약
- 녹음 음성을 텍스트로 변환하고 핵심 내용 요약
일기
- 일기 작성 기능 및 키워드 기반 주제 추천 기능 지원
CQRS 패턴을 적용하여서 조회 로직과 명령 로직을 분리하여 도메인별 책임 명확화
→ 도메인 계층의 복잡도 감소, 유지보수 효율성 증가
org.example.carrier
├── global
│ ├── annotation
│ ├── config
│ ├── entity
│ ├── error
│ ├── feign
│ ├── interceptor
│ ├── security
│ └── utils
└── domain
└── calendar
├── domain
│ ├── Schedule.java
│ └── repository
│ └── ScheduleRepository.java
├── service
│ ├── CommandScheduleService.java
│ └── QueryScheduleService.java
├── presentation
│ ├── CommandScheduleController.java
│ └── QueryScheduleController.java
│ └── dto
│ ├── request
│ └── response
└── exception
└── ... (category, diary, mail, meet, todo, user)
@CustomService라는 annotation을 만들어 Query/Command의 의도를 명시적으로 표현 코드 바로가기
불변 객체 record를 기반으로 REST API와 Feign 응답 DTO를 설계
→ 가독성과 유지보수성 확보 및 클래스 대비 코드 간결화
- null 필드가 많아 정규화된 RDB 스키마로 표현이 어려움
- 메일마다 다른 구조임으로 필드 유무를 확인 해야함
- 중첩되는 JSON구조로 인해 파싱 로직 복잡도 증가
- 응답 받은 JSON그대로 변경 없이 저장 가능
- 조건 기반 쿼리를 사용해 필드 유무 판별 유리
- kotlin의 null-safe특성을 이용하여 로직 구성 용이
- 처음 기술을 선택할 때 데이터의 구조 서비스의 특성을 고려하여 기술을 선택하는 것이 중요하다는 것을 깨달음
- MSA 설계는 각 도메인 별로 기술 스택을 자유롭게 선택 가능
→ 확장성과 유지보수성 면에서 유리한 구조를 체감
메인 페이지 | 메일 페이지 |
---|---|
하루 일정 요약 | 녹음 요약 페이지 |
Backend | Frontend | Frontend | Frontend | Designer |
---|---|---|---|---|
안예성 | 이민준 | 추성우 | 이승현 | 최성훈 |