Skip to content

feat: Notion API 통신 계층 구현 - #177

Merged
A6ul1213 merged 5 commits into
devfrom
feat/#176-api-networking
Oct 31, 2026
Merged

A6ul1213 merged 5 commits into
devfrom
feat/#176-api-networking

Conversation

@A6ul1213

@A6ul1213 A6ul1213 commented Oct 31, 2026 •

Copy link
Copy Markdown
Member

Summary

  • GYMUP V1 API 계약에 맞춘 Swift 네트워크 기반, DTO 및 도메인별 서비스를 구현했습니다.
  • API 환경과 Bearer 토큰 공급자를 주입 가능하게 구성하고, 명세에 구조가 없는 중첩 값은 JSONValue로 보존합니다.
  • SwiftLint 지적을 수정하고 네트워크 테스트를 공용 지원 코드와 도메인별 파일로 분리했습니다.
  • SwiftUI 화면과 ViewModel에는 연결하지 않았습니다.

API 명세와 범위

  • 기준: GYMUP V1 - API 기명서. 대응표는 docs/API_CONTRACT_MAPPING.md입니다.
  • 검토 의견에서는 #176의 23개 API 항목과 차이가 있다고 지적했습니다. 기준 Notion 표에는 25개 행이 확인되어, 사용자의 지시에 따라 Notion 명세를 기준으로 삼았습니다.
  • URLProtocol 테스트는 코드가 구성한 요청과 fixture 응답을 검증합니다. 실제 서버와의 통합을 검증한 것은 아닙니다.
  • 현재 PR은 통신 기반만 제공합니다. 앱에서 API 요청을 보내지 않으며, 앱 설정에서 base URL을 공급하고 서비스를 앱 흐름에 연결하는 일은 후속 작업입니다.
  • 사진 API는 업로드 메타데이터와 presigned URL 발급까지만 다룹니다. 반환된 storage URL로 사진 바이너리를 PUT하는 기능은 후속 작업입니다.

관련 이슈

Closes #176

검증

  • Swift 5 네트워킹 소스 타입체크
  • Tuist 프로젝트 생성, generic iOS build, build-for-testing
  • git diff --check, SwiftLint 줄 길이 경고 기준 확인
  • 실제 XCTest 실행: 로컬에서 실행하지 못함; CI 결과 대기 중
  • swiftlint lint --strict: 로컬 SwiftLint 실행 파일이 없어 실행하지 못함; CI 결과 대기 중
  • UI 런타임 확인: UI 변경 없음

체크리스트

  • UI/ViewModel에서 API 서비스를 호출하지 않습니다.
  • API 계약의 누락된 세부 객체는 선택한 정책대로 JSONValue로 보존합니다.
  • CI에서 strict SwiftLint와 XCTest가 통과하는지 확인합니다.

@dltldn1234 dltldn1234 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

공통 APIClient와 도메인별 서비스로 나눈 방향은 좋습니다. 주소와 인증 공급자를 주입하도록 만든 점도 확인했습니다.

머지 전에 아래 내용을 보완해 주세요.

  1. Base URL 및 앱 연결 범위: APIEnvironment(baseURL:) 주입 구조는 있지만, 변경 파일에는 앱이 개발·스테이징·운영 주소를 공급하고 APIClient를 구성하는 연결부가 없습니다. 이번 이슈가 통신 기반까지만 다루는 것이 의도라면, 현재 PR은 앱에서 실제 서버 요청을 보내지 않는다는 점과 주소를 공급할 후속 작업을 명시해 주세요. 실제 서버 주소를 코드에 하드코딩할 필요는 없습니다. 앱 URL 스킴은 OAuth 콜백이나 딥링크가 필요할 때 별도로 설정하면 됩니다.

  2. CI 차단: GitHub Actions가 strict SwiftLint에서 실패했습니다. 29개 위반을 수정하고 CI를 다시 통과시켜 주세요. 현재 워크플로는 lint 단계에서 멈춰 XCTest 실행 결과를 확인할 수 없습니다. 테스트가 실제로 실행되고 통과하는지도 CI에서 확인해 주세요.

  3. API 명세 대조: 이슈에는 23개 항목, PR 설명에는 25개 계약이라고 적혀 있습니다. 기준 명세의 링크와 버전을 추가하고, 구현한 경로·메서드·상태 코드·요청/응답 필드를 명세와 대조해 주세요. URLProtocol 테스트는 작성한 샘플 요청·응답과의 일치를 검증하지만 실제 서버 계약과의 일치까지 증명하지는 않습니다.

  4. 사진 업로드 범위: 현재 사진 서비스는 서버에서 업로드 URL을 받는 단계까지만 구현된 것으로 보입니다. 실제 파일 업로드가 이번 범위에 포함된다면 그 흐름을 추가하고, 아니라면 후속 작업으로 분리해 주세요.

@A6ul1213
A6ul1213 marked this pull request as ready for review October 31, 2026 12:52
@A6ul1213
A6ul1213 merged commit ff87c77 into dev Oct 31, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] iOS API 통신 기반과 명세 서비스 추가

2 participants