부모를 위한 통합 육아 지원 플랫폼
오픈소스 개발자 경진대회 프로젝트
**CareCode Interface (맘편한)**는 육아를 하는 부모들을 위한 통합 육아 지원 플랫폼입니다.
대한민국의 부모들은 육아 과정에서 다음과 같은 어려움을 겪고 있습니다:
- 정부/지자체 육아 정책 정보가 흩어져 있어 찾기 어려움
- 돌봄 시설(어린이집, 유치원) 정보 비교가 불편함
- 자녀 건강 기록을 체계적으로 관리하기 어려움
- 육아 고민을 나눌 커뮤니티 부족
- 24시간 육아 상담 서비스의 부재
CareCode Interface는 이러한 문제를 해결하기 위해 7가지 핵심 도메인을 통합하여 부모들에게 원스톱 육아 지원 서비스를 제공합니다.
대한민국의 합계출산율은 2023년 기준 0.72명으로 OECD 국가 중 최하위를 기록하고 있습니다. 저출산의 주요 원인 중 하나는 육아 부담입니다. 정부는 매년 수백 가지의 육아 지원 정책을 발표하지만, 정보 접근성이 낮아 실제로 혜택을 받는 부모는 제한적입니다.
또한, 육아 관련 정보가 여러 플랫폼에 분산되어 있어 부모들은:
- 정책 정보는 정부24 또는 각 지자체 홈페이지
- 돌봄 시설 정보는 아이사랑보육포털
- 건강 정보는 질병관리청 또는 병원 앱
- 커뮤니티는 맘카페 등
각각 다른 서비스를 이용해야 하는 불편함을 겪고 있습니다.
CareCode Interface는 다음을 목표로 합니다:
- 정보 통합: 육아 관련 모든 정보를 한 곳에서 제공
- 접근성 향상: 직관적인 UI/UX로 누구나 쉽게 사용 가능
- 개인화: 자녀 정보를 기반으로 맞춤형 정보 제공
- 커뮤니티: 부모들 간의 정보 공유 및 상호 지원
- AI 지원: 24시간 챗봇을 통한 즉각적인 육아 상담
- 데이터 관리: 자녀 건강 기록, 성장 곡선 등 체계적 관리
- 공공 데이터 활용: 공공 API를 통한 신뢰성 있는 정보 제공
- 육아 정보 탐색 시간 60% 단축
- 육아 정책 활용도 40% 증가
- 부모들의 육아 스트레스 30% 감소
- 커뮤니티를 통한 사회적 지지 네트워크 형성
- 회원가입/로그인: 이메일 인증 기반 일반 회원가입
- 소셜 로그인: 카카오, 구글 OAuth2 지원
- JWT 토큰 인증: 안전한 인증 및 세션 관리
- 자녀 정보 관리: 다수의 자녀 정보 등록 및 관리
- 알림 설정: 개인화된 알림 채널 및 시간대 설정
- 시설 검색: 유형별(어린이집, 유치원, 놀이방), 지역별, 연령대별 필터링
- 위치 기반 검색: 내 주변 돌봄 시설 찾기
- 시설 상세 정보: 운영 시간, 정원, 프로그램, 요금 등
- 시설 예약: 온라인 방문 예약 및 관리
- 리뷰 시스템: 시설 이용 후기 작성 및 조회
- 게시글 관리: 카테고리별(일반, 질문, 후기, 뉴스 등) 게시글 작성
- 댓글/대댓글: 무한 댓글 기능으로 활발한 소통
- 태그 시스템: 해시태그를 통한 게시글 분류 및 검색
- 좋아요/북마크: 유용한 게시글 저장 및 공유
- 익명 게시: 민감한 고민도 안전하게 공유
- 건강 기록: 예방접종, 진료, 검진, 성장 기록 관리
- 성장 추적: 신장, 체중 기록 및 성장 곡선 분석
- 진료 기록 첨부: 진단서, 검진표 등 문서 보관
- 병원 정보: 소아과, 소아치과 등 병원 검색 및 리뷰
- 건강 통계: 자녀의 건강 데이터 시각화
- 정책 검색: 육아휴직, 보육료 지원, 양육비 지원 등
- 카테고리별 분류: 정책 유형에 따른 체계적 분류
- 공공 데이터 연동: 서울시 등 공공 API 실시간 연동
- 정책 북마크: 관심 정책 저장 및 알림 설정
- 맞춤형 정책: 자녀 나이, 지역 기반 추천
- 실시간 알림: 예약, 댓글, 정책 업데이트 즉시 알림
- 다중 채널: 이메일, 푸시, SMS 중 선택
- 알림 템플릿: 일관된 형식의 알림 메시지
- 야간 모드: 방해 금지 시간대 설정
- 알림 이력: 놓친 알림 확인
- 24/7 육아 상담: 언제든지 육아 고민 상담
- 다중 세션 관리: 여러 주제의 대화 동시 진행
- 대화 히스토리: 이전 상담 내용 저장 및 조회
- 피드백 수집: 챗봇 응답의 유용성 평가
- 맥락 이해: 이전 대화 내용을 기반으로 한 상담
- 사용자 관리: 회원 정보 조회 및 관리
- 콘텐츠 관리: 시설, 병원, 정책 데이터 등록/수정
- 커뮤니티 모니터링: 부적절한 게시글/댓글 관리
- 대시보드: 서비스 통계 및 모니터링
- 권한 관리: 역할 기반 접근 제어 (RBAC)
| 분류 | 기술 | 버전 | 설명 |
|---|---|---|---|
| 언어 | Java | 17 (LTS) | 안정적이고 성능이 우수한 LTS 버전 |
| 프레임워크 | Spring Boot | 3.3.3 | 최신 Spring Boot 기반 |
| 데이터베이스 | MariaDB | 10.x | 오픈소스 관계형 데이터베이스 |
| 캐시 | Redis | 7.x | 고성능 인메모리 캐시 |
| 인증 | JWT | - | 토큰 기반 인증 |
| ORM | Spring Data JPA | - | 객체-관계 매핑 |
| 보안 | Spring Security | - | 인증 및 권한 관리 |
| API 문서 | SpringDoc OpenAPI | 2.3.0 | Swagger UI 자동 생성 |
| 분류 | 기술 | 설명 |
|---|---|---|
| 컨테이너 | Docker | 애플리케이션 컨테이너화 |
| 오케스트레이션 | Docker Compose | 멀티 컨테이너 관리 |
| 리버스 프록시 | Nginx | HTTP/HTTPS 라우팅 |
| 빌드 도구 | Gradle | 8.14.2 |
| CI/CD | GitHub Actions, CodeQL | 빌드·테스트·Trivy·Java 정적 분석(codeql.yml) |
| 분류 | 기술 | 설명 |
|---|---|---|
| 모니터링 | Spring Actuator | 애플리케이션 헬스 체크 |
| 메트릭 | Prometheus | 시계열 메트릭 수집 |
| 로깅 | Logback + Logstash | JSON 형식 구조화 로깅 |
- 카카오 OAuth2: 소셜 로그인
- 구글 OAuth2: 소셜 로그인
- 서울시 공공 데이터 API: 돌봄 시설, 정책 정보
- 이메일 서비스: 이메일 인증 및 알림
┌─────────────────────────────────────────────┐
│ Presentation Layer │
│ (Controllers, REST API, Exception Handler) │
└─────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────┐
│ Application Layer │
│ (Facades, Service Orchestration) │
└─────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────┐
│ Business Layer │
│ (Services, Domain Logic, Validators) │
└─────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────┐
│ Persistence Layer │
│ (Repositories, JPA Entities) │
└─────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────┐
│ Database Layer │
│ (MariaDB, Redis) │
└─────────────────────────────────────────────┘
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Client │─────→│ Nginx │─────→│ Spring Boot │
│ (Web/Mobile) │ │ (Port 80/443)│ │ (8080) │
└──────────────┘ └──────────────┘ └──────────────┘
│
┌─────────────────┼─────────────────┐
│ │ │
┌─────▼─────┐ ┌─────▼─────┐ ┌─────▼─────┐
│ MariaDB │ │ Redis │ │ External │
│ (3307) │ │ (6380) │ │ APIs │
└───────────┘ └───────────┘ └───────────┘
프로젝트는 7개의 독립적인 도메인으로 구성되어 있으며, 각 도메인은 자체 엔티티, 서비스, 리포지토리를 포함합니다:
com.carecode.domain/
├── user/ # 사용자 및 인증
├── careFacility/ # 돌봄 시설
├── community/ # 커뮤니티
├── health/ # 건강 관리
├── policy/ # 정책 정보
├── notification/ # 알림
├── chatbot/ # AI 챗봇
└── admin/ # 관리자
엔티티:
User: 사용자 기본 정보, 로그인, 이메일 인증Child: 자녀 정보 (이름, 생년월일, 성별)EmailVerificationToken: 이메일 인증 토큰NotificationSettings: 사용자별 알림 설정
주요 API:
POST /auth/login - 일반 로그인 (응답: TokenDto JSON)
POST /auth/register - 회원가입 (응답: TokenDto JSON)
POST /auth/refresh - 액세스·리프레시 토큰 갱신
POST /auth/kakao/login - 카카오 code 교환 (응답: TokenDto JSON, isNewUser 포함)
GET /auth/kakao/login-url - 카카오 인가 URL (설정: KAKAO_CLIENT_ID, kakao.redirect-uri)
POST /auth/kakao/complete-registration - 카카오 가입 완료 (Bearer JWT)
POST /auth/logout - 로그아웃 (Bearer 필요, Redis 저장 시 해당 사용자 리프레시 토큰 전부 폐기)
리프레시 토큰을 Redis에서 관리하려면 jwt.refresh-token.store=redis(또는 환경 변수 JWT_REFRESH_TOKEN_STORE=redis)와 동작 중인 Redis를 설정합니다. 기본값 none이면 JWT 서명 검증만 수행합니다.
엔티티:
CareFacility: 시설 정보 (위치, 운영 시간, 정원, 프로그램)CareFacilityBooking: 예약 정보Review: 시설 리뷰FacilityType: KINDERGARTEN, DAYCARE, PLAYGROUP, NURSERY
주요 API:
GET /facilities - 시설 목록
GET /facilities/{id} - 시설 상세
GET /facilities/type/{facilityType} - 유형별 조회
GET /facilities/location/{location} - 지역별 조회
POST /facilities/{id}/bookings - 예약 생성
PUT /facilities/{id}/bookings/{bid} - 예약 수정
DELETE /facilities/{id}/bookings/{bid} - 예약 취소
엔티티:
Post: 게시글Comment: 댓글 (대댓글 지원)Tag: 해시태그PostLike: 좋아요Bookmark: 북마크PostCategory: GENERAL, QUESTION, SHARE, REVIEW, NEWS, EVENT, NOTICE
주요 API:
GET /community/posts - 게시글 목록 (페이징)
POST /community/posts - 게시글 작성
GET /community/posts/{postId} - 게시글 상세
PUT /community/posts/{postId} - 게시글 수정
DELETE /community/posts/{postId} - 게시글 삭제
POST /community/posts/{postId}/like - 좋아요
POST /community/posts/{postId}/bookmark - 북마크
엔티티:
HealthRecord: 건강 기록 (CHECKUP, VACCINATION, ILLNESS, GROWTH)HealthRecordAttachment: 첨부파일 (진단서, 검진표)Hospital: 병원 정보HospitalReview: 병원 리뷰HospitalLike: 병원 좋아요
주요 API:
POST /health/records - 건강 기록 등록
GET /health/records/{recordId} - 건강 기록 조회
GET /health/records/user/{userId} - 사용자 건강 기록
GET /health/hospitals - 병원 목록
GET /health/statistics - 건강 통계
엔티티:
Policy: 정책 정보PolicyCategory: 정책 카테고리PolicyDocument: 정책 관련 문서
주요 API:
GET /policies - 정책 목록
GET /policies/{policyId} - 정책 상세
POST /policies/search - 정책 검색
GET /policies/category/{category} - 카테고리별 정책
엔티티:
Notification: 알림 메시지NotificationTemplate: 알림 템플릿NotificationPreference: 알림 채널 선호도NotificationSettings: 전역 알림 설정
알림 타입:
- BOOKING: 예약 관련
- REVIEW: 리뷰 관련
- COMMENT: 댓글
- POLICY: 정책 업데이트
- SYSTEM: 시스템 알림
엔티티:
ChatSession: 대화 세션ChatMessage: 메시지 (사용자/봇)
주요 API:
POST /chatbot/chat - 메시지 전송
GET /chatbot/sessions - 세션 목록
GET /chatbot/history - 대화 기록
주요 기능:
- 사용자 관리 (조회, 정지, 삭제)
- 시설/병원 데이터 관리
- 커뮤니티 모니터링
- 정책 데이터 관리
- 대시보드 및 통계
- Docker Desktop (Compose v2 포함). 이것만 있으면 됩니다. JDK·MariaDB·Redis 를 따로 설치하지 않습니다.
- IDE 에서 앱을 직접 띄우려면 JDK 17 이 추가로 필요합니다 (Gradle 은 포함된
./gradlew를 씁니다).
git clone https://github.com/CareCode-Repo/CareCode_Interface.git
cd CareCode_Interface
docker compose up --build앱 + MariaDB + Redis 가 함께 뜹니다. .env 없이도 뜹니다. 로컬 전용 기본값이 docker-compose.yml 에 들어 있습니다.
처음에는 이미지와 의존성을 받고 스키마를 만드느라 몇 분 걸립니다(docker compose ps 에서 app 이 healthy 가 되면 준비 완료).
| 무엇 | 주소 |
|---|---|
| API | http://localhost:8082 |
| 헬스체크 | http://localhost:8082/actuator/health |
| Swagger UI | http://localhost:8082/swagger-ui.html |
| MariaDB | localhost:3307 (DB·계정 carecode / 비밀번호 carecode-local) |
| Redis | localhost:6380 |
포트가 이미 쓰이고 있으면 바꿔서 띄웁니다: APP_PORT=18082 DB_PORT=3317 docker compose up --build
스키마는 Flyway 마이그레이션(V1~V18)으로 만들고 Hibernate 는 검증만 합니다(운영과 같은 방식). 엔티티와 마이그레이션이 어긋나면 로컬에서도 기동이 실패하므로 바로 알 수 있습니다.
# 가입 (역할은 서버가 PARENT 로 정한다)
curl -X POST http://localhost:8082/auth/register \
-H "Content-Type: application/json" \
-d '{"email":"me@example.com","password":"password1234","name":"테스트"}'
# 로그인 → 본문에 accessToken 이 온다. 리프레시 토큰은 HttpOnly 쿠키(refreshToken)로도 내려간다.
curl -X POST http://localhost:8082/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"me@example.com","password":"password1234"}'
# 받은 토큰으로 내 정보
curl http://localhost:8082/users/me -H "Authorization: Bearer <accessToken>"Windows 의 PowerShell·Git Bash 에서 한글이 든 JSON 을
-d로 보내면 인코딩이 깨져400 요청 본문을 읽을 수 없습니다가 납니다. 이름을 영문으로 바꾸거나 Swagger UI 에서 호출하세요.
미리 만들어 둔 관리자 계정은 없습니다. 관리자 화면(/api/admin/**)을 보려면 가입한 계정을 DB 에서 올립니다.
docker compose exec mariadb mariadb -ucarecode -pcarecode-local carecode \
-e "UPDATE TBL_USER SET ROLE='ADMIN' WHERE EMAIL='me@example.com';"역할은 토큰에 실리므로 다시 로그인해야 반영됩니다.
공공데이터 키가 없으면 시설·정책 목록이 비어 있습니다. 샘플 데이터를 넣고 띄울 수 있습니다.
SEED_SAMPLE_DATA=true docker compose up --build실제 지원 금액이 아닙니다. 확인이 끝나면 관리자 토큰으로 DELETE /api/admin/dev/sample-data 를 호출해 지웁니다.
카카오 로그인·인증 메일·공공데이터 동기화·AI 챗봇은 외부 키가 있어야 동작합니다. 키가 없어도 앱은 뜨고, 해당 기능만 실패하거나 대체 동작(챗봇은 규칙 기반 응답)을 합니다.
cp .env.example .env # 필요한 줄만 주석을 풀고 값을 넣는다
docker compose up --build항목별 설명은 .env.example 에 있습니다. .env 는 커밋되지 않습니다.
CareCode_FE 를 http://localhost:3000 에서 띄우면 그대로 붙습니다.
CORS 허용 오리진과 로컬용 쿠키 설정(Secure=false, SameSite=Lax)이 compose 에 이미 들어 있습니다.
DB·Redis 만 컨테이너로 띄우고 앱은 IDE 나 Gradle 로 실행합니다.
docker compose up -d mariadb redis
DB_URL=jdbc:mariadb://localhost:3307/carecode DB_USERNAME=carecode DB_PASSWORD=carecode-local \
REDIS_PORT=6380 SPRING_FLYWAY_ENABLED=true \
JWT_SECRET=local-only-jwt-secret-do-not-use-in-production-0123456789 \
KAKAO_CLIENT_ID=x KAKAO_CLIENT_SECRET=x MAIL_USERNAME=x MAIL_PASSWORD=x \
EMAIL_VERIFICATION_BASE_URL=http://localhost:8082 \
./gradlew bootRun --args='--spring.profiles.active=dev'docker compose down # 컨테이너만 내린다 (데이터 유지)
docker compose down -v # DB·업로드 볼륨까지 지운다./gradlew testH2 기반 테스트는 Docker 없이 돕니다. 스키마 정합성 테스트(FlywaySchemaValidationTest)는 Testcontainers 로
MariaDB 를 띄우므로 Docker 가 켜져 있어야 하고, 꺼져 있으면 건너뛰고 끝에 경고를 띄웁니다.
자세한 내용은 회귀 방지 를 보세요.
기능별 상세 문서와 아키텍처는 docs/ 에 있습니다.
무엇을 만들었는지보다 왜 그렇게 만들었는지를 남기는 것을 목표로 합니다.
| 문서 | 내용 |
|---|---|
| 시스템 개요 | 계층 구조, 요청·배치 흐름 |
| 데이터 흐름 | 공공데이터 수집 → 알림까지의 파이프라인 |
| 공공데이터 연동 | 4개 정부 API, 공급자 추상화 |
| 지원금 지능화 | 추천·비교·놓친 지원금·금액 신뢰도 |
| 시설 지능화 | 정원 시계열·입소 예측·빈자리 알림 |
| 알림과 리텐션 | 알림 3종과 중복 방지 |
| 기동 안정화 | 실기동에서 드러난 차단 8건 |
| 회귀 방지 | 왜 CI 가 못 잡았는지 |
프로젝트는 SpringDoc OpenAPI 3를 사용하여 자동으로 API 문서를 생성합니다. 운영(prod) 프로파일에서는 차단됩니다.
접속 URL: http://localhost:8082/swagger-ui.html (로컬 dev 프로파일)
| 도메인 | 엔드포인트 | 설명 |
|---|---|---|
| 인증 | /auth/* |
로그인, 회원가입, 토큰 갱신 |
| 사용자 | /users/* |
사용자 정보 관리 |
| 시설 | /facilities/* |
돌봄 시설 조회, 예약 |
| 커뮤니티 | /community/* |
게시글, 댓글 관리 |
| 건강 | /health/* |
건강 기록, 병원 정보 |
| 정책 | /policies/* |
정책 조회, 검색 |
| 알림 | /notifications/* |
알림 조회, 설정 |
| 챗봇 | /chatbot/* |
챗봇 대화 |
| 관리자 | /api/admin/* |
관리자 기능 (JWT + ROLE_ADMIN 필요) |
대부분의 API는 JWT 토큰 인증이 필요합니다. 토큰은 응답 JSON 본문(TokenDto: accessToken, refreshToken, expiresIn 등)으로 내려가며, 카카오 로그인도 동일합니다. 컨트롤러 단위 @CrossOrigin은 사용하지 않으며, 허용 오리진은 app.security.cors.allowed-origins(쉼표 구분)와 SecurityConfig의 CORS 설정만 따릅니다. jwt.refresh-token.store=redis이면 로그인·갱신 시 발급한 리프레시 토큰이 Redis에 등록되고, /auth/refresh는 등록된 토큰만 갱신하며 POST /auth/logout으로 해당 사용자의 리프레시 세션을 일괄 폐기할 수 있습니다(액세스 토큰 블랙리스트는 포함하지 않음).
헤더 예시:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
로그인: 가입·로그인 예시는 빠른 시작 에 있습니다. 로그인 응답 본문에 액세스 토큰이 실리고, 리프레시 토큰은 HttpOnly 쿠키로도 내려갑니다.
운영 배포는 GitHub Actions 가 합니다. 서버에서 직접 빌드하지 않습니다.
main 에 머지
→ 테스트 + 스키마 정합성 검사 + 커버리지 게이트
→ Docker 이미지 빌드 → GHCR(ghcr.io) 에 push
→ 서버에 SSH 접속
1) 새 이미지를 예비 포트(127.0.0.1:18082)에 먼저 띄워 헬스체크
2) 통과하면 운영 컨테이너(8082)를 새 이미지로 교체
3) 실패하면 예비 컨테이너만 지우고 기존 운영은 그대로 둔다
→ 외부 헬스체크 URL 로 한 번 더 확인 → Slack 알림
develop 에 머지하면 같은 흐름으로 스테이징에 배포됩니다. Actions 탭에서 수동 실행(workflow_dispatch)도 됩니다.
필요한 GitHub 시크릿, 서버 쪽 전제(.env 위치, 포트), Blue/Green 을 쓰지 않는 이유는
운영 문서의 배포 절 에 정리돼 있습니다.
| 프로파일 | 파일 | 쓰는 곳 |
|---|---|---|
| (기본) | application.yml |
모든 환경의 공통값 |
dev |
application-dev.yml |
로컬·docker compose. Swagger 공개, 상세 로그, 샘플 데이터 옵션 |
prod |
application-prod.yml |
운영. Swagger 차단, 필수 환경변수가 없으면 기동 실패 |
운영 설정은 비밀값을 기본값으로 두지 않습니다. JWT_SECRET, EMAIL_VERIFICATION_BASE_URL 같은 값이 빠지면
잘못된 값으로 조용히 뜨는 대신 기동 단계에서 멈춥니다.
스키마는 Flyway 로 관리합니다 (src/main/resources/db/migration, 현재 V1~V18).
운영은 ddl-auto=validate 라 엔티티와 스키마가 다르면 기동하지 않습니다.
엔티티에 필드나 테이블을 추가하면 반드시 다음 번호의 마이그레이션도 함께 작성합니다. 빠뜨리면 CI 의 스키마 정합성 테스트가 실패합니다.
MariaDB 10.11, 테이블 38개(Flyway 이력 테이블 제외). 전체 ERD 는 docs/ERD.md 에 있습니다.
| 테이블 | 설명 |
|---|---|
TBL_USER |
사용자. 이메일 가입과 카카오 가입을 함께 담는다 |
TBL_CHILD |
자녀 |
TBL_CARE_FACILITIES |
돌봄 시설 (공공데이터 동기화) |
care_facility_bookings |
시설 방문·상담 예약 |
TBL_POST, TBL_COMMENT |
커뮤니티 게시글·댓글 |
TBL_HEALTH_RECORD |
건강 기록 |
TBL_VACCINATION_SCHEDULE |
예방접종 일정 |
TBL_POLICIES |
육아 지원 정책 |
TBL_NOTIFICATION |
알림 |
TBL_CHAT_SESSIONS, TBL_CHAT_MESSAGES |
챗봇 대화 |
- 예외 처리 일관성 개선
- 설정 파일 환경별 분리
- 기본 테스트 코드 작성
- 챗봇 응답 DTO 추가
- JSON 형식 로깅 (Logstash)
- 캐싱 전략 확장 (Redis)
- 트랜잭션 관리 개선
- 통합 테스트 확대 (접근제어·스키마 정합성·API 계약)
- API 응답 시간 최적화
- N+1 쿼리 최적화
- 모니터링 대시보드 구축
- API 버전 관리 (v2)
- WebSocket 기반 실시간 알림
- 챗봇 AI 모델 고도화
- 모바일 앱 개발 (React Native)
- 2025 Q2: 공공 데이터 API 확대 (전국 17개 시도)
- 2025 Q3: 챗봇 GPT-4 모델 적용
- 2025 Q4: 모바일 앱 출시
CareCode_Interface/
├── src/main/java/com/carecode/
│ ├── domain/ # 도메인별 패키지 (controller / service / repository / entity / dto / mapper)
│ │ ├── user/ # 가입·로그인·카카오·프로필
│ │ ├── careFacility/ # 시설 조회·예약·리뷰·대기·입소 예측
│ │ ├── community/ # 게시글·댓글·좋아요·신고
│ │ ├── health/ # 건강 기록·병원·예방접종·성장 곡선
│ │ ├── policy/ # 지원 정책·추천·놓친 지원금
│ │ ├── notification/ # 알림·채널 설정·푸시
│ │ ├── chatbot/ # AI 챗봇
│ │ └── admin/ # 관리자 API (/api/admin/**)
│ ├── core/ # 공통
│ │ ├── security/ # JWT 필터, SecurityConfig, CurrentUserFacade
│ │ ├── aspect/ # 로깅·Rate Limit·입력 검증 AOP
│ │ ├── handler/ # 전역 예외 → HTTP 상태 매핑
│ │ ├── exception/ # ErrorCode, 도메인 예외
│ │ ├── config/ scheduler/ storage/ monitoring/ ...
│ │ └── devtools/ # 로컬 샘플 데이터
│ └── CareCodeApplication.java
├── src/main/resources/
│ ├── application.yml / application-dev.yml / application-prod.yml
│ ├── db/migration/ # Flyway V1~V18
│ ├── legal/ # 개인정보처리방침·약관
│ └── public-data/ # 공공데이터 매핑
├── src/test/ # 단위(Mockito) · 통합(H2) · 스키마(Testcontainers MariaDB)
├── docs/ # 설계 문서 (아래 표)
├── .github/workflows/ci-cd.yml # 테스트 → 이미지 → 배포
├── docker-compose.yml # 로컬 실행 (앱 + MariaDB + Redis)
├── .env.example # 선택 연동 키 예시
└── Dockerfile
| 문서 | 내용 |
|---|---|
| 접근제어 매트릭스 | 경로별 공개/인증/관리자 여부와 근거 |
| 마이그레이션 | Flyway 버전별 변경 이력 |
| 운영 | 배포·헬스체크·알림·스케줄러 |
| 이슈 관리 | 이슈 제목·라벨·마일스톤 규칙 |
- ErrorCode Enum: 도메인별 에러 코드 체계화
- CareServiceException: 공통 예외 클래스
- GlobalExceptionHandler: 일관된 에러 응답 형식
- Logback + Logstash: JSON 형식 구조화 로깅
- LogExecutionTime AOP: 메서드 실행 시간 자동 로깅
- 요청/응답 로깅: 모든 HTTP 요청/응답 로깅
- Redis 캐싱: 자주 조회되는 데이터 캐싱
- TTL 설정: 데이터 유형별 차별화된 TTL
- 건강 기록: 5분
- 정책: 30분
- 돌봄 시설: 15분
- 사용자 정보: 10분
@LogExecutionTime: 실행 시간 로깅@RateLimit: Rate Limiting (로그인 시도 제한)@RequireAuthentication: 인증 필수(일부 컨트롤러는SecurityConfig+@PreAuthorize("isAuthenticated()")로 대체)@RequireAdminRole: 관리자 권한 필수@ValidateLocation: 지역 검증@ValidateChildAge: 연령대 검증
- N+1 쿼리 해결:
@EntityGraph·@BatchSize, 댓글 트리는 한 번에 읽어 메모리에서 조립 - 페이징 처리: 대용량 데이터 효율적 조회
- 인덱스 최적화: 50개 이상의 인덱스 설정
CareCode Interface는 오픈소스 프로젝트입니다. 기여를 환영합니다!
- 이슈 등록: 버그 발견 또는 기능 제안
- Fork: 저장소를 Fork합니다
- 브랜치 생성:
git checkout -b feature/amazing-feature - 커밋:
git commit -m 'feat: Add some amazing feature' - 푸시:
git push origin feature/amazing-feature - Pull Request: PR을 생성하고 리뷰 요청
feat: 새로운 기능 추가
fix: 버그 수정
refactor: 코드 리팩토링
docs: 문서 수정
test: 테스트 코드 추가/수정
chore: 빌드, 설정 파일 수정
style: 코드 포맷팅 (기능 변경 없음)
- Java: Google Java Style Guide
- 들여쓰기: 스페이스 4칸
- 줄 길이: 최대 120자
이 프로젝트의 소스 코드는 MIT 라이선스를 따릅니다. Copyright (c) 2025-2026 CareCode. 전문은 LICENSE 파일에 있습니다.
코드에 담긴 외부 데이터는 MIT 적용 대상이 아니며 각 제공처의 이용 조건을 따릅니다.
| 데이터 | 출처 | 쓰이는 곳 |
|---|---|---|
| 어린이집·유치원·병원·지원금 정보 | 공공데이터포털, 보육통합정보, 유치원알리미, 서울 열린데이터광장 | 동기화로 받아오며 저장소에 포함하지 않음 |
| 아동 성장 표준(LMS) | WHO Child Growth Standards | domain/health/growth/GrowthStandardTable |
프로젝트명: CareCode Interface (맘편한) 개발 기간: 2024.10 ~ 현재 참여 인원: 5명 GitHub: https://github.com/CareCode-Repo
프로젝트에 대한 문의사항이 있으시면 아래로 연락 주세요: 정보제공 책임자 - 오태훈
이 프로젝트는 오픈소스 개발자 경진대회를 위해 개발되었습니다.
육아를 하는 모든 부모님들의 행복한 육아를 응원합니다.
CareCode Interface - 부모를 위한 통합 육아 지원 플랫폼