Skip to content

Conversation

@MuchanKim
Copy link
Collaborator

@MuchanKim MuchanKim commented Nov 10, 2025

📝 Summary

기존 카카오 검색 API에 묶여있던 네트워크 클래스를 따로 분리하고, 네트워크 폴더 구조 조정 좀 했습니다.

🔨 What

변경 된 코드가 많지만 정말 간단한 코드 분리 작업입니다!!! 그래서 볼 것이 별로 없을거에요.

  • 기존 네트워크+카카오API가 묶여있던 클래스를 분리하고, 범용으로 쓸 수 있는 NetworkClient + 다른 API 조합 형태로 구성할 수 있도록 변경하였습니다.
  • cctv, search 서비스를 팩토리에서 lazy로 선언하여 주입하였습니다. 뷰에서 생성하는 것을 생각해봤는데, 탭뷰에서 뷰를 쥐고 있어서 어짜피 계속 살아있기때문에 이전 방식과 일관되게 lazy로 선언하였습니다.
  • cctvService 메서드에 box 범위 가져오는 것과 polygon 범위로 가져오는 것을 구현했습니다. 삼각형 범위는 폴리곤쓰면 됨! 3개좌표 인풋!

이외엔 특이사항이 없어요!!

폴더링 개선

  1. DTO가 많아짐에 따라 서비스 별 폴더 분기를 했습니다.
  2. Endpoint, Errors, Protocol 폴더를 추가하였습니다.
  3. 안쓰는 geocode는 삭제했습니다. -> (11.11)인텐트에서 쓰더라구요. 인텐트 작업때 같이 올리는걸루

아래 트리 참고해주십시오.

└── Network
    ├── Base
    │   ├── NetworkConstant.swift
    │   ├── NetworkHeader.swift
    │   ├── URLBuilder.swift
    │   └── URLConstant.swift
    ├── DTO
    │   ├── CCTV
    │   │   ├── VWorldCCTVRequestDTO.swift
    │   │   └── VWorldCCTVResponseDTO.swift
    │   └── Search
    │       ├── KakaoCoordToLocationRequestDTO.swift
    │       ├── KakaoCoordToLocationResponseDTO.swift
    │       ├── KakaoKeywordToPlaceRequestDTO.swift
    │       └── KakaoKeywordToPlaceResponseDTO.swift
    ├── Endpoint
    │   ├── KakaoEndpoint.swift
    │   └── VWorldEndpoint.swift
    ├── Errors
    │   ├── KakaoSearchError.swift
    │   ├── NetworkError.swift
    │   └── VWorldError.swift
    ├── NetworkClient.swift
    ├── Protocol
    │   ├── APIClient.swift
    │   ├── CCTVAPIService.swift
    │   ├── Endpoint.swift
    │   └── SearchAPIService.swift
    └── Service
        ├── KakaoSearchAPIService.swift
        └── VWorldCCTVAPIService.swift

👀 Review Notes

의존성 주입 부분만 봐주시면 될 듯 합니다! 테스트 코드 추가해놨는데 돌려주시죠!! API 연결만해놓음

What?
- Info.plist와 Config에 API키를 업데이트 했습니다.
What?
- 폴더링 변경에 따른 위치변경입니다~~
What?
- 기존 KakaoSearchAPIManager에서 네트워크 로직을 범용으로 쓸 수 있도록 분리하였습니다.
- EndPoint와 Clint를 프로토콜로 만들어서 채택했습니다.
- 네트워크 에러타입을 만들어주었습니다. -> 요거 localized 등록해야해요?
What?
- 네트워크 로직 분리에 따른 검색 서비스 별도 구현!
- NetworkClient에 의존합니다.
What?
- NetworkClient에 의존하는 CCTVService 클래스를 구현하였씁니다.
- 실제 뷰에서는 프로토콜에 의존하도록 하였습니다!!
- URLBuild 방식 그대로 사용합니다!!
- 기존의 box 영역 가져오는 방식 메서드 구현했습니다.
- 그..리고 ...!! polygon 방식, 즉 좌표 3개로 삼각형 범위의 cctv 가져오는 것 구현했습니다.

특이사항: API상 3좌표내에 있는 CCTV를 가져온다고 하는데, 테스트코드 출력이 컴파일러 문제로 되지 않아 확인은 못했습니다. -> 테스트 코드는 통과해서 올립니다잉.
시각화작업 때 확인해볼게유.
What?
- 검색 서비스와 CCTV서비스를 추가하였습니다.
- 둘다 지연 프로퍼티로 선언해주고, 사용하는 뷰에다가 넣어줬습니다.

Why?
- 일단.. 뷰에 넣어줘도 탭뷰에서 뷰를 가지고 있기때문에 뷰가 죽지 않고 있다!! 그래서 일관된 방식으로 적용하였습니다.

근데 이러면 모든 의존성이 메모리 24시간 상주 아님?
What?
- API 요청 타입과 겹쳐서 범용으로 사용할 수 있게 Sendable을 채택했습니다.

좋지 못한가?
What?
- 리팩터링에 따른 파일 삭제
@MuchanKim MuchanKim self-assigned this Nov 10, 2025
@MuchanKim MuchanKim added ✨ Feature 새로운 기능 구현 🥬 Moo 김무찬 바 ~ 보 labels Nov 10, 2025
What?
- 파일 위치를 최종 수정하였습니다!!
- mvp때 쓰던 지오코드 서비스는 사용하지않기에 제거하였습니다. 필요시 현재 구현에 맞게 재 작성하는 방향으로 가도록 하겠습니다.
Copy link
Collaborator

@YooGyeongMo YooGyeongMo left a comment

Choose a reason for hiding this comment

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

굿

Copy link
Member

@mini-min mini-min left a comment

Choose a reason for hiding this comment

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

코드 정리 잘봤습니다 !
EndPoint를 사용한 것이 Moya 라이브러리를 사용했을 때 보이는 것과 유사해보이는군요 !

What?
- 테스트 코드 네이밍 오류 수정
@MuchanKim MuchanKim merged commit ff1341b into main Nov 11, 2025
@MuchanKim MuchanKim deleted the feat/#70 branch November 18, 2025 20:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Feature 새로운 기능 구현 🥬 Moo 김무찬 바 ~ 보

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[✨ Feat] CCTV API 붙이기, 네트워크 로직 분리

4 participants