프로필 이미지 업로드
ID: 3ef54083-1d39-4430-8694-adf90cd29466
## 목표
사용자 프로필 이미지 직접 업로드 기능 (현재 OAuth 이미지만 사용)
## 구현 내용
1. **Active Storage 설정**
- User 모델에 has_one_attached :avatar
- 이미지 리사이즈 (image_processing gem)
- 기존 profile_image(URL)와 avatar 우선순위 처리
2. **UI**
- 프로필 편집에 이미지 업로드 영역
- 이미지 미리보기 (Stimulus 컨트롤러)
- 크롭/리사이즈 클라이언트 처리
3. **표시**
- avatar || profile_image || 기본 아바타 fallback
- 전체 뷰에서 프로필 이미지 헬퍼 사용
## 완료 기준
- [ ] Active Storage 설정 + User.has_one_attached :avatar
- [ ] 프로필 편집 이미지 업로드 UI
- [ ] 이미지 미리보기 Stimulus 컨트롤러
- [ ] user_avatar_url 헬퍼 (avatar > profile_image > default)
- [ ] 파일 크기/형식 유효성 검사
- [ ] 테스트
## 관련 파일
- app/models/user.rb
- app/controllers/profiles_controller.rb
- app/views/profiles/edit.html.erb
- app/helpers/
첨부 이미지
이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)
JPEG, PNG, GIF, WebP / 최대 10MB
서브 티켓 (1/1 완료)
활동 로그
-
팀팀리드 프로필 이미지 업로드 기능 구현 완료
2026년 03월 03일 06:11:27
상세 보기
## 생성된 파일
- `db/migrate/20260303060000_create_active_storage_tables.active_storage.rb` - Active Storage 테이블 (UUID PK)
- `config/initializers/active_storage.rb` - Active Storage UUID 생성 훅
- `app/javascript/controllers/image_preview_controller.js` - Stimulus 이미지 미리보기
- `test/fixtures/files/test.jpg`, `test/txt` - 테스트 파일## 수정된 파일
- `app/models/user.rb` - has_one_attached :avatar + avatar_url 메서드 + 유효성 검사 (5MB, 이미지 타입)
- `app/controllers/profiles_controller.rb` - :avatar permit + remove_avatar 처리
- `app/views/profiles/show.html.erb` - URL 입력 → 파일 업로드 UI + Stimulus 미리보기
- `app/views/shared/_header.html.erb` - avatar_url 적용
- `app/views/shared/_sidebar.html.erb` - avatar_url 적용
- `app/views/prayer_partners/` (4파일) - avatar_url 적용
- `app/views/qt/sessions/` (4파일: show, members, rankings, shared_meditations) - avatar_url 적용
- `db/structure.sql` - Active Storage 테이블 추가
- `test/models/user_test.rb` - 아바타 테스트 7개 추가
- `test/controllers/profiles_controller_test.rb` - 업로드/삭제/거부 테스트 3개 추가## 테스트 결과
- 541 runs, 1302 assertions, 0 failures, 0 errors -
팀팀리드 상태 변경: 진행 중 → 완료
2026년 03월 03일 06:11:15
-
팀팀리드 위임: profile-img-dev에게 'Active Storage + 프로필 이미지 업로드 전체 구현' 작업 배정
2026년 03월 03일 05:22:46
-
팀팀리드 작업 시작 - 프로필 이미지 업로드
2026년 03월 03일 05:22:36
상세 보기
## 작업 계획
- 목표: Active Storage 기반 프로필 이미지 업로드 + 미리보기 UI
- 접근 방식: Active Storage 설치 → User avatar 연결 → UI/Stimulus → 테스트## 현재 상태 분석
- Active Storage: 미설치 (blobs/attachments 테이블 없음)
- image_processing gem: Gemfile에 이미 존재
- User.profile_image: OAuth URL 저장 (text 컬럼)
- Avatar 파셜: src URL 또는 이니셜 fallback
- 프로필 편집: URL 텍스트 입력 방식## 서브 티켓 계획
1. Active Storage 설치 + User avatar + avatar_url 헬퍼 + 컨트롤러/뷰 + Stimulus 미리보기 + 테스트 -
팀팀리드 티켓 클레임 완료
2026년 03월 03일 05:21:56
-
팀팀리드 기능 계획 수립 - 프로필 이미지 업로드 (Phase 3)
2026년 03월 02일 12:01:08
상세 보기
## 기능 개요
- Active Storage 기반 사용자 프로필 이미지 업로드## 분석 결과
- 영향 범위: models/user.rb, controllers/profiles_controller.rb, views/profiles/, helpers/
- 기존 패턴: profile_image 컬럼(OAuth URL) 존재 → avatar 우선순위 처리 필요## Phase 정보
- **Phase 3** - 후순위
- 복잡도: moderate (~6 파일)