포스트

2021-04-10-TIL

2021-04-10-TIL

JWT

  • https://meetup.toast.com/posts/239

원래 제목을 AWT로 적었는데, 링크한 글은 “JWT를 소개합니다”라는 글이다. 지금은 주소가 바뀌어 원래 링크로는 열리지 않는다.

JWT(JSON Web Token)는 두 당사자 사이에서 클레임(claim)을 주고받기 위한 작고 URL에 안전한 표현 방식이다(RFC 7519). 헤더, 클레임 집합, 서명의 세 부분을 각각 base64url로 인코딩해 점(.)으로 이어 붙인다. iss(발급자), sub(주체), exp(만료 시각), iat(발급 시각) 같은 클레임 이름이 표준으로 등록되어 있다.

base64url은 암호화가 아니라 인코딩이라서 누구나 페이로드를 읽을 수 있다. 서명은 내용이 바뀌지 않았다는 것만 보장한다. 그래서 비밀번호 같은 민감한 값은 넣지 않는다. RFC도 서명이나 암호화로 보호하지 않은 JWT의 내용은 신뢰 판단에 쓰면 안 된다고 적고 있다.


Spring Boot JDBC and MySQL

  • https://spring.io/guides/gs/accessing-data-mysql/

이 가이드는 제목과 달리 Spring Data JPA로 MySQL에 접근한다. 가이드 스스로도 JPA는 여러 선택지 중 하나이고 순수 Spring JDBC를 써도 된다고 적고 있다. 연결 정보는 어느 쪽이든 application.properties에 같은 키로 둔다.

1
2
3
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=myuser
spring.datasource.password=secret

JPA를 쓸 때만 spring.jpa.hibernate.ddl-auto 같은 Hibernate 설정이 추가로 붙는다.


API Document

  • https://stripe.com/docs/api/pagination

Stripe의 목록 API는 커서 기반 페이지네이션을 쓴다(Stripe API Reference). limit(기본 10, 1~100)으로 개수를 정하고, 마지막으로 받은 객체의 id를 starting_after에 넣어 다음 페이지를 받는다. 이전 페이지는 ending_before로 받는다. 응답의 has_more가 false면 마지막 페이지다.

페이지 번호 방식과 달리, 중간에 데이터가 추가되거나 삭제되어도 같은 항목을 두 번 받거나 건너뛰는 일이 적다. 문서 쪽에서 볼 점은 모든 목록 API가 같은 파라미터와 같은 응답 모양을 공유한다는 것이다. API 문서를 쓸 때 공통 규칙을 한 페이지에 모아 두면 개별 엔드포인트 설명이 짧아진다.


Deployment in Heroku

  • https://medium.com/jeremy-gottfrieds-tech-blog/tutorial-how-to-deploy-a-production-react-app-to-heroku-c4831dfcfa08

Heroku는 Heroku가 호스팅하는 Git 원격 저장소에 git push heroku main으로 코드를 올리면 빌드와 배포를 진행한다. 이때 원격의 main이나 master 브랜치에 푸시한 코드만 배포하고, 다른 브랜치에 푸시하면 아무 일도 일어나지 않는다(Heroku Dev Center).


Heroku push in a subfolder

  • https://coderwall.com/p/ssxp5q/heroku-deployment-without-the-app-being-at-the-repo-root-in-a-subfolder
  • https://medium.com/@shalandy/deploy-git-subdirectory-to-heroku-ea05e95fce1f
  • https://jtway.co/deploying-subdirectory-projects-to-heroku-f31ed65f3f2

Heroku 문서는 앱이 저장소의 하위 디렉터리에 있으면 푸시해도 실행되지 않는다고 적고 있다. 프론트와 백엔드를 한 저장소에 두면 이 문제를 만난다. 위 글들이 쓰는 방법은 git subtree다.

1
git subtree push --prefix backend heroku main

git subtree push는 지정한 디렉터리의 히스토리만 뽑아 그 디렉터리를 루트로 하는 새 히스토리를 만들고(split), 그 결과를 원격에 푸시한다. 그래서 Heroku 입장에서는 backend 디렉터리가 저장소 루트인 것처럼 보인다.


공부할거리

  • https://edu.nextstep.camp/c/lqsBs7x0
참고한 자료외부 출처 5

외부 출처

이 글은 저작권자의 CC BY 4.0 라이선스를 따릅니다.

댓글

아직 댓글이 없습니다