프로젝트 기간: 2024.10.03 ~ 2024.10.29
개인과 팀을 위한 할 일 관리 서비스
- 개인 및 팀 단위로 할 일(Task)을 관리할 수 있는 할 일 관리 시스템입니다.
- 실시간 협업과 진행 상황 공유로 팀의 생산성을 높이고, 개인의 성장을 트래킹할 수 있는 태스크 플래닝 도구입니다.
- 2개의 가용영역(AZ)을 활용한 멀티 AZ 구성
- 애플리케이션 서버의 Auto Scaling 구성
- 이중화된 NAT Gateway로 장애 대응
- 계층화된 서브넷으로 구성된 VPC
- 인터넷 연결용 퍼블릭 서브넷
- EC2 인스턴스를 위한 프라이빗 앱 서브넷
- RDS를 위한 격리된 DB 서브넷
- 보안적인 외부 통신을 위한 NAT Gateway
- Route 53을 통한 DNS 관리
- Elastic Load Balancing을 통한 트래픽 분산
- CloudFront CDN을 활용한 컨텐츠 전송 최적화
- S3를 통한 정적 리소스 관리 및 백업
- 프라이빗 서브넷에 위치한 Amazon RDS
- 높은 보안성을 위한 격리된 DB 서브넷 구성
📂 error
├── ErrorCode # 표준화된 에러 코드 (enum)
├── ErrorResponse # 일관된 에러 응답 포맷
└── 📂 exception
├── BusinessBaseException # 비즈니스 예외 기본 클래스
└── DomainException # 도메인별 커스텀 예외
- 계층별 세분화된 예외 처리
- 표준화된 에러 코드와 응답 포맷
- 클라이언트 친화적인 에러 메시지
- JWT 기반 인증 이메일 인증 시스템
- AWS 보안 그룹을 통한 네트워크 보안
- HTTPS 적용을 통한 데이터 암호화
Task 엔티티의 deadline 필드(LocalDateTime)와 프론트엔드의 날짜 문자열("2024-03-15") 형식 불일치로 인한 필터링 오작동 문제가 발생했습니다. 예를 들어 "2024-03-15 14:30:00"과 같이 저장된 데이터를 "2024-03-15"로 검색할 때 정확한 필터링이 불가능했습니다.
QueryDSL을 활용하여 날짜와 시간을 정교하게 처리하는 로직을 구현했습니다. 프론트엔드에서 받은 날짜 문자열을 해당 일자의 시작 시점(00:00:00)으로 변환하여 비교하도록 수정했습니다:
// 날짜 변환 및 필터링 처리
LocalDateTime deadline = null;
if (deadlineStr != null) {
LocalDate deadlineDate = LocalDate.parse(deadlineStr);
deadline = deadlineDate.atStartOfDay();
}
if (deadline != null) {
LocalDateTime standardDeadline = deadline.toLocalDate().atStartOfDay();
builder.and(task.deadline.loe(standardDeadline));
.orderBy(
Expressions.stringTemplate(
"ABS(TIMESTAMPDIFF(SECOND, {0}, {1}))",
task.deadline,
standardDeadline
).asc()
)
}
이 문제 해결을 통해 날짜/시간 데이터 처리 시 프론트엔드와 백엔드 간의 데이터 형식 일관성 유지의 중요성과 QueryDSL의 표현식 기능을 활용한 복잡한 날짜/시간 연산 처리 방법을 학습했습니다.
React SPA 배포 시 CloudFront와 S3 설정은 올바르게 했으나, 애플리케이션의 특정 경로 접근 시 404(Not Found)와 403(Forbidden) 에러가 발생하여 페이지가 정상적으로 로드되지 않는 문제가 있었습니다.
SPA의 클라이언트 사이드 라우팅 특성을 고려하여, CloudFront의 Error Pages 설정에서 404와 403 에러 발생 시 index.html로 리다이렉션하도록 구성했습니다. 구체적으로는 각 에러 코드에 대해 아래와 같이 설정하여 모든 라우트에서 애플리케이션이 정상적으로 로드되도록 문제를 해결했습니다.
{
"ErrorCode": "404",
"ResponsePagePath": "/index.html",
"ResponseCode": "200"
},
{
"ErrorCode": "403",
"ResponsePagePath": "/index.html",
"ResponseCode": "200"
}
이 문제 해결을 통해 CloudFront를 통한 SPA 배포 시 Error Pages 설정의 중요성을 이해할 수 있었습니다.
이름 | 역할 | 기여 내용 | GitHub |
---|---|---|---|
오찬근 | 팀장 | • 프로젝트 총괄 • 기술 스택 설계 |
https://github.com/Chan-GN |
임진희 | 기술 개발 | • 마이페이지 설계 및 구현 • 이메일 인증 기능 구현 |
https://github.com/liimjiin |
임혜린 | 기술 개발 | • 할 일 관리 시스템 구현 • 실시간 통신 기능 개발 |
https://github.com/hyerin315 |
박종호 | 기술 개발 | • 검색 시스템 구현 • 페이지네이션 기능 개발 |
https://github.com/cuteJJong |