New World

[개념 정리 #9] RESTful API (REpresentational State Transfer) & TDD 본문

Self-Study/Study

[개념 정리 #9] RESTful API (REpresentational State Transfer) & TDD

hyeovi 2022. 10. 13. 20:58
728x90
반응형

RESTful API (REpresentational State Transfer)

분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식으로 자원을 정의하고 자원에 대한 주소를 HTTP Method 를 통해 지정하는 방법 전반에 대한 패턴

 

REST 6 가지 원칙

  • Uniform Interface :
  • Stateless :
  • Caching :
  • Client-Server :
  • Hierarchical system :
  • Code on demand :
    cf) 보다 자세한 내용에 대해서는 Reference 를 참고해주세요.

 

RESTful 하게 API 를 디자인 한다는 것?

  • 리소스는 URI로 표현되는데 가리키는 것은 명사로 표현
  • 행위는 HTTP Method로 표현하고, GET, POST, PUT, PATCH, DELETE 분명한 목적으로 사용
  1. Message 는 Header 와 Body 를 명확하게 분리해서 사용
  • header : 애플리케이션 서버가 행동할 판단의 근거가 되는 컨트롤 정보인 API 버전 정보, 응답받고자 하는 MIME 타입 등
  • body : json 구조, Entity 에 대한 내용
  1. API 버전을 관리
  • 특정 API 를 변경할 때는 반드시 하위호환성을 보장
  1. 서버와 클라이언트가 같은 방식을 사용해서 요청
  • 브라우저와 서버의 형식을 json 형식이나 form-data 형식이나 하나로 통일
  • 다른 말로 표현하자면 URI 가 플랫폼 중립적이어야 한다.

 

장점

  1. Open API 를 제공
  2. 멀티플랫폼 지원 및 연동이 용이하다.
  3. 원하는 타입으로 데이터를 주고 받을 수 있다.
  4. 기존 웹 인프라(HTTP)를 그대로 사용할 수 있다.

 

단점

  1. 사용할 수 있는 메소드가 4 가지 밖에 없다.
  2. 분산환경에는 부적합
  3. HTTP 통신 모델에 대해서만 지원

 

? RESTful이란 무엇이며, 이것에 대해서 아는대로 설명해보세요.

HTTP URI를 통해 자원을 표시하고 HTTP Method를 통해 자원에 대한 처리를 표현한다. HTTP를 사용하기 때문에 HTTP의 특성을 그대로 반영하며 별도의 인프라 구축이 필요없습니다. 단점으로는 명확한 표준이 존재하지 않는다는 점, REST API가 분산환경에 적합하지 않다는 점이다.

 

? REST API란? REST API 명령어(CRUD) 아시는것 설명해주세요.

GET, POST, PUT, PATCH, DELETE 이 있는데 GET은 조회, POST 는 서버에 보내는 것, PUT은 전체 수정, PATCH는 일부 수정, DELETE는 삭제를 뜻한다.

 

TDD (Test-Driven Development)

테스트가 코드 작성을 주도하는 개발방식으로 매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스

 

  • 개발자는 요구되는 새로운 기능에 대한 자동화된 테스트케이스를 작성하며 해당 테스트를 통과하는 가장 간단한 코드를 작성하여 상황에 맞게 리팩토링
  • 새로운 기능을 추가하기 전 테스트를 먼저 작성한다.
    • 개발자는 해당 기능의 요구사항과 명세를 분명히 이해하고 있어야 하며, 개발자가 코드를 작성하기 전에 보다 요구사항에 집중한다.
  • 새로운 기능을 추가할 때 테스트 코드를 작성함으로써, 기존의 기능과 새로운 기능이 잘 작동하는지 테스트를 통해 확인
  • 리펙토링
    • 코드 퀄리티 부분을 조금 상세히 들어가보면, 보다 객체지향적이고 확장 가능이 용이한 코드, 재설계의 시간을 단축시킬 수 있는 코드, 디버깅 시간이 단축되는 코드를 만들 수 있다

 

단점

? 코드 생산성에 문제가 있지는 않나?

비즈니스 로직, 각종 코드 디자인, 테스트 코드까지 작성하기란 시간이 많이 걸리며 코드가 길어진다. 코드 퀄리티보다는 빠른 생산성이 요구되는 시점에서는 추천하지 않는다.

 

? 테스트 코드를 작성하기가 쉬운가?

어떠한 부분을 테스트해야할 지, 어떻게 테스트해야할 지, 여러 테스트 프레임워크 중 어떤 것이 우리의 서비스와 맞는지 등 여러 부분들에 대한 학습이 필요하고 익숙해지는데에도 시간이 걸린다. 개발은 팀 단위로 수행되기 때문에 팀원 전체의 동의가 필요하고 팀원 전체가 익숙해져야 비로소 테스트 코드가 빛을 발하게 되는 것이다.

 

반응형
Comments