2021.02.17
가지고 있는 데이터를 내가 원하는 형태의 데이터로 ‘가공'하는 과정을 parsing
이라 하며 그 과정을 수행하는 모듈 혹은 메소드를 parser
라 일컫는다.
: HTTP post put 요청시 request body 에 들어오는 데이터값을 읽을 수 있는 구문으로 파싱함과 동시에 req.body 로 입력해주어 응답 과정에서 요청에 body 프로퍼티를 새로이 쓸 수 있게 해주는 미들웨어
express 문서에 따르면 미들웨어 없이req.body 에 접근하는 경우에는 기본으로undefined 가 설정되어 있으므로 bodyParser, multer와 같은 미들웨어를 사용하여 요청 데이터 값에 접근해야 한다는 안내를 찾을 수 있다.
클라이언트 측에서 API post 와 put 메소드로 요청시 (get delete 는 불가하다.)
body 를 포함하여 보낼 수 있는데 이 값을 서버 측에서 받는다고 그대로 사용할 수 있는 것이 아니고 서버 내에서 해석 가능한 형태로 변형해야 사용할 수 있게 되는 것이다.
이때
API 요청에서 받은 body 값을 파싱하는 역할을 수행하는 것이 bodyParser 라는 미들웨어이다.
: JSON Web Token (JWT) 는 웹표준(RFC 7519)으로서 두 개체에서 JSON 포맷을 사용하여 가볍고 수용적인 자가수용(self-contained) 방식으로 정보를 안전하게 전달한다. 주로 회원 인증과 두 개체 사이에서 정보 전달을 할때 사용 된다.
:
헤더 (Header)
Header는 typ와 alg 두가지로 구성 되어 있다.
HAMAC SHA256
, RSA
을 사용한다. 이 알고리즘은 토큰을 검증 할 때 사용되는 signature 부분에 사용.{
"alg": "HS256",
"typ": "JWT"
}
내용 (Payload)
Payload는 토큰에 담을 정보가 들어 있습니다. 여기에 담는 정보의 한 조각을 'claim' 이라고 부르고, 이는 Key / Value의 한 쌍으로 이루어져 있다. 토큰에는 여러 클레임들을 넣을 수 있다.
Claim의 분류는 총 세가지로 이루어져 있다.
등록된 클레임 (Registered Claim)
등록된 클레임은 토큰에 대한 정보를 담기위한 미리 정의된 클레임의 집합이다. 등록된 클레임의 사용은 선택적으로 사용 가능하지만 사용하는 것을 권장한다.
ex :1480849147370
) 형식이어야 하며 언제나 현재 시간 이후여야 한다.공개 클레임 (Public Claim)
공개 클레임은 사용자 정의 클레임으로. 공개용 정보 전달을 위해 사용된다. 충돌 방지를 위해 URI 포맷을 이용해야 한다.
{
"https://tandohak.co.kr/is_authenticated": true
}
비공개 클레임 (Private Claim)
비공개 클레임은 등록된 클레임도 아니고, 공개 클레임도 아닌 당사자간에 정보를 공유하기 위해 만들어진 사용자지정 클레임이다. 공개 클레임과 달리 이름이 중복되어 충돌이 될 수 있으니 유의 해야 한다.
{
"username": "tandohak"
}
페이로드의 예제
{
"iss": "tandohak.co.kr", // 등록된 클레임
"exp": "1485270000000", // 등록된 클레임
"https://tandohak.co.kr/is_authenticated": true, // 공개 클레임
"username": "tandohak" // 비공개 클레임
}
서명 (Signature)
서명은 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드이다. 서명은 위에서 만든 헤더와 페이로드의 값을 각각 BASE64로 인코딩 하고, 인코딩 한 값을 비밀 키를 이용하여 헤더에서 정한 알고리즘으로 해싱을 하고, 이 값을 다시 BASE64로 인코딩 하여 생성한다.
⇒ 인증방법으로 왜 jwt를 사용하는지 공부
JWT 는 Json Web Token 의 약자이며 authentication header 내에서 사용되는 토큰 포맷이다.
이 토큰은 두 개의 시스템끼리 안전한 방법으로 통신할 수 있도록 설계를 도와준다.
편의상 JWT 를 Bearer token 으로 부르기로 한다.
Bearer token 의 구성 요소는 header, payload, signature 이다.
JWT 의 장점은 계정 서버와 API 서버가 분리되어 있을 때 API 서버가 계정 서버로 토큰의 유효성 여부를 쿼리하지 않고
스스로 판단할 수 있다는 것이다.
live(라이브 버전 - 실제 사용)
sandbox(샌드박스 버전 - 테스트 용)
개발 / 연동 / 테스트 할 경우 샌드박스 계정을 생성해서 사용해야 한다.
- 페이팔 한국 사이트에서 비지니스 계정으로 회원가입
- 페이팔 개발자 사이트에서 로그인
sandbox버튼을 클릭한 상태로 Create app 버튼 클릭 App Name 설정 샌드박스 비지니스 계정을 선택
App을 생성하면 Client Id 생성된다.
paypal checkout button 커스텀 - 페이팔 공식 문서
window.paypal.Button.render(
{
env: 'sandbox', //sandbox or live 선택
client: {
sandbox: clientId,//App 생성시 생긴 ID 입력(sandbox_client_id)
production: '',//실제 제품 출시할 경우 입력(production_client_id)
},
locale: 'en_US',//한국어 표시 - ko_KR 입력
style: {
//버튼 스타일 지정
size: 'responsive',//small, medium, large, responsive(공식문서 권장) - 너비에 따라 동적으로 결정
color: 'gold',//공식문서 추천 순 gold>blue>silver,white>black
shape: 'pill',//pill(알약모양) - 권장, rect(기본 버튼 모양)
},
commit: true,//지금 지불 활성화
payment(data, actions) {
return actions.payment.create({
transactions: [
{
amount: {
total: 1.00,
currency: 'USD',
},
},
],
});
},
onAuthorize: function (data, actions) {
// Optional: display a confirmation page here
return actions.payment.execute()
.then(function () {
// Show a success page to the buyer
});
}
}, '#paypal-button');