Server Language/PHP

[Legacy to Modernization] 2. 형식없는 Appliction API를 표준화된 RestAPI로 교체하기.

MingyuKim 2024. 7. 21.

서론

현대 소프트웨어 개발 환경에서는 API(Application Programming Interface)가 중요한 역할을 합니다. API는 다양한 소프트웨어 시스템 간의 상호 작용을 가능하게 하며, 특히 REST API(Representational State Transfer API)와 JSON API는 유연성과 확장성이 뛰어나 많은 시스템에서 채택되고 있습니다. 그러나 많은 기존 시스템에서는 여전히 오래된 형태의 API를 사용하고 있으며, 이를 REST API 및 JSON API로 전환하는 것이 필요합니다. 본 논문에서는 기존 시스템의 API가 REST API가 아닌 일반 Application API임을 분석하고, 이를 REST API 및 JSON API로 전환하는 과정과 장단점을 설명합니다.

본론

1. 기존 시스템 분석

기존 시스템은 흔히 Application API로 구축되어 있으며, 다음과 같은 특징을 가집니다:

  • 상태 유지(Stateful): 서버가 클라이언트의 상태를 기억하고 관리합니다. 이는 서버에 부하를 증가시키고, 확장성을 저해할 수 있습니다.
  • 복잡한 URI 구조: 자원에 접근하는 URI가 직관적이지 않거나 비효율적입니다. 예를 들어, domain.com/member/get_member_list/1234와 같은 형식입니다.
  • 일관성 없는 데이터 포맷: JSON, XML, Plain Text 등 다양한 포맷이 혼재되어 데이터 처리의 일관성을 저해합니다.
  • HTTP 메서드의 비표준 사용: 주로 GET과 POST 메서드를 사용하여 모든 CRUD 작업을 진행합니다.

2. REST API 및 JSON API의 장점

REST API 및 JSON API로 전환함으로써 얻을 수 있는 주요 장점은 다음과 같습니다:

  • 무상태성(Stateless): 각 요청은 독립적이며, 서버는 클라이언트의 상태를 유지하지 않습니다. 이는 확장성과 관리의 용이성을 높입니다.
  • 일관된 데이터 포맷: JSON 포맷을 사용하여 데이터 일관성을 유지하며, 이를 통해 클라이언트와 서버 간의 상호 운용성이 개선됩니다.
  • 표준화된 HTTP 메서드 사용: GET, POST, PUT, DELETE 등 HTTP 메서드를 명확하게 구분하여 사용합니다.
  • 명확한 URI 구조: 자원 기반의 URI 설계로 접근성을 높입니다.
  • 캐시 가능성: HTTP 캐시 메커니즘을 통해 성능을 향상시킬 수 있습니다.

3. 개선 과정 및 순서도

기존 시스템을 REST API 및 JSON API로 전환하기 위한 단계별 과정은 다음과 같습니다:

3.1 현재 API 분석

기존 API의 URI 구조 분석

  • 현재 사용 중인 API의 URI 구조를 분석합니다. 예를 들어, domain.com/member/get_member_list/1234와 같은 URI는 자원(Resource) 기반이 아닌 동작(Action) 기반의 구조를 가지고 있습니다.

사용되는 데이터 포맷 파악

  • 데이터가 JSON, XML, Plain Text 등 다양한 포맷으로 전송되고 있는지 파악합니다. 일관성 없는 데이터 포맷은 처리의 복잡성을 증가시킵니다.

HTTP 메서드 사용 현황 점검

  • GET과 POST 메서드 외에 PUT, DELETE 등 다른 HTTP 메서드가 적절하게 사용되고 있는지 점검합니다. 일반적으로 GET은 데이터를 조회할 때, POST는 데이터를 생성할 때, PUT은 데이터를 수정할 때, DELETE는 데이터를 삭제할 때 사용됩니다.

3.2 RESTful 설계 원칙 적용

자원(Resource) 정의

  • 시스템에서 관리하는 자원을 식별하고 정의합니다. 예를 들어, 회원(member), 게시물(post) 등.

HTTP 메서드 매핑

  • 각 자원에 대해 적절한 HTTP 메서드를 매핑합니다. 예를 들어:
    • GET /members: 회원 목록 조회
    • POST /members: 새로운 회원 생성
    • GET /members/1234: 특정 회원 조회
    • PUT /members/1234: 특정 회원 정보 수정
    • DELETE /members/1234: 특정 회원 삭제

URI 재설계

  • 자원 기반의 명확한 URI 구조로 재설계합니다. 예를 들어, domain.com/member/get_member_list/1234를 domain.com/members/1234로 변경합니다.

3.3 JSON 포맷으로의 전환

데이터 포맷 일관성 확보

  • 모든 데이터 전송을 JSON 포맷으로 통일합니다. 이는 데이터의 일관성을 유지하고, 클라이언트와 서버 간의 상호 운용성을 높이는 데 도움이 됩니다.

필요한 경우 JSON 스키마 정의

  • 데이터 구조를 명확히 정의하기 위해 JSON 스키마를 도입할 수 있습니다. 이는 데이터 검증과 문서화에 유용합니다.

3.4 구현 및 테스트

REST API 엔드포인트 구현

  • 정의된 자원과 HTTP 메서드 매핑을 기반으로 REST API 엔드포인트를 구현합니다.

기존 시스템과의 호환성 테스트

  • 기존 시스템과 새로운 REST API 간의 호환성을 테스트합니다. 이를 통해 전환 과정에서 발생할 수 있는 문제를 최소화합니다.

API 문서화

  • 구현된 API에 대한 명확한 문서를 작성합니다. 이는 개발자와 사용자 모두에게 도움이 됩니다.

3.5 배포 및 모니터링

API 배포

  • 구현된 REST API를 프로덕션 환경에 배포합니다.

모니터링 시스템 구축

  • API의 성능과 오류를 모니터링하기 위한 시스템을 구축합니다. 이는 운영 중 발생할 수 있는 문제를 신속하게 감지하고 대응하는 데 필수적입니다.

성능 및 오류 모니터링

  • API의 성능과 오류를 지속적으로 모니터링하고, 필요시 개선 작업을 수행합니다.

결론

기존 시스템에서 REST API 및 JSON API로 전환하는 것은 단순한 기술적 변경을 넘어, 시스템의 확장성, 유지보수성, 상호 운용성을 크게 향상시킬 수 있는 중요한 작업입니다. 무상태성과 표준화된 HTTP 메서드, 일관된 데이터 포맷의 사용은 더욱 효율적이고 안정적인 시스템을 구축하는 데 기여합니다. 따라서, 기존 시스템의 문제점을 정확히 파악하고 체계적으로 전환 과정을 수행하는 것이 중요합니다. 이러한 현대화를 통해 개발자와 사용자는 더욱 높은 품질의 서비스를 제공받을 수 있을 것입니다.

댓글