JWT 알아보기
·
정리 및 생각
현재 진행하고 있는 프로젝트에서 API 명세서를 만드는 중이다. 유저 로그인을 위한 API에는 어떤 데이터들이 들어가야 할까 찾아보던 중에, 주로 사용하는 사용자 인증 방식인 JWT에 대해서 정리할 필요성을 느꼈다. 세션 방식과 JWT 방식의 차이에 대해서 간단히 알아보고, JWT의 구조와 Access/Refresh 토큰에 대해서도 정리해보겠다. I. 세션 방식JWT에 대해 알아보기 전에, 세션 방식과 JWT 방식의 차이에 대해 이해해야 한다. 둘 다 사용자 인증을 위한 방식이지만, 서버에서 state를 저장하고 있는지에 대해서 차이가 있다. 세션 방식은 서버가 사용자의 인증 정보를 가지고 있는 방식이다.1. 사용자가 로그인을 하게 되면, 서버는 고유한 세션 정보를 생성하여 데이터베이스에 저장하고 사용자..
[Python] 30462: MEXchange
·
Problem Solving
# KUPC2023 - 파이썬30462번: MEXchange 풀이정답까지 1시간 30분 정도 걸린 것 같다. 수열 형식의 로직의 Output을 주고, 거기서 거꾸로 로직의 Input을 찾는 문제이다.거꾸로 찾는 것이 어렵지 해당 로직 구현이 어려운 것은 아니기 때문에, 문제에서 제시하는 MEX 로직을 만들고 N자리 순열의 모든 경우의 수를 넣어서 규칙을 찾아보려고 했다.from itertools import permutationsn = 6for a in permutations(range(1, n + 1), n): a = list(a) b = [] for i in range(n): new_a = a[:i + 1] for i in range(1, n + 2): ..
[Python] 30463: K-문자열
·
Problem Solving
30463번: K-문자열 풀이`N  '서로 다른 문자'를 가지느냐가 중요하니까, 0 ~ 9의 각 숫자를 가지고 있는지로 압축할 수 있겠다.10가지의 숫자를 갖고 있냐 없냐니까 `2^10`개로 압축할 수 있고, 압축한 것에 대해서는 `O(N^2)`을 하더라도 풀리겠다. 1. 각 문자열을 set으로 바꿔 중복된 숫자를 없앤 후, 리스트로 바꿔 정렬한다.`'1111111111'` -> `'1'``'9876543210'` -> `'0123456789'`  2. 1번 과정으로 일반화된 문자열의 개수를 dict으로 센다. 3-1. dict를 순회하며, 2개의 key를 연결했을 때 서로 다른 숫자가 k개라면, 각 value를 곱해 result에 더한다. 3-2. 문자열이 동일하면서, 가진 서로 다른 숫자가 k개일 경..
RESTful API 가이드라인
·
정리 및 생각
RESTful API란 무엇일까? 약자 그대로 Representational State Transfer-ful API. 즉 REST 아키텍처 스타일을 잘 준수하는 API를 의미한다. 개발 프로세스의 핵심 단계인 API 명세서를 작성하기에 앞서, REST의 제약 조건에 대해 간단히 알아본 후에 RESTful한 API를 설계하고 구현할 때 고려해야 할 가이드라인을 정리해보려고 한다.  최근 업데이트: 2024-11-17 REST 아키텍처의 제약 조건- 클라이언트/서버 구조클라이언트와 서버는 인터페이스를 통해 서로 명확하게 분리되어야 한다. 클라이언트는 프론트엔드 측에서 구현하고, 리소스를 제공하는 서버는 백엔드 측에서 구현한다. REST API는 서버와 클라이언트를 이어주는 인터페이스가 된다. - 무상태(S..
[Project - Whenwhen] 2. ERD 작성기
·
Projects
요구사항 분석을 완료한 이후, 테이블간 관계를 정의하기 위해 ERD를 작성하였다.간단한 구조이지만, 데이터베이스 네이밍 컨벤션에 맞춰서 일관성을 유지하려고 노력하였다. 이벤트 도메인events 테이블각 사용자가 참여할 수 있는 이벤트를 담당하는 테이블이다.code초대 링크를 구성할 코드를 저장하는 컬럼이다. 이벤트 당 인원이 소규모이고, 주로 개인적인 용도로 사용될 것으로 예상되기 때문에 링크 만료 기능은 구현하지 않고, 하나의 이벤트와 하나의 링크가 종속되도록 하였다. start_hour, end_hour매일 선택 가능한 시간의 범위를 정하는 컬럼이다. status이벤트 종료 이후에도, 삭제 대신 기록을 확인할 수 있도록 active와 completed 상태를 가지게 했다. dates 테이블이벤트 생성..
관계형 데이터베이스 네이밍 컨벤션 정리
·
정리 및 생각
데이터베이스 모델링을 할 때 일관성을 갖추고 싶어서 RDBMS에서 많이 사용되는 네이밍 컨벤션을 정리해보았다.PK의 필드명에서 id vs idx vs {테이블명}_id테이블 이름에서 단수형 vs 복수형등등 논점이 되는 부분들도 장단을 따져 정리해보았다. I. 일반적인 규칙1. 테이블명 및 컬럼명에는 스네이크 케이스를 사용한다.접근성과 가독성을 위하여 모든 문자를 소문자 및 언더스코어(_)로 구분하는 스네이크 케이스를 사용한다.2. 약어 사용을 지양하고 전체 단어를 사용한다.`cnt`(X) -> `count`(O)3. 쉽고 직관적인 기술형으로 작성한다. 예약어는 피한다.select, from, table 등(X)4. 정규화 규칙을 따르고 일관성을 유지한다. II. 테이블 네이밍 규칙1. 테이블 이름은 복수..
[Project - Whenwhen] 1. 프로젝트 개요
·
Projects
http://www.when2meet.com When2meet www.when2meet.comwhen2meet이라는 사이트가 있다. 약속시간을 쉽게 정할 수 있도록 해주는 사이트이다.일정을 맞출 날짜들을 고르고 링크를 공유하면 각 유저는 일자별로 본인이 가능한 시간을 체크하여 각 유저가 가능한 겹치는 시간을 알 수 있다. 간편하고 군더더기 없는 서비스이지만, 더 깔끔한 UI와 함께 보완하면 좋을 것 같다고 생각하여 프로젝트를 구상하게 되었다. when2meet 서비스의 단점보완하고자 하는 단점 두 가지를 뽑아 봤다.1. UI가 부족하다.when2meet을 처음 들어가면 숨이 턱 막힌다. 매우 간단한 UI이지만, 사용자 경험을 위해서는 더 "예쁘고 깔끔한" UI가 필요하다고 생각했다. 또, 일정 체크 서비..