JWT(JSON Web Token)이란 인증에 필요한 정보들을 암호화시킨 토큰을 의미한다.
JWT 기반 인증은 쿠키/세션 방식과 유사하게 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별한다.
쿠키/세션 인증의 경우 쿠키를 포함한 요청이 외부에 노출되더라도 세션 ID 자체는 유의미한 개인정보를 담고 있지 않지만 해커가 이를 중간에 탈취하여 클라이언트인척 위장할 수 있다는 한계가 존재한다. 그리고 서버에서 세션 저장소를 사용하므로 요청이 많아지면 서버에 부하가 심해지는 단점이 있다.
이에 반해 JWT토큰의 경우 Header와 Payload를 가지고 Signature를 생성하므로 데이터 위변조를 막을 수 있기 때문에 보안성이 우수하고, JWT는 토큰에 대한 기본 정보와 전달할 정보 및 토큰이 검증됬음을 증명하는 서명 등 필요한 모든 정보를 자체적으로 지니고 있기 때문에 인증 정보에 대한 별도의 저장소가 필요없다는 장점이 있다. 즉, 클라이언트 인증 정보를 저장하는 세션과 다르게, 서버는 무상태가 됩니다.
CRUD와 REST는 API(Application Program Interface) 업계에서 가장 널리 사용되는 두 가지 개념
REST는 클라이언트와 서버 간의 HTTP 프로토콜 인터페이스를 표준화하기 위해 만들어졌으며 웹 API에 널리 사용되는 디자인 스타일 중 하나
반면에 CRUD는 데이터베이스 응용 프로그램에서 실행되는 네 가지 기본 작업을 나타내는 데 사용되는 약어
REST와 CRUD는CRUD가 REST 환경 내에 존재할 수 있기 때문에 함께 작동하며, 이들의 기능은 종종 서로 일치하지만 동일하지는 않다.
이들을 구별하는 가장 좋은 방법은REST가 표준 (API 아키텍처)이고 CRUD가 함수 라는 점을 기억하는 것
REST 란 무엇입니까?
REST는 Representational State Transfer의 약자입니다.
시스템이 상호 작용하는 방식을 지시하는 웹상의 컴퓨터에 대한 표준을 제공하는 소프트웨어 아키텍처 스타일입니다.
REST의 간략한 역사
2000년 REST 프로토콜이 출시되기 전에 웹 개발자는 웹 API를 개발하거나 사용하는 방법에 대한 표준이 없었습니다.
그 당시에는 많은 프로토콜이 사용되었지만 수행하기에는 너무 지루하고 복잡한 것으로 판명되었습니다.
동료들과 함께 Roy Fielding은 이 문제를 해결하기 위해 노력했고 오늘날 REST 프로토콜로 알려진 것을 개발했습니다.
REST의 개발로 두 개의 서버가 전 세계적으로 데이터를 교환할 수 있게 되었습니다.
REST 호환 시스템을 RESTful 시스템이라고 합니다.
이러한 시스템은 상태 비저장 및 클라이언트와 서버 문제의 분리가 특징입니다.
CRUD란?
CRUD는 CREATE, READ, UPDATE, DELETE의 약자입니다. 이 네 가지 데이터베이스 명령 은 CRUD의 기초입니다.
많은 프로그래밍 프로토콜과 언어에는 이름이 다르고 기능이 약간 변경된 CRUD 버전이 있습니다.
좋은 예는 Insert, Select, Update 및 Delete를 사용하는 SQL(구조적 쿼리 언어)입니다 .
또한 전자 상거래 사이트(Amazon, Mango 등)의 구매자와 같은 동적 웹 사이트에는 CRUD 주기가 있습니다.
사용자는 계정 을 만들고 정보를 업데이트 하고 장바구니에서 항목을 삭제할 수 있습니다.
CRUD 프레임워크를 사용하는 다른 프로그래밍 언어로는 Java(JOOQ, iBAtis), Phyton(Django), PHP(Propel, Doctrine) 및 .NET(NHibernate, LLBLGEN Pro) 등이 있습니다.
CRUD의 짧은 역사
CRUD 약어는 구조적 쿼리 언어(SQL)에서 사용되는 데이터베이스 기능을 설명하기 위해 1980년대에 만들어진 것으로 생각됩니다. 이 용어는 1983년 James Martin 의 책 Managing the Database Environment 에서 처음 알려지게 되었습니다 . CRUD 작업에 대한 첫 번째 언급은 Haim Kilov의 1990년 기사 "From Semantic to Object-Oriented Data Modeling"에 있습니다.
CRUD 주기는 종종 이를 시작한 프로세스보다 오래 지속되는 데이터베이스로 영구 저장소를 향상시키는 일련의 기능으로 설계되었습니다. 최신 소프트웨어 프로그래밍 및 개발에서 CRUD는 함수로서의 시작을 넘어 SQL, DDS 및 HTTP 프로토콜과 같은 응용 프로그램에 대한 설계 원칙을 제공했습니다.
REST와 CRUD의 유사점은 무엇입니까?
일부 순수주의자는 REST와 CRUD가 서로 관련이 없다고 주장할 수 있습니다.그러나 그들이 사용하는 명령을 자세히 살펴보면 둘 사이의 유사점을 알 수 있습니다.
REST 명령
POST– 데이터베이스에 새 레코드를 생성합니다.
GET– 이 요청은 데이터베이스에서 가져온 정보를 읽습니다.
PUT/PATCH– 개체를 업데이트합니다.
DELETE- 데이터베이스에서 레코드를 제거합니다.
CRUD 명령
CREATE– INSERT 문을 통해 새 레코드를 생성합니다.REST에서 이것은 POST 명령입니다.
READ/RETRIEVE- 이 프로시저는 입력 매개변수를 기반으로 데이터를 가져옵니다.REST에서 이는 GET 명령과 동일합니다.
UPDATE– 데이터를 덮어쓰지 않고 업데이트합니다.REST에서 이것은 PUT 요청입니다.
DELETE-데이터베이스에서 데이터를 제거합니다.REST는 동일한 요청을 사용하여 데이터를 삭제합니다.
REST와 CRUD의 차이점은 무엇입니까?
REST와 CRUD의 유사성 때문에 동일한 기능을 가진 것으로 착각하기 쉽습니다.그러나 그것은 사실과 거리가 멀다.조금 더 깊이 파고 들면 그들 사이의 차이점을 탐구합니다.
REST는 HTTP 명령을 사용하는 리소스 및 Hypermedia를 중심으로 한 아키텍처 시스템입니다.CRUD는 데이터베이스 설정에서 레코드를 유지하기 위한 주기입니다.기본 형식에서 CRUD는 응용 프로그램의 기능을 설명하는 정보를 조작하는 방법입니다.REST는 HTTP 명령을 통해 데이터를 제어합니다.사용자의 정보를 생성, 수정, 삭제하는 방법입니다.
CRUD 기능은 REST API에 존재할 수 있지만 REST API는 CRUD 기능으로 제한되지 않습니다.CRUD는 REST 아키텍처 내에서 작동할 수 있지만 REST API는 CRUD와 독립적으로 존재할 수 있습니다.예를 들어 REST API를 사용하면 클라이언트가 CRUD 기능에 해당하지 않는 경우에도 서버를 재부팅할 수 있습니다.REST는 적절한 HTTP 메서드를 사용하는 한 이 작업을 수행할 수 있습니다.
REST는 일반적으로 HTTP 명령을 통해 데이터를 사용하는 것을 말합니다.사용자가 화면상의 데이터와 서버에 저장되는 정보를 조작하는 방법을 용이하게 하는 교리입니다.프로그래머는 필수 CRUD 기능을 처리할 수 있는 REST API를 만들 수 있지만 그 반대의 경우도 마찬가지입니다.
REST와 CRUD의 기능은 유사하지만(위에서 설명한 대로) 동일하지는 않습니다.PUT은 아직 존재하지 않는 리소스를 포함하여 리소스를 대체합니다.POST는 새 리소스를 추가합니다.이 두 명령 모두 새 리소스를 생성하지만PUT은 일반적으로 이미 있는 리소스를 업데이트하는 데 사용됩니다.PATCH는 주로 리소스의 일부를 업데이트하는 데 사용되지만PUT은 전체 리소스를 교체하여 업데이트하는 데만 사용됩니다.
REST와 CRUD는 함께 작동하지만 동일하지는 않습니다.
REST와 CRUD는 CRUD가 REST 환경 내에 존재할 수 있기 때문에 함께 작동하며, 이들의 기능은 종종 서로 일치하지만 동일하지는 않습니다.이들을 구별하는 가장 좋은 방법은 REST가 표준 (API 아키텍처)이고 CRUD가 함수 라는 점을 기억하는 것입니다.이 본질적이지만 직접적인 차이점을 이해하는 것은 두 가지 모두를 이해하는 데 필요합니다.
API는 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘입니다.
예를 들어, 기상청의 소프트웨어 시스템에는 일일 기상 데이터가 들어 있습니다. 휴대폰의 날씨 앱은 API를 통해 이 시스템과 ‘대화’하여 휴대폰에 매일 최신 날씨 정보를 표시합니다.
API는 무엇을 의미하나요?
API는 Application Programming Interface의 줄임말입니다.
API의 맥락에서 애플리케이션이라는 단어는 고유한 기능을 가진 모든 소프트웨어를 나타냅니다.
인터페이스는 두 애플리케이션 간의 서비스 계약이라고 할 수 있습니다. 이 계약은 요청과 응답을 사용하여 두 애플리케이션이 서로 통신하는 방법을 정의합니다. API 문서에는 개발자가 이러한 요청과 응답을 구성하는 방법에 대한 정보가 들어 있습니다.
API는 어떻게 작동하나요?
API 아키텍처는 일반적으로 클라이언트와 서버 측면에서 설명됩니다.
요청을 보내는 애플리케이션을 클라이언트라고 하고 응답을 보내는 애플리케이션을 서버라고 합니다.
따라서 날씨 예에서 기상청의 날씨 데이터베이스는 서버이고 모바일 앱은 클라이언트입니다.
API 작동 방식 4 가지
① SOAP API
이 API는 단순 객체 접근 프로토콜을 사용합니다. 클라이언트와 서버는 XML을 사용하여 메시지를 교환합니다. 과거에 더 많이 사용되었으며 유연성이 떨어지는 API입니다.
② RPC API
이 API를 원격 프로시저 호출이라고 합니다. 클라이언트가 서버에서 함수나 프로시저를 완료하면 서버가 출력을 클라이언트로 다시 전송합니다.
③ Websocket API
Websocket API는 JSON 객체를 사용하여 데이터를 전달하는 또 다른 최신 웹 API 개발입니다. WebSocket API는 클라이언트 앱과 서버 간의 양방향 통신을 지원합니다. 서버가 연결된 클라이언트에 콜백 메시지를 전송할 수 있어 REST API보다 효율적입니다.
④ REST API
오늘날 웹에서 볼 수 있는 가장 많이 사용되고 유연한 API입니다.
클라이언트가 서버에 요청을 데이터로 전송합니다.
서버가 이 클라이언트 입력을 사용하여 내부 함수를 시작하고 출력 데이터를 다시 클라이언트에 반환합니다.
REST API란 무엇인가요?
REST는 Representational(*구상적인) State Transfer의 줄임말입니다.
REST는 클라이언트가 서버 데이터에 액세스하는 데 사용할 수 있는 GET, PUT, DELETE 등의 함수 집합을 정의합니다.
클라이언트와 서버는 HTTP를 사용하여 데이터를 교환합니다.
REST API의 주된 특징은 무상태입니다. 무상태는 서버가 요청 간에 클라이언트 데이터를 저장하지 않음을 의미합니다.
서버에 대한 클라이언트 요청은 웹 사이트를 방문하기 위해 브라우저에 입력하는 URL과 유사합니다.
서버의 응답은 웹 페이지의 일반적인 그래픽 렌더링이 없는 일반 데이터입니다.
웹 API란 무엇인가요?
웹 API 또는 웹 서비스 API는 웹 서버와 웹 브라우저 간의 애플리케이션 처리 인터페이스입니다.
모든 웹 서비스는 API이지만 모든 API가 웹 서비스는 아닙니다.
REST API는 위에서 설명한 표준 아키텍처 스타일을 사용하는 특수한 유형의 웹 API입니다.
API 통합이란 무엇인가요?
API 통합은 클라이언트와 서버 간의 데이터를 자동으로 업데이트하는 소프트웨어 구성 요소입니다.
API 통합의 몇 가지 예로 휴대폰 이미지 갤러리에서 클라우드로 데이터 자동 동기화 또는 다른 시간대 여행 시 노트북에서 시간 및 날짜 자동 동기화가 있습니다. 기업은 또한 API 통합을 사용하여 많은 시스템 함수를 효율적으로 자동화할 수 있습니다.
API 유형
API는 아키텍처와 사용 범위에 따라 분류됩니다. API 아키텍처의 주요 유형은 이미 살펴보았으므로 사용 범위를 살펴보겠습니다.
① 프라이빗 API : 기업 내부에 있으며 비즈니스 내에서 시스템과 데이터를 연결하는 데만 사용됩니다.
② 퍼블릭 API : 일반에 공개되며 누구나 사용할 수 있습니다. 이러한 유형의 API와 관련된 권한 부여와 비용이 있을 수도 있고 없을 수도 있습니다.
③ 파트너 API : 이는 B2B 파트너십을 지원하기 위해 권한이 부여된 외부 개발자만 액세스할 수 있습니다.
④ 복합 API : 복합 API는 두 개 이상의 서로 다른 API를 결합하여 복잡한 시스템 요구 사항이나 동작을 처리합니다.
또다시 은솔님에게 도움 요청...(나란 민폐녀 ^_ㅠ) - 사전 프로젝트 대나무 숲을 구현하셨던 코드가 저장되어 있는 깃허브를 공유해 주셨다. 사용하신 방법은 인 배딩 방식으로 하나의 컬렉션 안에 배열을 넣고, 그 배열에 다른 컬렉션을 넣어서 사용하는 방식이다.
코드를 참고해서 따라 해보려 했지만, 중간에 암호화된 아이디 값과 비밀번호 값을 처리하는 코드와 내가 필요한 코드를 잘 분별하지 못해서 구현을 하지 못했다.
⑤ 해결 방법
또 다른 능력자 민승님에게 도움 요청 - 프론트엔드 개발자를 준비하시는 민승님은 내가 화면 공유로 화면을 보여드리자 마자 바로 주소창에 있는 아이디 값을 가져오면 되겠다고 하셨다.
위의 페이지 주소 값 마지막에 있는 숫자를 아래와 같은 방법으로 추출하여 코멘트가 저장될 때마다 같이 저장하도록 했다. ['POST']
let order = window.location.href.slice(-1)
그리고 코멘트를 ['GET']으로 호출할 때 if문을 사용하여 저장된 값과 페이지 주소 값의 마지막 자릿수가 일치하는 댓글들만 보여주는 코드로 구현에 성공!
function show_comment() {
let order = window.location.href.slice(-1)
$.ajax({
type: "GET",
url: '/show/comment',
data: {},
success: function (response) {
let rows = response['comments']
for (let i = 0; i < rows.length; i++) {
if (order == rows[i]['order']) { //이부분에서 위의 order와 콜렉션 order값을 비교하여 추출
let comment = rows[i]['comment']
let team = rows[i]['team']
let title = rows[i]['title']
5. AWS 키체인 permission
① 발생한 이슈
배포를 위해 Terminal 창으로 작업을 하던 중 'aws permission denied (publickey)'이라는 오류와 함께 파이 질라에서 서버와의 연결 오류가 발생하였다.
② 시도한 방법
키 페어 문제라 생각되어 새로 키 페어를 생성하였지만 역시나 같은 문제가 발생했다.
③ 해결 방법
같이 있던 현빈님이 블로그 글에서 키 페어를 다른 디렉토리로 옮겨서 해결했다는 글을 공유해줘서 설마라는 생각으로 키페어를 데스크톱 아무 폴더에 넣었더니 오류가 해결되었다.
결국 내 문제 해결의 90% 이상은 같은 반 사람들 덕분에 해결이 되었다. 스스로 구글링을 통해 해결하는 것이 가장 베스트이겠지만, 혼자 했으면 훨씬 더 오래 걸렸을 오류들을 훨씬 더 효율적으로 해결한 것 같다. 다들 미니 프로젝트로 바쁘신 와중에 긴 시간 공을 들여 도와주셔서 감사합니다 ㅠㅠ 아 그리고 이 모든 과정을 같이 옆에서 찾아봐주시고 도와주신 팀원들께도 감사를 !! 힘들었지만 너무 훈훈한 첫 시작으로 기억될 것 같다.