과제 구현은 (거의) 다 했고.. 이제 아쉬운 부분만 추가하면 되는 림졍
(새벽에 토스트랑 엄청나게 싸웠다.. 이덕수는 ^^.. 말 안해도 알겠죠?)
오늘은 챌린지 스터디 정리로 빠르게 TIL 넘기구..
과제랑 챌린지 프로젝트 구상좀 하러 가겠습니당... (은근 할게 많아요 어흑흑)
그럼 가보작호-!
챌린지반 스터디 정리 - API란 무엇인가? (+ Rest API)
404의 기원은 이것이었군(?)!
API
- 애플리케이션 프로그래밍 인터페이스 의 약자
- 다른 소프트웨어 시스템(애플리케이션)과 프로그래밍 방식으로 통신하기 위한 규칙 (표시 or 생성)
- 웹 API = 클라이언트와 웹 리소스 사이의 통로!
클라이언트
- 웹에서 정보에 액세스하려는 사용자를 의미 (= API를 사용하는 사람 or 소프트웨어 시스템)
- 날씨 데이터에 액세스하는 프로그램을 제작하는 개발자
- 날씨 웹 사이트 방문 시 브라우저에서 날씨 데이터에 엑세스하는 사용자 → 둘다 클라이언트!
리소스
- 애플리케이션 → 클라이언트로 제공하는 정보
- 이미지, 동영상, 텍스트, 숫자 또는 모든 유형의 데이터를 의미
- 조직, API 사용하여 리소스 공유 → 보안 / 제어 및 인증을 유지 + 웹 서비스 제공
+) API = 특정 내부 리소스에 액세스할 수 있는 클라이언트를 결정하는 데 도움을 줌.
REST
- Representational State Transfer(REST)의 약자
- API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처
- 초기엔 인터넷과 같은 복잡한 네트워크에서 통신 관리를 위한 지침으로 제작
- REST 기반 아키텍처 사용 시, 대규모의 고성능 통신 안정적으로 지원 + 쉽게 구현 및 수정 가능
→ 모든 API 시스템, 파악 및 여러 플랫폼에서 사용 가능!
REST API
- REST API : REST 아키텍처 스타일을 따르는 API
- RESTful 웹 서비스 : REST 아키텍처를 구현하는 웹 서비스.
- RESTful API = 일반적으로 RESTful 웹 API를 의미
cf. REST API = RESTful API 라는 의미도 맞다. → 통칭적으로 불러셔일까..? (이건 모르겠다..)
REST 아키텍처 스타일의 몇 가지 원칙
- 균일한 인터페이스
- 모든 RESTful 웹 서비스 디자인의 기본, 서버가 표준 형식으로 정보를 전송함을 나타냄
- 형식이 지정된 리소스 → REST에선 ‘표현’이라고 한다.
(서버 애플리케이션에 있는 리소스의 내부 표현과 다를 수 있으니 주의.) - ex) 서버는 데이터를 텍스트로 저장하되, HTML 표현 형식으로 전송할 수 있음
- 균일한 인터페이스의 4가지 제약 조건
- 요청은 리소스를 식별해야 한다. → 균일한 리소스 식별자 사용
- 클라이언트 리소스를 수정 및 삭제하기에 충분한 정보 리소스 표현에서 갖고 있어야 함. → 서버, 리소스에 대해 자세히 설명하는 메타데이터 전송
- 클라이언트, 표현을 추가로 처리하는 방법에 대한 정보를 수신. → 서버, 클라이언트가 리소스 적절하고 명확한 사용 방법이 담긴 메타데이터가 포함된 메시지 전송
- 클라이언트, 작업을 완료하는 데 필요한 다른 모든 관련 리소스에 대한 정보를 수신 → 서버, 클라이언트가 더 많은 리소스를 동적으로 검색할 수 있도록 표현에 하이퍼링크를 넣어 전송
무상태
- 서버, 이전의 모든 요청 및 독립적으로 모든 클라이언트 요청을 완료하는 통신 방법.
- 클라이언트, 임의의 순서로 리소스를 요청이 가능하며, 모든 요청 → 무상태 or 다른 요청과 분리.
- REST API 설계 제약 조건 → 서버가 요청 완전히 이해하여 매번 이행이 가능하다는 것을 의미
계층화 시스템
- 클라이언트는 클라이언트와 서버 사이의 다른 승인된 중개자에게 연결 가능 (여전히 서버로부터도 응답을 받는다!)
- 서버, 요청을 다른 서버로 전달가능.
- 클라이언트, 요청 이행을 위해 여러 계층으로 분리, 여러 서버에서 실행되도록 RESTful 웹 서비스 설계
- → 해당 계층(보안, 애플리케이션 및 비즈니스 로직), 클라이언트에 보이지 않는 상태로 유지
캐시 가능성
- 캐싱 : 서버 응답 시간 개선을 위해 클라이언트 or 중개자에게 일부 응답을 저장하는 프로세스
ex) 모든 페이지에 공통 머리글 및 바닥글 이미지가 있는 웹 사이트를 방문 가정
새로운 웹 사이트 페이지를 방문할 때마다 서버, 동일한 이미지를 다시 전송
해결책 → 클라이언트, 첫 번째 응답 후 해당 이미지 캐싱 or 저장한 다음 캐시에서 직접 이미지 사용
∵ RESTful 웹 서비스, 캐시 가능 or 캐시 불가능으로 정의되는 API 응답 사용을 통해 캐싱 제어
온디맨드 코드
- 서버, 소프트웨어 프로그래밍 코드 → 클라이언트에 전송, 클라이언트 기능 일시 확장 or 사용자 지정.
- ex) 웹 사이트에서 등록 양식 작성 → 잘못된 전화번호와 같은 실수 즉시 강조 표시 (브라우저)
→ 서버에서 전송한 코드로 인해 해당 작업 수행 가능
RESTful API 사용 시 장점
- 확장성
REST, 클라이언트-서버 상호 작용을 최적화 → 효율적으로 크기 조정가능
무상태, 서버가 과거 클라이언트 요청 정보를 유지할 필요X → 서버 로드 제거
잘 관리된 캐싱 → 일부 클라이언트-서버 상호 작용 부분적으로 또는 완전히 제거
⇒ 성능을 저하시키는 통신 병목 현상 방지 및 확장성 지원
- 유연성
각 부분이 독립적으로 발전하도록 서버 구성 요소 단순화 및 분리 (완전한 클라이언트-서버 분리 지원.)
서버 애플리케이션의 플랫폼 또는 기술 변경, 클라이언트 애플리케이션에 영향 X
애플리케이션 함수를 계층화하는 기능 유연성 향상
⇒ 개발자, 애플리케이션 로직 다시 작성하지 않고도 데이터베이스 계층 변경 가능.
- 독립성
API 설계 영향없이 다양한 프로그래밍 언어로 클라이언트 및 서버 애플리케이션 all 작성 가능
+) 통신에 영향을 주지 않고 양쪽의 기본 기술 변경도 가능
RESTful API의 작동방법
기본 기능, 인터넷 브라우징과 same
클라이언트, 리소스가 필요할 때 API를 사용하여 서버에 접속
API 개발자, 서버 애플리케이션 API 문서에서 클라이언트에게 REST API 사용법 설명해줘야..
- 모든 REST API 호출에 대한 일반 단계
- 클라이언트, 서버에 요청을 전송. API 문서에 따라 서버가 이해하는 방식으로 요청 형식을 지정
- 서버, 클라이언트 인증 → 해당 요청 수행 권한, 클라이언트에게 있는지 확인
- 서버, 요청을 수신 후 내부적으로 처리
- 서버, 클라이언트에 응답 반환 → 응답 및 세부 정보, API를 설계하는 방식에 따라 조금씩 다름 (요청 성공 여부 or 요청한 모든 정보 등을 포함하여 클라이언트에게 알려줌)
RESTful API 클라이언트 요청에 포함되어야 하는 요소
- 고유 리소스 식별자
서버, 고유한 리소스 식별자로 각 리소스를 식별
REST 서비스의 서버, 일반적으로 URL(Uniform Resource Locator)을 사용 → 리소스 식별 수행- cf. URL
리소스에 대한 경로 지정 (웹페이지 방문을 위해 브라우저에 입력하는 웹 사이트 주소와 유사)
요청 엔드포인트라고도 하며 클라이언트의 요구사항, 서버에 명확하게 지정
- cf. URL
- 메서드
개발자, 종종 Hypertext Transfer Protocol(HTTP)을 사용하여 RESTful API 구현
HTTP 메서드 → 리소스에 수행해야 하는 작업, 서버에 알려줌- 일반적인 HTTP 메서드
- 1) GET
클라이언트, GET 사용 → 서버의 지정된 URL에 있는 리소스에 엑세스
GET 요청 캐싱, RESTful API 요청에 파라미터를 넣어 전송 (전송 전 데이터 필터링하도록 서버에 지시가능) - 2) POST
클라이언트, POST 사용 → 서버에 데이터 전송 (요청 + 데이터 표현 포함)
동일한 POST 요청을 여러 번 전송 시, 동일한 리소스 여러 번 생성하는 부작용 존재 - 3) PUT
클라이언트, PUT 사용 → 서버의 기존 리소스 업데이트
POST와 달리, RESTful 웹 서비스에서 동일한 요청 여러 번 전송해도 결과는 동일 - 4) DELETE
클라이언트, DELETE 요청을 사용 → 리소스 제거 (서버 상태를 변경 가능)
사용자에게 적절한 인증이 없다? → 요청 실패!
- 1) GET
- 일반적인 HTTP 메서드
RESTful API 인증 방법
RESTful 웹 서비스 → 응답을 보내기 전에 먼저 요청 인증 필요. (인증 = 신원을 확인하는 프로세스)
∴ 신뢰를 구축하기 위해 서버에 자신의 신원 증명이 필요
- 인증 방법
- HTTP 인증
REST API를 구현할 때 직접 사용할 수 있는 일부 인증 체계 두가지
- 기본 인증
클라이언트, 요청 헤더에 사용자 이름과 암호를 넣어 전송.
안전한 전송을 위해 이 페어를 64자의 세트로 변환하는 인코딩 기술인 base64로 인코딩 - 전달자(bearer) 인증
토큰 전달자에 대한 액세스 제어를 제공하는 프로세스
일반적으로 전달자 토큰 = 서버가 로그인 요청에 대한 응답으로 생성하는 암호화된 문자열
클라이언트, 리소스에 액세스하기 위해 요청 헤더에 토큰을 넣어 전송
- 기본 인증
- API 키
서버, 고유하게 생성된 값 최초 클라이언트에 할당.
클라이언트, 리소스에 액세스 시 고유한 API 키 사용 → 본인임을 검증.
But 클라이언트, 이 키를 전송해야 작동하므로 네트워크 도난에 취약 ⇒ 덜 안전함 - OAuth
모든 시스템에 대해 매우 안전한 로그인 액세스를 보장하기 위해 암호와 토큰을 결합한 인증방식
서버, 먼저 암호를 요청한 후 권한 부여 프로세스를 완료하기 위해 추가 토큰을 요청
⇒ 특정 범위와 수명으로 언제든지 토큰 확인 가능
- HTTP 인증
RESTful API 서버 응답에 포함되는 요소
- 상태 표시줄
요청 성공 또는 실패를 알리는 3자리 상태 코드 존재
ex) 2XX 코드는 성공, 4XX 및 5XX 코드는 오류, 3XX 코드는 URL 리디렉션을 표현- 가장 일반적인 상태 코드들
- 200: 일반 성공 응답
- 201: POST 메서드 성공 응답
- 400: 서버가 처리할 수 없는 잘못된 요청
- 404: 리소스를 찾을 수 없음
- 가장 일반적인 상태 코드들
- 메시지 본문
응답 본문에는 리소스 표현이 포함됨.
서버, 요청 헤더에 포함된 내용을 기반으로 적절한 표현 형식 선택
클라이언트, 데이터 작성 방식을 일반 텍스트로 정의하는 XML 또는 JSON 형식으로 정보 요청 가능
ex) 클라이언트가 John이라는 사람의 이름과 나이를 요청 시, 서버는 다음과 같이 JSON 표현을 반환'{"name":"John", "age":30}' - 헤더
응답에는 응답에 대한 헤더 또는 메타데이터도 포함.
응답에 대한 추가 컨텍스트를 제공 및 서버, 인코딩, 날짜 및 콘텐츠 유형과 같은 정보를 포함
마무리 - 과제 제출일 D - 1 ... 그리고 계속 추가되는 요상한(?) 기능들
필수 구현도 다했고 추가 구현도 다 했는데...
소리도 넣었지만.. 아직 몇군데 많이 넣지 않아서 그런지
아쉽...달까 매우 (그리고 어지러운 코드들도 정리하고싶어요.. 어흑흑)
가독성이 떨어지는것은 아닌데.. styled-Component가 제대로 먹히지 않는 부분들 때문에
이것저것 적어주니 불어나있는 아이러니...
(그냥 따로 모아서 적어줘야하나 매우 고민중... 근데 그렇게가 가능한지도 궁금하긴 하네 흠흠..)
여튼 오늘은 이렇게 마무리 짓구요
챌린지 강의.. 듣고 과제랑 싸우다가 자렵니다
구빠잉-!
KPT 회고
- Keep : 이것저것 해보려는 모습 아주 대다내!
- Problem : ...근데 너 코드 너무 지저분해..
- Try : 정리.. 도 하고 좀 그러자 응?
ㄲ
ㅠ
ㅌ
'React TIL' 카테고리의 다른 글
[React] Day_42 개인 프로젝트 후기 (1) | 2024.11.15 |
---|---|
[React] Day_41 데일리 정리 (3) | 2024.11.14 |
[React] Day_39 데일리 정리 (4) | 2024.11.12 |
[React] Day_38 데일리 정리 (4) | 2024.11.11 |
[React] Day_37 데일리 정리 (2) | 2024.11.10 |