Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions docs/ai/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
4. `AGENTS.md`
5. 외부 문서와 메모

우선순위가 높은 정보와 낮은 정보가 충돌하면 낮은 쪽을 그대로 따르지 말고 먼저 불일치를 보고한다.
우선순위가 높은 정보와 낮은 정보가 충돌할 때의 처리 기준은 `AGENTS.md`의 **Before You Start** 섹션을 따른다.

## Document Roles

Expand All @@ -39,7 +39,6 @@
- 각 문서는 자기 책임 범위 안의 사실만 유지한다.
- 같은 사실을 여러 문서에 중복으로 길게 적지 않는다.
- 아직 확정되지 않은 내용은 확정된 사실처럼 쓰지 않는다.
- 코드와 문서가 어긋나면 문서를 조용히 믿고 진행하지 말고 먼저 불일치를 보고한다.

## Directory Guidance

Expand Down
6 changes: 6 additions & 0 deletions docs/ai/erd.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ Google OAuth 기반 사용자 정보
| profile_image_url | VARCHAR(500) | NULLABLE | 프로필 이미지 URL |
| provider | VARCHAR(20) | 활성 회원 NOT NULL | OAuth 제공자. 탈퇴 시 NULL |
| provider_id | VARCHAR(255) | 활성 회원 NOT NULL, 활성 회원 간 provider와 조합 UNIQUE | OAuth 제공자 측 사용자 ID. 탈퇴 시 NULL |
| tos_version | VARCHAR(30) | NOT NULL | 동의한 이용약관 버전 |
| tos_accepted_at | TIMESTAMP WITH TIME ZONE | NOT NULL | 이용약관 동의 또는 재동의 시각 |
| privacy_version | VARCHAR(30) | NOT NULL | 동의한 개인정보 처리방침 버전 |
| privacy_accepted_at | TIMESTAMP WITH TIME ZONE | NOT NULL | 개인정보 처리방침 동의 또는 재동의 시각 |
| deleted_at | TIMESTAMP WITH TIME ZONE | NULLABLE | 탈퇴 시각. NOT NULL이면 익명화된 탈퇴 회원 |
| created_at | TIMESTAMP WITH TIME ZONE | NOT NULL, DEFAULT NOW() | 가입일시 |
| updated_at | TIMESTAMP WITH TIME ZONE | NOT NULL, DEFAULT NOW() | 수정일시 |
Expand All @@ -32,6 +36,8 @@ Google OAuth 기반 사용자 정보

> 활성 회원은 email/nickname/provider/provider_id가 NOT NULL이며 이메일과 (provider, provider_id) 조합이 unique. 탈퇴 회원은 모두 NULL 가능하며 unique 검사 대상에서 제외되어 동일 OAuth 계정으로 재가입할 수 있다.

약관 원문은 DB에 저장하지 않고 백엔드 리소스 파일로 관리한다. 현재 버전은 `application.yaml`의 `app.agreements` 설정을 기준으로 하며, 프론트엔드는 버전 문자열을 전송하지 않는다.

---

## 2. rooms (여행 방)
Expand Down
3 changes: 3 additions & 0 deletions docs/ai/features.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ Caddy는 `caddy-ratelimit` 기반 IP 제한으로 엣지에서 넓고 거친 폭
| 상태 | 기능 | 설명 | ERD 연관 |
|------|------|------|----------|
| `[x]` | 구글 OAuth 로그인 | Google 계정으로 소셜 로그인 | users |
| `[x]` | 현재 약관 조회 | `GET /api/agreements/current`로 현재 이용약관과 개인정보 처리방침 원문 Markdown, 버전, 문서 타입을 비인증 상태에서 조회한다. 약관 원문은 백엔드 리소스 파일에 있고 현재 버전은 `application.yaml`에서 관리한다 | - |
| `[x]` | 가입 약관 동의 기록 | `POST /auth/google/login`에서 프론트는 `agreementsAccepted`만 전송한다. 신규 사용자는 값이 `true`일 때만 생성되며, 백엔드 현재 약관 버전과 서버 시간을 `users`에 저장한다 | users |
| `[x]` | 약관 재동의 | 기존 사용자의 저장 약관 버전이 현재 서버 버전과 다르면 로그인 시 재동의가 필요하다. 로그인 요청에서 `agreementsAccepted=true`이면 서버 현재 버전으로 갱신 후 토큰을 발급하고, 이미 로그인된 사용자는 `POST /api/users/me/agreements`로 현재 약관에 재동의한다 | users |
| `[x]` | 토큰 재발급 (Refresh) | Refresh Token Rotation: UUID 기반 HTTP-only 쿠키(path=/auth/refresh), Redis `refresh:token:{uuid}`→userId(TTL 14일) / `refresh:user:{userId}`→Set\<uuid\>. Replay Detection 으로 탈취 시 전체 무효화 | Redis |
| `[x]` | 로그아웃 | 단일 기기 로그아웃: 요청한 토큰만 삭제 | Redis |
| `[x]` | 내 정보 조회 | 로그인된 사용자 프로필 조회 | users |
Expand Down
154 changes: 154 additions & 0 deletions docs/legal/policy-preparation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
# 약관·개인정보 처리 준비 체크리스트

> 배포 전에 작성·고지해야 하는 약관 및 개인정보 관련 정책을 정리한다.
> 현재 단계: `초안`. 실제 약관 본문은 별도 문서로 분리해 작성한다.

## 문서 목적

- 배포 전 법적으로 갖춰야 할 약관/정책 항목을 식별한다.
- 우리 서비스(여행 협업 + AI 어시스턴트)에서 어떤 조항이 핵심인지 정리한다.
- 약관에 적은 절차를 실제로 이행하려면 코드/기능 상 무엇을 추가해야 하는지 추적한다.

## 서비스 특성 요약

- **수집 정보**: Google OAuth 프로필(이메일, 이름, 프로필 이미지), 채팅 메시지, 여행 일정/북마크, 접속 로그, 쿠키 기반 인증 토큰
- **외부 전송**: Google Places/Routes API, 자체 AI 서버
- **저장소**: PostgreSQL, MongoDB(채팅), Redis(세션·캐시)
- **회원 기능**: 로그인/로그아웃은 구현됨. **회원 탈퇴, 신고, 운영자 제재 절차는 미구현** (`docs/ai/features.md` 기준)

---

## 1. 법적으로 반드시 필요한 문서

| 문서 | 근거 법령 | 비고 |
|------|-----------|------|
| 개인정보 처리방침 | 개인정보보호법 §30 | 홈페이지 첫 화면에서 쉽게 접근 가능해야 함 |
| 이용약관 | 약관규제법, 전기통신사업법 | 가입 전 동의 절차 필요 |
| 운영정책 | 이용약관 하위 정책 | 채팅·게시물·AI·초대코드·이용제한·신고/이의제기 세부 기준 |
| 운영자 정보 표시 | 정보통신망법 §10 | 상호, 대표자, 주소, 사업자번호, 연락처, 개인정보 보호책임자 |
| 저작권 정책 | 저작권법 §102, §103 | 이용자 콘텐츠의 권리 침해 신고, 게시중단, 재게시 요청 절차 안내 |

> 위치정보법은 "단말기 위치"를 수집하지 않고 사용자가 검색한 장소 좌표만 다루면 일반적으로 적용 범위 밖이다. 추후 "내 위치 기반 추천" 기능 도입 시 **위치기반서비스 이용약관**과 방통위 신고가 추가로 필요하다.

---

## 2. 개인정보 처리방침에 들어가야 할 항목

> 개인정보보호법 시행령 §31 기준. 각 항목을 우리 서비스 맥락으로 채워야 한다.

### 2-1. 수집 항목 / 수집 목적

- **필수 수집**: Google OAuth `sub`(고유 ID), 이메일, 이름, 프로필 이미지 URL
- **자동 수집**: IP, User-Agent, 접속 일시, 쿠키(`access_token`, `refresh_token`), Redis presence 정보
- **사용자 입력**: 방 제목·여행지·날짜, 채팅 메시지, 북마크/일정 메모

### 2-2. 보유·이용 기간

- 회원 정보: 탈퇴 시까지. 탈퇴 시 계정 식별 정보는 삭제 또는 익명화하고 인증 정보는 무효화
- 여행 방 단위 데이터(방 제목, 채팅, 일정, 북마크, 메모): 방 삭제 시까지. 단, 탈퇴 처리와 함께 방이 삭제되는 경우 함께 삭제
- **법령상 의무 보관 (검토 필요)**:
- 통신비밀보호법: 접속 로그 3개월
- 전자상거래법: 소비자 불만/분쟁 처리 기록 3년 — 결제 기능이 없으면 적용 범위가 좁음

### 2-3. 제3자 제공 · 국외 이전 · 처리위탁

> 외부 호출이 많아 이 항목이 가장 큰 리스크다. 누가 어떤 데이터를 받는지 명확히 적어야 한다.

- **제3자 제공**: 사전 동의 또는 법령상 근거가 있는 예외를 제외하고 제공하지 않는 것으로 정리
- **Google (미국)**: OAuth 인증, Places/Routes API, Google Analytics → 처리 위탁 및 국외 이전 고지 필요
- **OpenAI (미국)**: AI 응답 생성, 대화 요약 생성 → 처리 위탁 및 국외 이전 고지 필요
- **클라우드 인프라(AWS Lightsail 등)**: 처리 위탁 및 국외 이전 고지 필요
- 채팅 메시지에 포함된 **다른 사용자의 메시지/장소 스냅샷**이 AI 서버로 함께 전송되는 흐름을 명확히 적어야 한다.

### 2-4. 정보주체 권리

- 열람, 정정, 삭제, 처리정지, 동의 철회권 안내
- 권리 행사 방법 (이메일 또는 서비스 내 메뉴 등)

### 2-5. 자동 수집 장치 (쿠키 등)

- HTTP-only 쿠키(`access_token`, `refresh_token`) 사용 사실
- 쿠키 거부 방법과 거부 시 영향 (로그인 불가)

### 2-6. 개인정보 보호책임자

- 이름, 직책, 연락처 (이메일 가능)

### 2-7. 만 14세 미만 처리

- 만 14세 미만 가입을 불허할지, 법정대리인 동의를 받을지 정책 결정 — `미결`
- 통상 스타트업은 "만 14세 미만 가입 불가" 정책으로 단순화한다.

### 2-8. 변경 절차

- 처리방침 변경 시 사전 고지 기간과 통지 방법

---

## 3. 이용약관 핵심 조항

| 조항 | 우리 서비스에서 다뤄야 할 내용 |
|------|--------------------------------|
| 서비스 내용 | "여행 계획 협업 + AI 어시스턴트 보조" 명시 |
| 회원 가입/자격 | Google 계정 보유자, 만 14세 이상 |
| 계정·탈퇴 절차 | **현재 미구현** — 탈퇴 API/UI 마련 필요 |
| 이용제한·정지 | 사유, 기간, 사전·사후 통지 절차, 이의제기 절차 |
| 금지 행위 | 도배, 음란/혐오/명예훼손, 타인 사칭, 크롤링, 부정 이용 |
| 운영정책 | 여행 방, 채팅, AI 어시스턴트, 초대코드, 신고 및 이용 제한 세부 기준 |
| 게시물 정책 | 채팅·북마크·일정 메모의 권리 귀속(사용자 보유), 서비스 운영 목적 사용 동의 범위 |
| 저작권 신고/게시중단 | 권리자 신고, 작성자 통지, 재게시 요청, 반복 침해자 제한 |
| AI 응답 면책 | AI 추천은 참고용이며 정확성·안전성 보장하지 않음 |
| 외부 데이터 면책 | Google 장소 정보(영업시간·평점 등)는 Google 제공 자료이며 실제와 다를 수 있음 |
| 서비스 변경/중단 | 사전 공지 기간, 무료 서비스 한정 면책 |
| 손해배상/면책 | 무료 서비스 특성 반영 |
| 분쟁 해결 | 준거법(대한민국), 관할 법원, 사전 협의 절차 |

---

## 4. 코드/기능 측에서 추가로 준비할 작업

> 약관 본문만 작성해도 실제 절차를 이행할 수 없으면 의미가 없다. 다음 항목이 `docs/ai/features.md`에 없거나 부족하다.

| # | 항목 | 비고 |
|---|------|------|
| 1 | 회원 탈퇴 기능 | 현재 worktree의 인증 섹션에는 없음. `feature/user-withdrawal` 기준 정책은 계정 식별 정보 익명화, 참여 정보 삭제, 방 단위 협업 데이터는 방 삭제 시까지 유지 |
| 2 | 계정 정지/차단 운영자 도구 | 방장 추방은 있으나 서비스 차원의 제재 수단 없음 |
| 3 | 신고 기능 | 다른 사용자/메시지 신고 API |
| 4 | 저작권 게시중단 처리 절차 | 이메일 접수로 시작 가능하나 운영자 검토/작성자 통지/재게시 요청 기록 필요 |
| 5 | 약관 동의 이력 저장 | 가입 시 어떤 버전에 동의했는지, 변경 시 재동의 처리 |
| 6 | 개인정보 파기 절차 | 탈퇴 후 보관 기간, 자동 파기 배치 |
| 7 | 로그 보관 기간 정책 | 접속 로그는 통신비밀보호법 시행령 기준 3개월로 정리. 채팅 로그는 방 삭제 시까지 보관하는 기준과 구현 일치 필요 |
| 8 | 데이터 열람/내보내기 (선택) | 정보주체의 열람권 대응. 이메일 송부로도 대체 가능 |

---

## 5. 진행 순서 (제안)

1. **정책 결정** (코드 작업보다 먼저)
- 탈퇴 시 계정 식별 정보 익명화와 방 단위 협업 데이터 보관 정책 반영
- 만 14세 미만 정책 (가입 차단으로 단순화 권장)
- 신고 처리 SLA
- 저작권 게시중단 및 재게시 요청 처리 방식
- 채팅 보관 기간과 방 삭제 시 처리 방식
2. **운영자 정보 확정**
- 사업자등록 여부, 대표자, 주소, 연락처
- 개인정보 보호책임자 지정
3. **회원 탈퇴/신고 기능 구현**
- 약관에 적을 절차가 실제로 동작하도록 코드 추가
4. **약관·처리방침·운영정책·저작권 정책 초안 작성**
- 한국인터넷진흥원(KISA) 표준 처리방침 양식 활용 가능
5. **가입 동의 UI / 약관 버전 관리 구현**
6. **법률 검토**
- 가능하면 변호사 검토. 특히 AI 데이터 처리, 국외 이전 부분이 중요하다.

---

## 미결 사항

| # | 항목 | 비고 |
|---|------|------|
| 1 | 탈퇴 시 채팅 메시지 처리 | `feature/user-withdrawal` 기준: 방 단위 협업 데이터로 방 삭제 시까지 유지. 탈퇴자의 계정 식별 정보와 참여 정보는 삭제 또는 익명화 |
| 2 | 만 14세 미만 정책 | 가입 차단 vs 법정대리인 동의 |
| 3 | 채팅 메시지 AI 전송 고지 방식 | 처리 위탁 및 국외 이전 고지로 정리. 실제 가입/AI 호출 UI 고지 방식 결정 필요 |
| 4 | 회원 정보 탈퇴 후 보관 기간 | 즉시 파기 vs N일 유예 |
| 5 | 사업자등록 여부 | 등록 시점, 상호, 주소 |
111 changes: 111 additions & 0 deletions docs/policy/copyright-policy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
# 저작권 정책

**시행일: 2026년 6월 6일**

---

## 1. 목적

이 정책은 우때(이하 "서비스")에서 이용자가 작성·등록·공유한 콘텐츠가 타인의 저작권 등 권리를 침해한다는 신고가 접수된 경우의 처리 기준과 절차를 안내합니다.

서비스는 이용자의 콘텐츠 작성과 공유를 존중하지만, 타인의 저작권, 상표권, 초상권, 개인정보 등 정당한 권리를 침해하는 콘텐츠의 게시를 허용하지 않습니다.

---

## 2. 적용 대상

이 정책은 서비스 내에서 이용자가 작성·등록·공유하는 다음 콘텐츠에 적용됩니다.

1. 여행 방 채팅 메시지
2. 여행 일정, 메모, 북마크 장소 설명
3. 프로필 이름, 프로필 이미지 등 이용자가 직접 등록한 정보
4. 그 밖에 서비스 내에서 이용자가 게시하거나 공유한 문자, 이미지, 링크 등 콘텐츠

Google 등 외부 서비스가 제공하는 장소 정보, 사진, 지도, 경로 정보에는 해당 외부 서비스의 약관과 정책이 적용될 수 있습니다.

---

## 3. 저작권 침해 신고

권리자 또는 정당한 대리인은 서비스 내 콘텐츠가 본인의 저작권 등 권리를 침해한다고 판단하는 경우 team.uttae@gmail.com으로 게시중단을 요청할 수 있습니다.

신속한 처리를 위해 신고에는 다음 정보를 포함해 주세요.

1. 신고자의 이름 또는 단체명
2. 연락 가능한 이메일 주소
3. 권리자 본인 또는 정당한 대리인임을 확인할 수 있는 정보
4. 침해되었다고 주장하는 저작물 또는 권리의 설명
5. 서비스 내 침해 의심 콘텐츠를 확인할 수 있는 정보
- 여행 방 이름, 작성자, 작성 시각, 화면 캡처, URL 등 가능한 식별 정보
6. 해당 콘텐츠가 권리자의 허락 없이 사용되었다고 판단하는 이유
7. 신고 내용이 사실과 다르지 않다는 확인

대리인이 신고하는 경우 위임장 등 대리권을 확인할 수 있는 자료를 함께 제출해야 합니다.

---

## 4. 게시중단 및 작성자 통지

운영자는 신고 내용을 검토한 뒤 권리 침해가 합리적으로 의심되거나 관련 법령상 조치가 필요하다고 판단되는 경우 해당 콘텐츠를 숨김, 삭제 또는 접근 제한할 수 있습니다.

운영자가 콘텐츠를 게시중단한 경우, 가능한 범위에서 해당 콘텐츠를 작성한 이용자에게 다음 내용을 알립니다.

1. 게시중단된 콘텐츠
2. 게시중단 사유
3. 신고자 또는 권리주장자의 주장 요지
4. 재게시 요청 방법

다만, 작성자의 연락처를 확인할 수 없거나 긴급한 피해 방지, 법령 준수, 보안상 필요가 있는 경우에는 사후 통지하거나 통지를 생략할 수 있습니다.

---

## 5. 재게시 요청

게시중단된 콘텐츠의 작성자는 해당 콘텐츠가 정당한 권리에 따라 게시되었거나, 신고 내용이 오인 또는 착오에 따른 것이라고 판단하는 경우 team.uttae@gmail.com으로 재게시를 요청할 수 있습니다.

재게시 요청에는 다음 정보를 포함해 주세요.

1. 요청자의 이름
2. 연락 가능한 이메일 주소
3. 게시중단된 콘텐츠를 식별할 수 있는 정보
4. 해당 콘텐츠를 게시할 정당한 권리가 있음을 소명하는 자료
5. 재게시 요청 내용이 사실과 다르지 않다는 확인

운영자는 재게시 요청이 접수되면 관련 법령과 제출 자료를 검토하여 게시 재개 여부를 판단합니다. 필요한 경우 신고자와 작성자에게 추가 자료 제출을 요청할 수 있습니다.

---

## 6. 반복 침해자 조치

운영자는 동일 이용자가 반복적으로 타인의 권리를 침해하는 콘텐츠를 게시하거나, 허위 신고 또는 부정한 재게시 요청을 반복한다고 판단하는 경우 서비스 이용을 제한하거나 계정을 삭제할 수 있습니다.

조치의 범위는 위반 행위의 내용, 반복 여부, 피해 규모, 고의성, 소명 여부를 고려하여 결정합니다.

---

## 7. 허위 신고 및 책임

신고자와 재게시 요청자는 본인이 제출한 정보와 자료가 정확한지 확인해야 합니다.

허위 신고, 허위 소명, 권리 없는 게시중단 요청 또는 재게시 요청으로 인해 다른 이용자, 운영자 또는 제3자에게 손해가 발생한 경우, 해당 요청자는 관련 법령에 따라 책임을 부담할 수 있습니다.

---

## 8. 문의처

저작권 침해 신고, 게시중단, 재게시 요청 및 이 정책에 관한 문의는 아래 연락처로 보내주시기 바랍니다.

| 항목 | 내용 |
|------|------|
| 서비스명 | 우때 |
| 이메일 | team.uttae@gmail.com |

---

## 9. 정책의 변경

운영자는 관련 법령, 서비스 운영 방식, 신고 처리 절차의 변경에 따라 이 정책을 변경할 수 있습니다. 정책이 변경되는 경우 서비스 내 공지 또는 정책 문서 갱신을 통해 안내합니다.

| 버전 | 시행일 |
|------|--------|
| 1.0 | 2026년 6월 6일 |
Loading