Tips 72

[도커] 윈도우 유저가 리눅스를 필요로 할 때

윈도우 유저는 자연스럽게 개발 환경을 윈도우 기반으로 구축한다. 하지만 만약 여러분이 백엔드 개발자가 되고자 한다면, 아니 꼭 백엔드가 아니라고 해도 리눅스를 어느 정도 다룰 줄 알아야 한다. 개발 서적을 보다 보면 예제가 리눅스 기반으로 작성되어 있는 경우도 많다. 물론 윈도우 서버 제품군도 성능이 우수하며 계속 발전하고 있다. 하지만 현업에서는 여러 가지의 이유로 대부분 리눅스 기반의 OS를 서버의 운영 체제로 선택한다. 심지에 최근에는 윈도우를 만든 마이크로소프트조차 리눅스 생태계로 들어왔다. Microsoft Loves Linux 당장 리눅스가 필요할 때 어떻게 해야 할까? 컴퓨터를 새로 하나 장만해서 리눅스를 설치한다. 윈도우가 설치된 컴퓨터에 멀티 부팅이 가능하도록 리눅스를 설치한다. 버추얼박..

Tips 2022.07.25

[Typescript] 튜플 리터럴을 유니언 타입으로 변환 (feat. 배열의 요소로 이루어진 타입 만들기)

타입스크립의 장점이 강력한 타입시스템을 통해 컴파일 타임에 타입 검사를 통해 오류를 검출할 수 있다는 점이다. 가끔 타입을 string, nubmer, Pesron 과 같은 평범한(?) 타입이 아닌 특정 값만을 취할 수 있는 타입을 선언해서 쓸 경우가 있다. 예를 들어, 파일의 확장자를 이미지와 관련된 파일만 받을 수 있다고 해 보자. ext 변수는 'jpg' 또는 'gif' 문자열만 받을 수 있다. let ext: 'jpg' | 'gif' = 'bmp'; // 구문 오류 이를 별도의 타입으로 선언할 수 있다. type Ext = 'jpg' | 'gif'; let ext: Ext = 'gif'; 나아가 요청으로 받은 데이터의 유효성 검사를 하고 싶다고 하자. 예를 들어 인터페이스를 통해 받은 파일을 표현..

Tips/Typescript 2022.03.27

[Node.js] 로컬에서 npm 패키지 테스트 하기 - npm link

여러분이 만들고 있는 Node.js 모듈을 npm 패키지로 배포하려고 할 때 작성 중인 소스 코드를 어떻게 테스트 하시나요? 사용자를 위해 작성할 사용 예시처럼 이 패키지를 가져다 쓰는 모듈에서 동작하는 지를 직접 구현해 봐야 될 겁니다. 하지만 이 과정이 여간 귀찮은 게 아닙니다. npm package로 패키징을 한 후, 사용하는 모듈의 node_module의 적당한 위치에 다시 압축을 직접 풀어 주어야 합니다. 그렇다면 더 쉬운 방법은 없을까요? 소스 코드를 빌드하고 컴파일 된 파일들을 node_module의 적당한 위치에 직접 복사하면 될까요? 이 때 경로는 제대로 인식이 될까요? 이럴 경우 npm link를 이용하면 쉽게 가능합니다. 이름에서 알 수 있듯이 npm link 명령은 특정 디렉토리에 ..

Tips/Node.js 2022.03.27

소프트웨어 라이선스의 이해

전 직장에서 안드로이드 앱을 개발할 때는 사용하는 라이브러리를 모두 조사하고 법조팀에서 라이센스 위반인지 조사해 주었습니다. 막연히 알고 있던 오픈 소스의 개념과 사용할 수 있는 것과 아닌 것에 대해 이해를 조금 더 높이고자 자료를 정리합니다. 아래 내용은 대부분 책 오픈소스 소프트웨어 라이선스에서 가져온 것임을 밝혀 둡니다. 용어 정리 오픈소스 국내에서는 “오픈소스”를 지칭하는 용어로 OSS(오픈소스 소프트웨어), 공개 소프트웨어, 오픈소스라는 용어를 주로 사용합니다. 하지만 국외에서는 FOSS (Free Open Source Software)라는 용어를 더 익숙하게 사용하고 있습니다. 여기서 Free는 "공짜"를 뜻하는 게 아닌 "자유"를 뜻합니다. 행위자 오픈소스와 관견된 행위자는 3가지로 분류할 ..

Tips/잡다구리 2022.02.15

슬라이딩 세션과 리프레시 토큰

토큰을 사용하면 서버에 사용자의 상태를 저장하지 않는다는 장점이 있는 반면 공격자가 토큰을 탈취한 경우 토큰을 즉시 무효화시키지 못하는 보안 취약점을 가집니다. 이를 방지하고자 토큰의 유효시간을 짧게, 즉 만료시간을 생성시간에서 얼마 지나지 않은 시간으로 설정할 수 있습니다. 하지만 이 방법은 만료된 토큰으로 들어온 요청을 무시하고 다시 사용자에게 로그인 정보를 입력하게 할 수 밖에 없습니다. 사용자가 페이지를 이동하거나 어떤 동작을 수행하려 할 때마다 로그인을 해야 한다면 아무도 그 서비스를 사용하려 하지 않을 것입니다. 비상태저장 방식인 토큰의 보안 취약점을 보강하고 사용자 편의성을 유지하기 위해 슬라이딩 세션을 사용합니다. 슬라이딩 세션은 로그인 정보를 다시 입력하지 않고 현재 가지고 있는 토큰을 ..

Tips/인증 인가 2021.11.17

인증(Authentication) vs. 인가(Authorization)

인증(Authentication)과 인가(Authorization)는 항상 함께 등장하는 개념이면서 사용하기에 헷갈리는 용어이기도 합니다. 문맥상 어색하지 않은 경우가 있어 이 둘의 차이를 두지 않고 사용하는 경우도 빈번합니다. 인증/인가 서비스를 제공하는 Auth0 사의 블로그에 이 둘에 대한 설명이 잘 소개되어 있어 번역해 보았습니다. 인증과 인가는 최신 컴퓨터 시스템에서 널리 사용되지만 사람들이 종종 혼동하는 용어입니다. 이 두 용어는 모두 보안과 관련이 있습니다. 인증이란? 인증은 어떤 개체(사용자 또는 장치)의 신원을 확인하는 과정입니다. 개체는 보통 어떤 인증요소를 증거로 제시하여 자신을 인증합니다. 예를 들어 은행에 가서 돈을 인출하려면 하면 은행직원은 여러분이 누구인지 확인하기 위해 신분증..

Tips/인증 인가 2021.11.14

JWT (JSON Web Token)

JWT([jot]라고 읽는다고 하지만 국내에서는 그렇게 읽는 사람을 본적은 없습니다.😅)는 RFC 7519에 소개된 것으로써 문서의 초록에 따르면 다음과 같습니다. JWT는 두 당사자 사이에 이전될 수 있는 클레임을 나타내는 간결하고 URL에 안전한 방법입니다. JWT에 포함된 클레임은 JSON 객체로 인코딩되어 JSON 웹 서명(JWS, JSON Web Signature)의 페이로드 또는 JSON 웹 암호화(JWE, JSON Web Encryption)의 일반 텍스트로 사용됩니다. 클레임을 디지털 방식으로 서명하거나 메시지 인증 코드(MAC, Message Authentication Code)로 암호화 되어 무결성을 보호합니다. jwt.io 에서 JSON 객체로 JWT를 인코딩해 보거나 인코딩되어 있는..

Tips/인증 인가 2021.11.06

JOIN 조건에 OR를 써야 한다면

결론부터 이야기하면, ⚠️ 어떤 테이블을 JOIN할 때 ON의 조건으로 두개의 컬럼을 OR로 연결하면 안된다. 예를 들어 t1, t2 두개의 테이블이 있다. c1 컬럼은 둘다 primary key이고, t2.c2에는 인덱스가 걸려 있다. create table Test.t1 ( c1 varchar(60) not null primary key, c2 varchar(60) null ); create table Test.t2 ( c1 varchar(60) not null primary key, c2 varchar(60) null ); create index idx_t2_c2 on Test.t2 (c2); 이 두 테이블을 조인해서 조회를 하는데 조건을 다음처럼 걸고 싶은 경우가 있다. SELECT * FROM ..

Tips/Database, ORM 2021.10.09

[MySQL] EXPLAIN을 이용한 쿼리/테이블 최적화

💡 이 글은 MySQL 공식문서를 읽고 정리한 글입니다. SQL에 EXPLAIN이라는 명령문이 있다. DESCRIBE와 비슷한 기능을 가지고 있는데, 일반적으로 DESCRIBE는 테이블 구조에 대한 정보를 보고자 할 때 사용하고 EXPLAIN은 쿼리 수행 계획을 살펴보는데 사용된다. 즉, 쿼리가 어떻게 실행될지 예측한다. MySQL에서는 DESC와 함께 이 셋을 완전히 동일한 명령어로 취급한다. 따라서 문서에 있는 3개 명령어는 그냥 동일한 것이라고 보면 된다. 문법은 다음과 같다. {EXPLAIN | DESCRIBE | DESC} tbl_name [col_name | wild] {EXPLAIN | DESCRIBE | DESC} [explain_type] {explainable_stmt | FOR CON..

Tips/Database, ORM 2021.10.09

vscode에서 편집중인 typescript 파일을 실행하도록 설정하기

tsc --watch를 실행해 두면 매번 변경사항이 발견될 때, 알아서 빌드를 수행한다. 이상태에서 코드를 편집하고 실행을 해도 된다. 하지만 매번 콘솔을 열어 명령어를 쳐 넣는 것도 귀찮다. 그럴 땐 Run 메뉴를 실행할 때 빌드를 하게 해 주자. .vscode/tasks.json 파일 수정 tsc를 tsc-watch로 변경 { "version": "2.0.0", "tasks": [ { "label": "build", "type": "typescript", "tsconfig": "tsconfig.json", "problemMatcher": ["$tsc-watch"], "group": "build" } ] } .vscode/launch.json 파일 수정 { // Use IntelliSense to le..

Tips/Typescript 2020.06.06