[부트캠프][5주차]트랜잭션, JWT

이호석·2022년 7월 8일
0

부트캠프

목록 보기
11/11

5주차는 Cookie & Session, 트랜잭션, JWT에 대해서 배웠다.

트랜잭션

트랜잭션이란 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다. 보통 예시를 송금으로 알려주는데, 여기서도 아주 간단하게 알려주겠다. A가 B라는 사람에게 돈을 보낸다면, 먼저 A의 통장에서 돈을 빼고, B의 통장에 넣어주어야한다. 이 각각 따로가 아니라 이 과정 전체를 트랜잭션이라고 한다.
트랜잭션의 특성으로는 ACID라고 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 영속성(Durability)가 있다. 모두 중요하지만 대표적 특성인 원자성만 알려주자면, 위 송금 과정에서 A의 통장에서 돈을 뺀 상태에서 B의 통장에 돈을 넣기전에 오류로 인해 송금을 완료하지 못한다면 문제가 발생한다. 그러므로 A의 통장에 다시 돈을 넣어줘야 한다. 이처럼 원자성이란 트랜잭션이 DB에 모두 반영되거나 반영되지 않는 특성을 말한다.

즉 트랜잭션은 DB에 대해서 읽기, 쓰기, 삭제 등을 하면서 성공하면 'commit'을 하고, 에러가 발생하면 'rollback'을 한다는 소리이다. 그리고 트랜잭션은 DB처리에 대해서만 관련이 있기 때문에 서버에러와는 관련이 없다.

JWT

JSON 웹 토큰은 두 당사자 간의 클레임을 안전하게 표현하기 위한 개방형 산업 표준 RFC 7519 방법이다. 사용자 인증 방식의 종류에는 Cookie, Session, Token이 3가지가 있다. 물론 전부 자세하게 알려주면 매우 좋겠지만 토큰에 대해서만 설명하겠다. 쿠키와 세션의 단점만 조금 알려주자면 쿠키는 탈취나 스니핑당하는 보안에 취약하고, 세션은 보안 측면에서 세 종류중 가장 뛰어나지만 모든 처리를 서버 혼자 담당하기 때문에 이용자가 많으면 서버부하가 커진다.

형태


JWT.io 홈페이지 첫 화면

JWT는 HEADER, PAYLOAD, SIGNATURE이 3부분으로 이루어져있고 전부 base64형태로 인코딩 되어있다. HEADER에는 토큰의 종류, 암호화 방식에 대해 설명되어 있으며, PAYLOAD에 들어갈 값은 토큰을 만드는 곳에서 지정하는데 보통 들어가는 값은 사용자의 Index, 토큰 발행 날짜, 만료 날짜이다. SIGNATURE에는 인코딩된 HEADER와 PAYLOAD를 비밀 키를 이용해 암호화한다. 이 값을 다시 한번 base64방식으로 인코딩한 값이다.

5주차 후기

4주차 때 과제 범위를 착각해 5주차에 몰아하느라 'OAuth 2.0 소셜로그인 챌린지 과제'를 하지 못해서 아쉬었다. 전에 소셜로그인을 구현해본적이 있어서 한번 해보려고 했는데, JWT를 사용하지 않고 소셜로그인 하는것 보다 두배 정도 복잡해 보여서 기본과제인 JWT적용과 API구현에 집중하기로 했다.

0개의 댓글