[Spring Boot 스터디] 2회차

minhyeok·2023년 3월 8일
0
post-thumbnail

학습 내용

HTTP 란?

애플리케이션 레이어 프로토콜이다. 인터넷 상에서 모든 정보를 주고받을 수 있게 한다. 웹 상에서 이루어지는 모든 데이터 교환의 기초이고, 서버와 클라이언트가 데이터를 주고 받을 때 사용된다.
초기에는 HTML과 같은 하이퍼미디어 문서를 주로 전송하였지만, 최근에는 Plain text, JSON , XML 등 다양한 형태의 정보도 전송한다.
HTTP/1.1 -> 가장 많이 사용하며, 가장 중요한 버전.
HTTP/2 -> 성능 개선
HTTP/3 -> TCP 대신에 UDP 사용, 성능 개선

  • HTTP 특징
    • 클라이언트 서버 구조로 동작.
    • 무상태 프로토콜(stateless), 비연결성
    • HTTP 메세지를 통해서 통신을 한다(송/수신 모두)
    • 단순함, 확장 가능

API 란?

Application Programming Interface 의 약자이다.
데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환 가능 하도록 하는 상호 통신 방법을 규정하고 도와주는 매개체이다.
한마디로 HTTP 요청을 주고 받는 하나의 방법이다.
API는 데이터베이스가 아니지만, 액세스 권한이 있는 앱의 권한 규정과 서비스 요청에 따라 데이터나 서비스 기능을 제공하는 메신저 역할을 한다.
우리가 웹사이트에 접속할 때 URL로 들어가면 원하는 사이트의 이미지가 보인다. 그런데 그 형태가 웹사이트가 아닌, JSON 이라는 형태로 응답을 주는 특별한 URL 이라고 생각하자.

REST , REST API , RESTful 이란?

REST 의 정의

Representational State Trnasfe 의 약자로, 데이터의 이름으로 상태를 구분하여 전송하는 방식이다.
REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장정을 최대한 활용할 수 있는 아키텍처 스타일이다.

  • HTTP URI를 통해 Resource를 명시하고, HTTP 메소드를 통해 해당 Resource 에 대한 CRUD Operation을 적용하는 것을 의미한다.

REST API

REST 기반으로 서비스 API를 구현한 것이다.
REST API 설계시 가장 중요한 항목은 아래 두가지이다.
1. URI는 정보의 자원을 표현해야 한다는 점
2. 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현한다는 점

RESTful

RESTful : REST의 규칙을 지켜 제공하는 웹 서비스 방식을 의미한다.
RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이다.(REST의 규칙을 지켜 제공하는 웹 서비스 방식) RESTful 의 목적은 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것이다.

  • REST API를 제공하는 웹서비스를 RESTful 하다고 할 수 있다.

참고 링크

URL 분석 및 규칙

먼저 , URI는 로케이터(locator), 이름(name) 또는 둘다 추가로 분류될 수 있다.
URL은 우리가 흔히 아는 웹브라우저에서 사용하는 주소이다.
URL은 이름을 부여하는 것인데, 이름만 가지고는 주소를 찾아갈 수 없기에 실제로 사용하기는 힘들다.

  • URL 분석
    scheme://[userinfo@]host[:port][/port][/path][?query][#fragment]
    • 문법 예시: https://google.com/search?q=hello&hl=ko
    • 프로토콜: https
    • 호스트명(도메인): google.com
    • 포트번호: 443 -> 일반적으로 생략 가능.http는 80, https는 443
    • path: /search -> 카테고리와 같은 개념.
    • 쿼리 파라미터: q=hello&hl=ko -> 조건을 걸어주는 것. ?로 시작하며 두가지 이상의 쿼리를 &로 연결할 수 있음
    • fragment -> html 내부 북마크 등에 이용. 서버에 전송하는 정보X

RESTful 한 URL 설계 방식 참고1
참고2
1. 소문자를 사용한다.
2. 언더바 대신 하이픈을 사용한다.
3. 마지막에 슬래시를 포함하지 않는다.
4. 행위는 포함하지 않는다.
5. 파일 확장자는 URI에 포함시키지 않는다.
6. 가급적 전달하고자하는 자원의 명사를 사용하되, 컨트롤 자원을 의미하는 경우 예외적으로 동사를 허용한다.
7. URI에 작성되는 영어를 복수형으로 작성한다.

HTTP 메소드

주요 메서드

  • GET : 리소스 조회
  • POST : 요청 데이터 처리, 주로 등록에 사용
  • PUT : 리소스를 대체하며 해당 리소스가 없으면 생성
  • PATCH : 리소스 부분 변경
  • DELETE : 리소스 삭제

기타 메서드

  • HEAD : GET과 동일하지만 메시지 부분을 제외하고, 상태 줄과 헤더만 반환한다.
  • OPTIONS : 대상 리소스에 대한 통신 가능 옵션(메소드)을 설명(주로 CORS에서 사용한다)
  • CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정
  • TRACE : 대상 리소스에 대한 경로에 따라 메시지 루프백 테스트를 수행

2회차 미션

네트워크 관련 질문

  1. restful API에 대해 설명해보자.
    REST는 HTTP URI를 통해 Resource 를 명시하고,HTTP 메소드를 통해 해당 Resource 에 대한 CRUD Operation을 적용하는 것을 의미한다. (URI는 정보의 자원을 표현해야 한다. 자원에 대한 행위는 HTTP 메소드로 표현한다.)
    즉, RESTful API는 REST 기반으로 서비스 API를 구현하여 제공하는 것이라고 말할 수 있을 것이다. REST API URL을 결정하는 규칙을 따라야 한다.

1-1. API에 대해 설명해보자.
Application Programming Interface 의 약자이다.
데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환 가능 하도록 하는 상호 통신 방법을 규정하고 도와주는 매개체이다.
한마디로 HTTP 요청을 주고 받는 하나의 방법이다.
API는 데이터베이스가 아니지만, 액세스 권한이 있는 앱의 권한 규정과 서비스 요청에 따라 데이터나 서비스 기능을 제공하는 메신저 역할을 한다.

  1. HTTP 통신에 대해서 설명해보자.
    HTTP는 어플리케이션 레이어 프로토콜이다. 이를 이용한 통신을 맗한다. 인터넷 상에서 모든 정보를 주고 받을 수 있게 하고, 웹상에서 이루어지는 모든 데이터 교환의 기초이다. 서버와 클라이언트가 데이터를 주고 받을 때 사용된다.
    초기에는 HTML과 같은 하이퍼미디어 문서를 주로 전송하였지만, 최근에는 이미지,JSON,XML등 다양한 형태의 정보도 전송한다.

  2. HTTP 메소드 GET과 POST의 차이에 대해서 설명해보자.
    GET은 주로 조회에 사용된다. 가져온다는 개념으로, 서버에서 어떤 데이터를 가져와서 보여줄 때 사용된다. 어떤 값이나 내용, 상태 등을 바꾸지 않는 경우에 사용한다.
    이에 반해 POST 는 요청 데이터 처리에 사용된다. 수행하다는 개념으로, 서버상의 데이터 값이나 상태를 바꾸기 위해서 사용한다. 예로 들자면, 회원 목록을 보여주는 경우는 GET에 해당하고, 회원의 내용을 저장하고 수정할 때에는 POST를 사용한다.

Postman으로 원하는 정보를 얻을 수 있는 api 호출하기

Postman 을 실행해보았다.
먼저, https://jsonplaceholder.typicode.com/posts URL에서 GET 메소드를 이용하여 모든 post 들을 조회해보았다.

위와 같이 100개의 post가 조회되었다.

그 다음, 2번 post를 조회해보았다. path를 통해 접근하였다.

위와 같이 2번에 해당하는 post가 출력되었다.

그 다음, 3번 post에 대한 comment들을 조회 해보았다.
여기엔 두가지 방법이 있는데, path 이용해서 접근하는 방법과 쿼리 파라미터를 이용하는 방법이 있다.

위와 같이 3번 post 에 대한 comments 들을 조회할 수 있다. 두가지 방법 모두 같은 결과를 출력한다.

그 다음, 새로운 post 를 하나 등록해보았다.

HTTP 메소드를 POST로 바꾸고, Body를 JSON 으로 선택했다. 파라미터 형식과 내용을 직접 작성해주면 된다.
파라미터 형식과 내용을 작성할 때 " " 안에 작성해주어야 한다.

여기의 예시를 보면 알 수 있다. body에 해당하는 부분에서 title, body , userId를 내가 설정해주었다.

위의 예시와 같이 새로운 post가 등록되었다.

Postman으로 공공데이터 api 호출하기

먼저 , 공공데이터 포털 에 접속하여 회원가입을 진행하였다.
외부 api 에서 데이터를 받아와서 호출하는 방법을 익혀보겠다.
먼저, 데이터 찾기 - 데이터 목록 메뉴에 들어간다.

그 다음, 조건 검색에서

위와 같이 서비스유형 : REST , 확장자 : JSON 로 조건을 설정하고 검색한다.

오픈 API 에서 '한국토지주택공사_공공임대주택 단지정보 조회 서비스'를 예시로 결정해보았다.

밑으로 내려보면 요청변수와 출력결과, 샘플 코드까지 볼 수 있다.
요청변수는 내가 원하는 데이터를 얻기 위해 검색할 때 조건을 설정하는 변수이다.
출력결과는 내가 조건을 설정해서 검색했을 때 검색결과로 나오는 데이터 결과이다.
샘플코드에는 이 데이터들을 여러 프로그래밍 언어로 호출할 수 있도록 예제 코드가 적혀있다. Java 로 확인해보았다.

오,, 그렇구나 하고 넘어간다.. 이따 인텔리제이에서 실행해보아야 할 코드이다.
그 다음, 참고 문서를 열어 확인해보았다.

밑으로 내리면 요청 / 응답 메시지 예제가 있다.

API를 활용하기 위해서, 오른쪽 상단의 활용 신청을 누르고 신청한다.
자동 승인되어 바로 key를 확인할 수 있었다. 발급 받은 key를 사용하기 까지 시간이 조금 소요된다.

하지만 key를 입력해서 확인해보려고 하니 오류가 나왔다. key 발급까지 시간이 걸려서 그런건가 해서 다음날에도 진행해보았지만 여전히 오류가 뜨고, 인텔리제이에서도 해보았지만 오류가 뜨면서 호출을 할 수 가없어 진행할 수 없었다.
SERVICE KEY IS NOT REGISTERED ERROR 가 떠서, 여러가지 방법을 찾아보았지만 해결할 수 없었다.

정리

  • 배운내용, 깨달은 점
    이번에는 HTTP 와 API 와 같은 네트워크에 관련된 개념을 공부해보았다. API가 잘 와닿지 않았는데, 특별한 URL 이라고 설명한 것이 도움이 되었다. Postman을 이용해 API 를 통해 HTTP 메소드를 이용해보기도 하여 사용법을 익히게 되었다. 공공데이터 포털에서 API를 활용해 공부해보고 싶었지만, 아쉽게도 오류가 발생하여 공부하지 못했다.

  • 어려웠던 점, 반성하고 싶은 점 / 개선할 방법
    공공데이터 포털에서 API 활용을 위해 Key를 발급 받았지만, SERVICE KEY IS NOT REGISTERED ERROR 와 같은 오류가 나서 진행하지 못했다. 구글링하니 많은 사람들이 겪는 문제였는데, 나는 여러 방법을 시도해보았지만 결국 못했다 ㅠㅠ 다음에 다시 한번 도전해보고자 한다.

  • 궁금한 점
    이번에 공부한 내용을 이렇게 한 글에 정리하였는데, 분류하는 게 나을지 고민입니다! API 따로, HTTP 따로 등 글을 분류해서 작성하는게 보기 편할까요?

2개의 댓글

comment-user-thumbnail
2023년 3월 12일

분류는 민혁님이 보기 편하신대로 해주세요! 한 회차에 대한 내용을 2개 이상의 글로 작성하셨다면 제출하실 때 링크 여러 개 넣어주시면 같이 보겠습니다~ (다음 회차부터는 미션 제출 링크를 여러개로 열어둘게요!)

1개의 답글