본문 바로가기
TIL

내일배움캠프 5주차 API, HTTP, 테스트 코드 .....

by 율량동박씨 2024. 5. 13.

오늘의 키워드

  • API
  • HTTP
  • 테스트 코드
  • Lombok과 applicarion.properties

오늘의 내용

  • 네트워크와 웹서버
    • 네트워크 : 여러 대의 컴퓨터나 장비가 서로 연결되어 정보를 주고받는 것이다
    • 웹서버
      • 인터넷을 통해 http를 이용해 웹상 클라이언트의 요청을 응답해주는 통신이다
      • 브라우저를 통해 http request로 웹사이트 웹서버에 요청한다
      • 웹서버가 요청을 승인 http response를 통해 웹사이트 데이터를 브라우저에 전송한다
      • 브라우저는 서버에서 받아온 데이터를 이용해 웹사이트를 브라우저에 그린다
  • API(application programming interface)
    • 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙이다
    • 개발자는 다른 어플리케이션이 프로그래밍 방식으로 애플리케이션과 통신할 수 있도록 API를 표시하거나 생성한다
    • 인터페이스는 서로 다른 두 개의 시스템 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계를 의미한다(사용자가 기기를 쉽게 동작시키는 도움을 준다)
  • RESTful API
    • Representational State Tranfer(REST)는 API작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처이다
    • 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어졌다
    • REST 아키텍처 스타일을 따르는 API를 REST API라고 한다
    • REST 아키텍처를 구현하는 웹 서비스를 RESTful 웹 서비스라고 한다
  • HTTP
    • 데이터를 주고 받는 양식을 정의한 "통신 규약"(통신 규약 : 컴퓨터끼리 데이터를 주고받을 때 정해둔 약속)
    • 매우 범용적인 양식을 가지고 있어 전 세계 제일 널리 쓰인다
    • 모든 브라우저는 HTTP프로토콜을 기본으로 지원한다
    • Request, Response라는 개념이 존재한다
      • 브라우저는 서버에게 원하는 페이지를 Request한다
      • 서버는 브라우저가 원하는 페이지가 있는지 확인하고 있다면 해당 페이지에 대한 데이터를 실어 Response 한다
      • 브라우저는 서버에게 전달받은 데이터를 기반으로 브라우저에 그려준다
      • 데이터는 어떠한 데이터든 주고받는 게 가능하다
    • HTTP 상태 코드(Status Code)를 통해 브라우저와 서버 간 요청, 응답 과정에서 발생할 수 있는 상활들을 표현할 수 있다.(상태 코드는 3자리 숫자로 이루어져 있고 첫 번째 자리는 분류, 나머지 자리는 세부적인 정보 표시다)
      • 1xx(Informational) : 요청이 수신됐고 처리가 계속되고 있음을 나타낸다. 주로 서버와의 연결 상태 확인을 위해 사용한다
      • 2xx(Successful) : 클라이언트의 요청이 성공적으로 처리되었음을 나타낸다. 200이 가장 많이 사용된다.
      • 3xx(Redirection) : 클라이언트가 추가적인 조치를 취해야 함을 나타낸다. 주로 페이지 이동이나 리다이렉션 등에 사용된다
      • 4xx(Client Error) : 클라이언트에 오류가 있음을 나타낸다. 주로 클라이언트의 잘못된 요청, 인증 오류에 사용된다. 가장 많이 사용되는 코드는 404이고 요청한 페이지나 리소스를 서버에서 찾을 수 없음을 의미한다.
      • 5xx(Server Error) : 서버에 오류가 발생했음을 나타낸다. 주로 서버 오류, 과부하 등에 사용된다. 500이 가장 많이 사용되는데 이는 서버 내부 오류 발생을 의미한다.
    • HTTP 구성요소
      • Method(호출/요청 방식)
        • GET : 어떤 리소스를 얻을 때 사용된다. 브라우저 주소창에 URL를 입력하면 GET을 사용해 서버에 요청을 보낸다
        • POST : 웹 서버에 데이터를 게시할 때 사용하는 게 일반적이다(회원가입, 게시글 작성 등)
        • 그 외에 여러 요청 방식이 존재한다
      • Header(추가 데이터, 메타 데이터)
        • 브라우저가 어떤 페이지를 원하는지
        • 요청받은 페이지를 찾았는지
        • 요청 받은 데이터를 성공적으로 찾았는지
        • 어떤 형식으로 데이터를 보낼지
        • 의사 표현을 위한 데이터를 모두 Header필드에 넣어 주고받는다
      • Payload(데이터, 실제 데이터)
        • 서버가 응답을 보낼 때는 항상 Payload를 보낼 수 있다
        • 클라이언트가 요청할 때도 Payload를 보낼 수 있다
        • GET메서드를 제외하곤 모두 Payload를 보낼 수 있다
  • 테스트 코드
    • 버그 : 소프트웨어가 예상하지 못한 결과는 내는 것으로 소스 코드나 설계과정에서의 오류 때문에 발생한다
    • 테스트를 통해 개발 코드 배포 전 최대한 많은 버그를 찾아낸다
    • 블랙박스 테스팅
      • 소프트웨어 내부 구조나 동작원리를 모르는 상태에서 검사하는 것(사용자 입장에서 검사하는 방법)
      • 장점 : 누구나 테스트 가능하다
      • 단점 : 기능이 증가될수록 테스트 범위가 증가하고 검사하는 사람에 따라 퀄리티가 달라진다
    • 개발자 테스트 
      • 개발자가 직접 본인이 작성한 코드를 검증하기 위해 테스트 코드를 작성하는 것이다
      • 장점 : 빠르고 정확한 테스트가 가능하고 자동화가 가능하다. 리팩토링이나 기능 추가를 할 때 더욱 편리하다
      • 단점 : 개발 시간이 오래 걸림, 테스트 코드를 유지보수하는 비용이 많이 든다
  • Lombok, application.properties
    • Lombok : 자바 프로젝트를 진행하는데 필수적으로 필요한 메서드/생성자 등을 자동 생성해 줌으로써 코드를 절약할 수 있게 도와주는 라이브러리
    • application.properties : Spring과 관련된 설정을 할 때 사용되는 파일로 자동으로 설정되고 있는 설정 값을 쉽게 수정할 수 있다. DB연결 시 DB의 정보를 제공해야 하는데 이러한 경우에도 쉽게 값을 전달할 수 있다

오늘의 회고

  • 팀프로젝트가 끝나고 새로운 조로 편성된 첫날이라 서로 아직 어색하지만 mbti E가 두 분이라 그런지 분위기가 좋은 거 같아서 다행이다
  • 아직 Java를 완벽하게 못하는데 Spring은 잘할 수 있을지 걱정이고 개인 프로젝트 시간이 너무 촉박해서 강의 듣고 프로젝트하려면 쉬는 날도 못 쉴 거 같은 예감이.....