feat: APNs/FCM 키 등록 및 조회 API 구현 (#48) #49

Merged
seonkyu.kim merged 1 commits from feature/#48-apns-fcm-credentials into develop 2026-02-09 15:33:09 +00:00
Owner

📋 작업 요약

APNs 및 FCM 푸시 발송에 필요한 인증 키를 등록하고 조회하는 API를 구현합니다.

Closes #48

🛠️ 작업 내용 (Changes)

Application Layer

  • ApnsCredentialsRequestDto.cs — APNs 키 등록 요청 DTO (BundleId, KeyId, TeamId, PrivateKey)
  • FcmCredentialsRequestDto.cs — FCM 키 등록 요청 DTO (ServiceAccountJson)
  • CredentialsResponseDto.cs — 키 정보 조회 응답 DTO (메타 정보만)
  • ICredentialEncryptionService.cs — 암호화 서비스 인터페이스
  • IServiceManagementService.cs — APNs/FCM 메서드 추가
  • ServiceManagementService.cs — 비즈니스 로직 구현

Infrastructure Layer

  • CredentialEncryptionService.cs — AES-256 암호화/복호화 서비스 구현
  • DependencyInjection.cs — DI 등록

API Layer

  • POST /v1/in/service/{serviceCode}/apns — APNs 키 등록
  • POST /v1/in/service/{serviceCode}/fcm — FCM 키 등록
  • POST /v1/in/service/{serviceCode}/credentials — 키 정보 조회

Domain

  • ErrorCodes.cs — Service 도메인 에러 코드 추가 (DecryptionFailed, InvalidCredentials)

📢 리뷰어 참고 사항 (To Reviewers)

  1. 암호화 키 설정 필요: appsettings.jsonCredentialEncryption:Key에 32바이트(Base64 인코딩) 키를 설정해야 합니다.
  2. APNs 키 형식 검증: .p8 파일의 BEGIN PRIVATE KEY / END PRIVATE KEY 존재 여부 확인
  3. FCM 키 형식 검증: JSON 파싱 및 필수 필드(project_id, private_key, client_email) 존재 확인
  4. 보안: 조회 시 Private Key는 반환하지 않고 메타 정보만 반환

체크리스트 (Self Checklist)

  • 빌드 성공 확인
  • AES-256 암호화로 Private Key 저장
  • 조회 시 민감 정보(Private Key) 미노출
  • Swagger 어노테이션 적용

📸 스크린샷 / 테스트 로그 (Screenshots/Logs)

빌드했습니다.
    경고 0개
    오류 0개
## 📋 작업 요약 APNs 및 FCM 푸시 발송에 필요한 인증 키를 등록하고 조회하는 API를 구현합니다. ## 🔗 관련 이슈 (Related Issues) Closes #48 ## 🛠️ 작업 내용 (Changes) ### Application Layer - `ApnsCredentialsRequestDto.cs` — APNs 키 등록 요청 DTO (BundleId, KeyId, TeamId, PrivateKey) - `FcmCredentialsRequestDto.cs` — FCM 키 등록 요청 DTO (ServiceAccountJson) - `CredentialsResponseDto.cs` — 키 정보 조회 응답 DTO (메타 정보만) - `ICredentialEncryptionService.cs` — 암호화 서비스 인터페이스 - `IServiceManagementService.cs` — APNs/FCM 메서드 추가 - `ServiceManagementService.cs` — 비즈니스 로직 구현 ### Infrastructure Layer - `CredentialEncryptionService.cs` — AES-256 암호화/복호화 서비스 구현 - `DependencyInjection.cs` — DI 등록 ### API Layer - `POST /v1/in/service/{serviceCode}/apns` — APNs 키 등록 - `POST /v1/in/service/{serviceCode}/fcm` — FCM 키 등록 - `POST /v1/in/service/{serviceCode}/credentials` — 키 정보 조회 ### Domain - `ErrorCodes.cs` — Service 도메인 에러 코드 추가 (DecryptionFailed, InvalidCredentials) ## 📢 리뷰어 참고 사항 (To Reviewers) 1. **암호화 키 설정 필요**: `appsettings.json`의 `CredentialEncryption:Key`에 32바이트(Base64 인코딩) 키를 설정해야 합니다. 2. **APNs 키 형식 검증**: .p8 파일의 `BEGIN PRIVATE KEY` / `END PRIVATE KEY` 존재 여부 확인 3. **FCM 키 형식 검증**: JSON 파싱 및 필수 필드(project_id, private_key, client_email) 존재 확인 4. **보안**: 조회 시 Private Key는 반환하지 않고 메타 정보만 반환 ## ✅ 체크리스트 (Self Checklist) - [x] 빌드 성공 확인 - [x] AES-256 암호화로 Private Key 저장 - [x] 조회 시 민감 정보(Private Key) 미노출 - [x] Swagger 어노테이션 적용 ## 📸 스크린샷 / 테스트 로그 (Screenshots/Logs) ``` 빌드했습니다. 경고 0개 오류 0개 ```
seonkyu.kim added 1 commit 2026-02-09 15:32:08 +00:00
- APNs 키 등록 API (POST /v1/in/service/{serviceCode}/apns)
- FCM 키 등록 API (POST /v1/in/service/{serviceCode}/fcm)
- 키 정보 조회 API (POST /v1/in/service/{serviceCode}/credentials)
- AES-256 암호화로 민감 정보 저장
- 조회 시 메타 정보만 반환 (Private Key 미노출)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
seonkyu.kim added the
Priority
High
Status
In Progress
Type
Feature
labels 2026-02-09 15:32:20 +00:00
seonkyu.kim added this to the Phase 2-1: 인증 & 계정 & 서비스 API milestone 2026-02-09 15:32:23 +00:00
seonkyu.kim self-assigned this 2026-02-09 15:32:29 +00:00
seonkyu.kim requested review from Owners 2026-02-09 15:32:34 +00:00
seonkyu.kim merged commit e335f762bd into develop 2026-02-09 15:33:10 +00:00
seonkyu.kim deleted branch feature/#48-apns-fcm-credentials 2026-02-09 15:33:29 +00:00
seonkyu.kim added
Status
Done
and removed
Status
In Progress
labels 2026-02-09 15:33:49 +00:00
Sign in to join this conversation.
No description provided.