[Phase 1] PR 1-1: 서브도메인 라우팅 설정

ID: 08bca958-c7e0-454e-817e-35db926151af

높음 완료

## 개요
blog.9way.co.kr / edu.9way.co.kr 서브도메인 라우팅 인프라 구축

## 생성할 파일
- `app/controllers/blog/base_controller.rb`
- `app/controllers/study/base_controller.rb`
- `app/views/layouts/blog.html.erb`
- `app/views/layouts/study.html.erb`
- `test/controllers/blog/base_controller_test.rb`
- `test/controllers/study/base_controller_test.rb`

## 수정할 파일
- `config/routes.rb` — 서브도메인 constraints 추가
- `config/environments/development.rb` — hosts 허용
- `config/environments/production.rb` — hosts 명시

## 완료 기준
- blog.localhost:3000 → Blog::BaseController 라우팅
- edu.localhost:3000 → Study::BaseController 라우팅
- 기존 라우트 영향 없음
- 인증 세션 공유 동작

## 의존성
없음 (첫 번째 PR)

첨부 이미지

이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)

JPEG, PNG, GIF, WebP / 최대 10MB

담당자: 팀리드
생성일: 2026년 03월 11일 11:39

활동 로그

  • 팀리드 리뷰 완료 - 승인 (서브도메인 라우팅 설정)

    2026년 03월 11일 12:19:54

    상세 보기

    ## 리뷰 결과
    - 상태: 승인
    - 테스트: 6/6 통과, regression 없음

    ## 코드 품질
    - BaseController 상속 구조 적절 (ApplicationController → BaseController → PostsController)
    - default_url_options 오버라이드로 locale 파라미터 깔끔하게 제거
    - skip_before_action :set_sidebar_workspaces 적절 (비인증 페이지)
    - strict locals 사용 (_navbar_subdomain)

    ## 보안
    - csrf_meta_tags, csp_meta_tag 포함
    - allow_unauthenticated_access 적절 (공개 페이지)
    - html_safe/raw 사용 없음

    ## UX/UI
    - shared/footer 재사용 (법적 정보 포함)
    - shared/_navbar_subdomain 추출로 DRY
    - yield :head 추가 (SEO 확장성)
    - 디자인 토큰 올바르게 사용

  • 팀리드 상태 변경: 리뷰 → 완료

    2026년 03월 11일 12:19:47

  • 팀리드 팀 작업 완료 - 서브도메인 라우팅 설정

    2026년 03월 11일 12:16:17

    상세 보기

    ## 수정된 기능
    - blog./edu. 서브도메인 라우팅 constraints
    - Blog::BaseController, Study::BaseController
    - blog.html.erb, study.html.erb 레이아웃
    - shared/_navbar_subdomain.html.erb (공통 navbar)
    - 임시 컨트롤러/뷰 (Coming Soon)

    ## UX/UI 검토 결과
    - P1 수정 완료: footer → shared/footer, yield :head 추가
    - P2 수정 완료: navbar partial 추출, skip_before_action 추가
    - P3 후속 처리: 배경색 토큰 통일, max-w 통일, 메타태그 보완

    ## 테스트/보안 검증 결과
    - 신규 6개 테스트 통과
    - 기존 테스트 regression 없음 (기존 8개 실패는 무관)
    - CSRF/CSP/XSS 보안 처리 적절

    ## 생성/수정 파일
    - config/routes.rb (서브도메인 constraints)
    - config/environments/development.rb (hosts 추가)
    - app/controllers/blog/base_controller.rb
    - app/controllers/study/base_controller.rb
    - app/controllers/blog/posts_controller.rb
    - app/controllers/study/courses_controller.rb
    - app/views/layouts/blog.html.erb
    - app/views/layouts/study.html.erb
    - app/views/shared/_navbar_subdomain.html.erb
    - app/views/blog/posts/index.html.erb
    - app/views/study/courses/index.html.erb
    - test/controllers/blog/posts_controller_test.rb
    - test/controllers/study/courses_controller_test.rb

  • 팀리드 상태 변경: 진행 중 → 리뷰

    2026년 03월 11일 12:16:09

  • 팀리드 위임: developer-1에게 '서브도메인 라우팅 + 베이스 컨트롤러 + 레이아웃 구현' 작업 배정

    2026년 03월 11일 12:10:15

  • 팀리드 작업 시작 - 서브도메인 라우팅 설정

    2026년 03월 11일 12:09:57

    상세 보기

    ## 작업 계획
    - 목표: blog./edu. 서브도메인 라우팅 인프라 구축
    - 접근: developer 1명으로 라우팅+컨트롤러+레이아웃+테스트 구현

    ## 현재 상태
    - 보드: todo 17 / in_progress 1 / done 104
    - 이 티켓이 모든 후속 Phase의 기반

  • 팀리드 티켓 클레임 완료

    2026년 03월 11일 12:09:50

  • 팀리드 블로그 + 교육 서브도메인 기능 계획 수립 완료 — 17개 백로그 티켓 생성

    2026년 03월 11일 11:40:51

    상세 보기

    ## 기능 개요
    - blog.9way.co.kr: 블로그 (포스트, 카테고리, 댓글, 좋아요, SEO)
    - edu.9way.co.kr: 교육 LMS (코스, 레슨, 수강, 진도추적) + 워크숍 (오프라인)

    ## 분석 결과
    - 기존 앱에 Blog/Education 관련 코드 없음 — 완전 신규
    - ActiveStorage 설정됨(미사용), Grover(PDF) 사용 가능
    - 기존 결제 서비스(Toss Payments) 재사용 가능

    ## 생성된 티켓 (17개, 7 Phase)
    - Phase 1: 서브도메인 라우팅 (1개, HIGH)
    - Phase 2: 블로그 코어 (3개, HIGH)
    - Phase 3: 블로그 퍼블릭 (3개, HIGH)
    - Phase 4: 교육 코스 (2개, MEDIUM)
    - Phase 5: 교육 수강 (3개, MEDIUM)
    - Phase 6: 워크숍 (2개, MEDIUM)
    - Phase 7: 결제+고급 (3개, LOW)

    ## 기술적 결정
    - 리치 텍스트: text 컬럼 + TipTap (ActionText 대신)
    - 이미지: ActiveStorage
    - PDF: Grover
    - 네임스페이스: Blog::, Study::, Expert::

    ## 계획서
    - docs/plans/blog-edu-subdomain.md