[WEB] JWT 토큰 인증의 개념과 장단점

1. JWT의 개념 JWT는 웹에서 사용자 인증/인가에 사용하는 토큰으로 Json Web Token의 줄임말이다. 웹에서 사용되는 JSON 형태의 토큰 표준 규격이며 쿠키와 유사하지만, 서명된 토큰이라는 차이점이 있다. 공개키, 개인키의 쌍으로 사용할 경우 서명된 토큰은 개인키를 보유한 서버에서만 복호화가 가능하다. 보통 Authorization HTTP 헤더를 Bearer <토큰> 형태로 설정하여 클라이언트에서 서버로 전송한다. 서버에서는 토큰에 포함되어 있는 서명정보로 위변조를 검증하며 토큰은 Base64 인코딩 되어있다. 2. JWT 구조 header, payload, signature가 각각 . 으로 구분되어 있다 ...

11월 1, 2023 · Jun Kang

[PostgreSQL] 윈도우 함수(Window Functions)의 개념, 성능 및 사용법 (over, sum/rank/ntitle/cume_dist 등...)

1. 윈도우 함수 (Window Functions)란? 윈도우 함수는 행과 행 간의 관계를 쉽게 정의하기 위해 만든 함수이다. 이 기능은 일반 집계함수의 연산과 유사하지만, 일반 집계함수가 행 각각을 단일 그룹화해서 출력하는 반면에, 윈도우 함수는 각각의 행들이 그룹화되지 않으며 별도의 ID를 가진다. 그렇기에 윈도우 함수는 현재 row의 정보보다 더 많은 정보에 접근이 가능하다. 예를 들면 다음과 같다. 일반집계함수 : COUNT() + GROUP BY-> 그룹별 1개의 행 출력 (그룹 개수만큼 출력, 자르기 + 집약) 윈도우집계함수 : COUNT() OVER (PARTITION BY) -> ID개수만큼 행 출력 (행의 개수가 줄어들지 않는다, 자르기) ...

10월 31, 2023 · Jun Kang

[PostgreSQL] 데이터베이스 상속(Inheritance)의 개념과 사용법 및 성능비교 (Inherits, Only)

1. 데이터베이스 상속(Inheritance)이란? 상속은 객체지향 데이터베이스의 개념 중 하나이다. PostgreSQL은 테이블 생성 시 하나 이상의 다른 테이블로부터의 상속 기능을 제공하며, 이를 잘 활용하면 데이터베이스 설계에 새로운 가능성들을 열어준다. 데이터뿐만 아니라 부모 테이블의 컬럼 속성 및 인덱스 등의 특징들도 자식 테이블로 상속되기에 상황에 따라 효율적인 설계가 가능하다. 2.데이터베이스 상속(Inherits) 방법 다음 예제는 PostgreSQL 공식 문서의 예제이다. Capitals - 이름, 인구, 고도, 요약어를 포함한 수도의 정보가 포함된 테이블 Cities - 이름, 인구, 고도를 포함한 도시 정보가 포함된 테이블 ...

10월 30, 2023 · Jun Kang

[PostgreSQL] 날짜 형태 검증하기 (ERROR: date/time field value out of range)

1. 날짜 형태로 형 변환 데이터 베이스에서 날짜형태로 형 변환을 하는 것은 다음과 같은 방법으로 쉽게 가능하다. -- Unix타임(int)형 변환 SELECT to_timestamp(1658792421) -- varchar 타입 변환 SELECT to_timestamp('20231026','yyyymmdd') -- 날짜형을 char로 변환 SELECT to_char(to_timestamp(1658792421), 'DD-MM-YYYY') 2. 유효한 날짜형태 검증 데이터 정제가 완료되지 않아 조회하려는 데이터에 날짜유형에서 벗어난 데이터 ('20231301',202301', '20231232' 등)가 하나라도 있을 경우 조회 자체가 안된다. 그럴 경우 날짜 규격에 맞지 않는 데이터를 보정 후 연산해야 하는 경우가 있는데 단순 월별 케이스문으로 분리하여 날짜 유형에 어긋나는 경우를 찾을 수도 있지만 row마다 날짜 유형이 다르거나 윤달을 체크할 수 없다. ...

10월 26, 2023 · Jun Kang

[Java] 가상 스레드 (Virtual Threads)란? 자바 21의 가상스레드 (Virtual Thread) 도입

1. 가상 스레드 (Virtual Threads)란? 2023.09.20 릴리즈 된 자바 21에 추가된 가상 스레드(Virtual Threads)라는 기능을 살펴보자. 가상 스레드는 경량 스레드로, 높은 처리량의 동시 어플리케이션을 작성, 유지 및 관찰하는 작업 공수를 크게 줄인다. OS스레드를 그대로 사용하지 않고 JVM 자체적으로 스케쥴링을 통해 사용할 수 있는 경량 스레드이며, 하나의 프로세스가 수십 - 수백만 스레드를 동시에 실행할수 있도록 설계되었다. 2. 자바의 전통적인 스레드 자바 개발자들은 근 30년동안 동시성 서버 어플리케이션의 처리를 위해 스레드에 의존해왔다. 모든 메서드의 구문들은 스레드 내부에서 실행되며, 1개의 요청을 1개의 스레드가 처리한다. 대표적으로 스프링은 멀티스레드 구조이기에, 여러 스레드의 실행이 동시에 발생하며 동시 요청이 많아질수록 스레드의 수 역시 증가한다. 각각의 스레드는 지역 변수를 저장하고 메소드 호출을하는 스택을 제공하며, 문제가 생겼을 때의 Context도 제공하는데, 예를들어 Exception은 동일 스레드 내에서의 메소드에 의해 throw/catch 된다. 그렇기 때문에 개발자는 스레드의 Stack trace로 문제를 추적할 수 있는 것이고, 그 외 Debugger (스레드의 메소드 내에서 구문을 차례로 훑어본다), Profiler(JFR) (여러 스레드의 행동을 시각화하여 스레드의 성능을 이해할 수 있도록 도와준다.)도 모두 스레드 기반으로 되어있다. ...

10월 25, 2023 · Jun Kang