제주 청년 지원사업, 놓치기 전에 알려드립니다.
제주에 사는 19~39세 청년은 취업·창업·주거 지원사업을 찾으려면 온통청년, 제주도청 등 여러 기관 공고를 일일이 뒤져야 합니다. 문제는 "정보가 없어서"가 아니라 신청 마감 타이밍을 놓쳐서 기회를 흘려보낸다는 것입니다. 탐라모아는 흩어진 지원사업 공고를 한 곳에 모아 검색·필터로 찾게 하고, 관심 공고를 북마크해두면 마감 D-7·D-3·D-1에 웹·이메일로 먼저 알려줍니다.
서비스 바로가기: tamla-moa.vercel.app
| 랜딩 | 핵심 기능 | 정책 검색 |
|---|---|---|
![]() |
![]() |
![]() |
- 마감 알림 — 북마크한 공고의 신청 마감이 다가오면 D-7/D-3/D-1 중 선택한 시점에 웹 알림과 이메일(Gmail)로 알려줌. 채널별 on/off 가능 — 이 서비스의 핵심 차별점
- 정책 검색·필터 — 카테고리(다중 선택), 나이, 지역, 고용상태, 정렬(마감임박/기관명/조회수)로 조건 검색
- D-day 표시 — 목록·상세에서 마감까지 남은 일수를 바로 확인, 마감 지난 공고는 기본적으로 숨김
- 북마크 & 캘린더 — 관심 공고를 계정에 저장하고, 마감일을 달력에서 한눈에 (상시 모집 공고는 접이식 요약으로 별도 표시)
- 최근 본 공고 — 로그인 없이도 브라우저에 최근 조회한 공고 기록
| 구분 | 기술 |
|---|---|
| 프론트엔드 · API | Next.js (TypeScript), Vercel 배포 |
| DB · 인증 | Supabase Postgres, Supabase Auth(Google OAuth), RLS로 사용자별 데이터 격리 |
| 정책 데이터 | 온통청년 getPlcy 공공 API → GitHub Actions로 15분 주기 갱신 → policy_cache 공개 읽기 캐시 |
| 예약 이메일 | Supabase Cron → Edge Functions(Deno) → Gmail API |
| UI · 디자인 시스템 | shadcn/ui + Tailwind CSS, Pretendard 폰트 |
자세한 아키텍처는 docs/architecture.md를 참고하세요.
- RLS + 컬럼 단위 권한 이중 방어 — 북마크·알림 설정 테이블은 Row Level Security로 "내 데이터만" 접근을 강제하고, 서버 전용 상태 컬럼(예: 발송 쿨다운 타임스탬프)은 GRANT/REVOKE로 클라이언트가 아예 쓰지 못하도록 열 단위로도 막았습니다.
- 원자적 rate-limit — 이메일 발송 제한은
security definerPostgres 함수의UPDATE ... WHERE ... RETURNING패턴으로 처리해, 동시 요청에도 경쟁 조건 없이 안전하게 1회만 통과시킵니다. - CSS Cascade Layers 버그 추적 — 대형 모니터에서 랜딩페이지 레이아웃이 깨지는 문제를,
@layer밖에 선언된 CSS가 Tailwind 유틸리티보다 항상 우선 적용되는 브라우저 표준 동작 때문임을 원인부터 특정해 해결했습니다.
npm install
cp .env.example .env.local # 값 채우기
npm run dev| 명령어 | 설명 |
|---|---|
npm run dev |
개발 서버 실행 |
npm run build |
프로덕션 빌드 |
npm run lint |
ESLint 검사 |
npm run test:email-notifications |
이메일 알림 로직 단위 테스트 |
node --test scripts/refresh-policy-cache.test.mjs |
정책 캐시 갱신 스크립트 단위 테스트 |
.env.local에 필요한 값은 .env.example을 참고하세요. Gmail 알림 관련 설정은 docs/email-notifications-setup.md에 별도로 정리되어 있습니다.
- docs/product-plan.md — 제품 기획, MVP 범위
- docs/architecture.md — 기술 구조, 데이터 모델, API 계약
- docs/design-system.md — 디자인 토큰, UI 컴포넌트 규칙
- docs/git-workflow.md — 브랜치·PR·리뷰 워크플로우
- docs/dev-log.md — 작업 기록
5인 팀, 8일 스프린트로 기획부터 배포까지 진행한 팀 프로젝트입니다.
| 역할 | 팀원 |
|---|---|
| 총괄 | 이지훈 |
| 백엔드 | 김승민, 정윤호 |
| 프론트엔드 | 송다검, 진진솔 |


