배운 것 11

WebAuthn, Passkey로 로그인하기

이 글은 혼자서 RFC 문서를 읽어가며 passkey 로그인을 구현해본 경험을 글로 옮긴 것이다. FIDO Fast IDentity Online alliance의 약어로 아이디 패스워드에 의존적인 기존 로그인 방식을 대체하기 위한 인증 표준을 만드는 것을 목적으로 하는 협회이다. WebAuthn은 FIDO에서 발표한 FIDO2의 일부이며, FIDO는 그 외에도 Universal 2nd Factor(U2F), Universal Authentication Framework, 그리고 FIDO2(WebAuthn, CTAP 등)를 발표했다. WebAuthn 비밀번호 없이 로그인을 하기 위한 웹 표준이다. 즉, 지식 기반 (비밀번호에 대한 지식) 인증 시스템이 아니라 소유 기반 (스마트폰, 인증 디바이스 등) 공개..

배운 것 2024.01.04

가운데를 말해요

1655번: 가운데를 말해요 첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1 www.acmicpc.net 백준 온라인 저지 1655번 가운데를 말해요 문제입니다. N개의 숫자를 차례차례 입력했을 때, 각각의 경우에서 중앙값을 출력하는 문제입니다. 매번 최소값이나 최대값을 출력하는 것이 아니라, 중앙값을 출력해야 하기 때문에 하나의 힙을 사용해서 풀이할 수는 없습니다. 그렇게 되면 매번 N//2의 숫자를 탐색해야 해서 시간 초과를 받게 됩니다. 따라서, 중앙을 기준으로 하여 작거나 같은 숫자를 저장할 최대 힙과 큰 숫자들을 저장할 최소 힙을 사용하는 ..

배운 것 2023.03.29

기술 부채란 무엇일까?

🤣 이번 그룹 프로젝트에서 웹 소켓을 도입하여 소켓 서버를 구현하려고 하였다. 기술 스택까지 결정하고, 기본적인 구조를 결정한 후 일부 기능의 개발마저 진행된 상태였다. 그러나, 멘토링 중 웹 소켓 서버에 대해서 질의를 하였고, 현재 우리가 구현하려고 하는 서비스에서 과연 웹소켓 서버가 필요할까에 대해서 의문을 가지게 되었다. 그 후, short polling, long polling, sse, websocket 등 여러 기술에 대한 상호 비교가 부족하다는 판단을 내릴 수 있었고, 이것을 다시 찾아보는 중이다. 어느정도 개발을 진행했다가 결과물 포기를 고려하고 다시 시작점으로 돌아가서 되돌아보는 과정을 진행하면서, 얼핏 들어보았었던 기술 부채라는 말과 맞닿아 있는 부분이 있어서 이에 대해 찾아보려 한다...

배운 것 2022.11.29

DAY01 - 학습정리

1. IDE란 무엇인가? IDE란, Integrated Development Environment의 준말로 통합 개발 환경이라고 번역할 수 있다. 일반적으로 IDE는 텍스트 편집기, 빌드 자동화, 디버깅이 가능한 툴을 말하며 자동완성이나 하이라이트 기능이 있어 소스코드 작성에 도움을 준다. 2. console.assert을 비롯한 console의 다양한 함수 console 객체가 가지고 있는 메서드는 굉장히 다양하다. 그 중에서 assert, table 메서드가 log를 제외하고 활용성이 높다고 생각하여 공부해보았다. 우선, console.assert의 경우 기본적으로 2가지 값을 인자로 받는다. 첫번째 인자는 검증하고 싶은 boolean이 들어가게 되고, 두번째는 검증에 실패했을 때 로그에 남길 메시지..

배운 것 2022.07.18

미확인 도착지

9370번: 미확인 도착지 (취익)B100 요원, 요란한 옷차림을 한 서커스 예술가 한 쌍이 한 도시의 거리들을 이동하고 있다. 너의 임무는 그들이 어디로 가고 있는지 알아내는 것이다. 우리가 알아낸 것은 그들이 s지점에서 www.acmicpc.net 백준 온라인 저지 9370번 미확인 도착지 문제입니다. 어떤 사람이 목적지까지 최단 경로로 간다는 가정으로 문제가 시작합니다. 이 사람이 출발한 지점과 통과한 경로, 그리고 가능한 목적지가 주어졌을 때, 어떤 목적지가 실제로 통과한 경로를 거쳐서 가는 것이 최단 경로인 것인지 계산하는 문제입니다. 풀이 코드입니다. import heapq import sys input = sys.stdin.readline T = int(input()) INF = 1e9 t..

배운 것 2022.06.08

자바스크립트의 this란?

자바스크립트의 this는 파이썬의 self와 비슷하다. 그렇지만 미묘하게 다르게 작동하는 부분이 있는 것 같아서 자바스크립트의 this에 대해서 공부해보려 한다. class Test: def __init__(self,_num): self.__num = _num @property def num(self): return self.__num def increaseInner(self): self.__num += 1 return self.__num test = Test(1) increaseGlobal = test.increaseInner increaseGlobal() print(test.num) # 2 increaseGlobal() print(test.num) # 3 increaseGlobal() print(te..

배운 것 2022.06.06

타입스크립트 데코레이터

Nest.js를 활용해서 API서버를 구현할 때, 데코레이터를 많이 사용하였지만 만들어진 사용법 외에는 잘 모르는 것 같아서 데코레이터에 대해서 공부해보았다. 데코레이터는 아직 자바스크립트에서 지원하는 것은 아니고, 타입스크립트에서만 사용할 수 있다. 데코레이터를 활용한 코드를 자바스크립트로 빌드한 것을 보면, Reflect 객체를 활용하여 구현한 것을 볼 수 있다. 데코레이터에 대해서 찾아보면서 Reflect를 참 많이 본 것 같은데, 공부를 해봐야 할 것 같다. 데코레이터는 기본적으로 함수의 형태로 정의된다. function Log(target: any) { console.log('decorator'); } @Log class Person { name = 'MAX'; } 위와 같은 형태로 데코레이터를..

배운 것 2022.06.01

징검다리 건너기

프로그래머스 Lv.3 이진탐색으로 풀이한 문제인 징검다리 건너기 문제입니다. 해당 문제의 링크입니다. 코딩테스트 연습 - 징검다리 건너기 [2, 4, 5, 3, 2, 1, 4, 2, 5, 1] 3 3 programmers.co.kr 각 징검다리는 한명이 건너게 되면 건널 수 있는 사람의 수가 줄어들게 되며, 0이 되면 더 이상 해당 징검다리를 건널 수 없습니다. 사람들은 k개의 징검다리를 건너뛸 수 있으므로 k개 이상이 연속으로 0이 되면, 건널 수 없게 됩니다. 징검다리의 배열의 길이는 200,000까지 되며, 200,000,000까지의 값을 가질 수 있으므로 이진탐색으로 풀이해야 함을 유추할 수 있습니다. check 함수를 선언한 후, 이를 이용해 이진 탐색 코드를 작성하였다. def solution..

배운 것 2022.05.30

프로그래머스 지형 이동

프로그래머스 Lv.4 최소 신장 트리로 풀이한 문제인 지형 이동 문제입니다. 해당 문제의 링크입니다. 코딩테스트 연습 - 지형 이동 [[1, 4, 8, 10], [5, 5, 5, 5], [10, 10, 10, 10], [10, 10, 10, 20]] 3 15 [[10, 11, 10, 11], [2, 21, 20, 10], [1, 20, 21, 11], [2, 1, 2, 1]] 1 18 programmers.co.kr 문제의 골자는 서로 이동할 수 없는 지형들을 하나의 노드로 보고, 각각의 노드들 사이의 간선의 가중치를 하나의 노드에서 다른 노드로 이동하기 위한 사다리 높이의 최소값으로 계속해서 갱신해주는 것입니다. 그렇게 간선들을 만들어준 다음에는 가중치에 대해서 오름차순으로 간선들을 정렬하고, 유니온 ..

배운 것 2022.05.27

프로그래머스 자물쇠와 열쇠

프로그래머스 Lv3 자물쇠와 열쇠 문제입니다. 해당 문제 링크의입니다. 코딩테스트 연습 - 자물쇠와 열쇠 [[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true programmers.co.kr 문제의 골자는 2차원 배열을 회전시키고 이동시켜 조건에 맞는 case가 존재하는 지를 탐사하는 것입니다. 전 해당 문제를 2차원 배열을 생성하는 방식이 아닌, 비교해야 할 값만을 따로 모아 배열을 만들고, 배열에 해당하는 원소들을 비교하는 식으로 하였습니다. 다음은 제가 풀이한 코드입니다. def solution(key, lock): lk, ll = len(key), len(lock) holes = list() up = list() for ..

배운 것 2022.02.03