본문 바로가기

javascript

(72)
[nodejs] nodemon + ts-node을 es module 환경에서 사용하기 https://nodemon.io/ https://github.com/TypeStrong/ts-node nodemon은 프로젝트 내에서 지정된 파일을 감시하여 변경이 발생하는 경우 앱을 재시작하는 기능을 가진 패키지로, 개발 환경에서 코드가 변경될 때마다 수동으로 앱을 재시작해야 하는 부담을 덜어준다. ts-node는 내부적으로 타입스크립트 컴파일러를 이용하여 생성된 자바스크립트 파일을 실행해주는 패키지이다. 이러한 동작은 어디까지나 "내부적"으로 처리되기 때문에 개발 환경에서는 자바스크립트 파일이 생성되지 않는다. tsconfig.json 파일 내에 outDir을 따로 지정해두지 않으면 타입스크립트 파일이 있는 위치에 컴파일되어 코드가 상당히 난잡하게 섞이는데, ts-node을 이용하면 이런 지저분한 ..
[nextjs13] fetch API 무작정 fetch 메서드를 써보다가 뭔가 이상해서 공식 문서를 찾아봤다. https://nextjs.org/docs/app/api-reference/functions/fetch Functions: fetch | Next.js Using App Router Features available in /app nextjs.org nextjs 13 버전에서는 getStaticProps, getServersideProps 같은 불편한 표기가 사라졌다. 서버로부터 데이터를 가져오는 방식이 fetch API를 경유하도록 일관된 방식으로 변경되었으며, cache / next 옵션을 통해 기존 함수에 대응되는 기능을 구현할 수 있도록 변했다. force-cache / default: getStaticProps에 대응 no..
[typescript] 오버로딩 요점 타입스크립트에는 C++, Java 등 정적 타입 언어에 대응되는 함수 본문에 대한 오버로딩은 존재하지 않는다. 대신 함수에 대한 오버로드 시그니처(콜 시그니처)를 기반으로 오버로딩인 것 "처럼" 만들 수는 있다. 메서드 오버로딩 오버로딩은 이름은 같지만 입력 파라미터 타입 + 출력 형식이 다른 여러 개의 메서드를 중복 정의하는 것을 의미한다. 오버로딩이 성립하기 위해서는 다음과 같은 조건을 만족해야 한다. 메서드의 이름이 같아야 한다. 애초에 이름이 같지 않으면 오버로딩이 아니다. 메서드의 입력 파라미터의 타입 또는 형식이 반드시 달라야 한다. 출력 형식은 같든 다르든 입력 파라미터 형식만 다르다면 상관없다. 예를 들어, 아래 코드는 오버로딩에 해당한다. int add(int a, int b) { ..
[nodejs] express-session typescript와 사용하기 express-session 모듈을 사용할 때 데이터는 req.session.~ 형태로 추가한다. 이때 추가되는 객체는 @types/express-session을 따로 설치하더라도 인식되지 않는다. 따라서 따로 타입 정의를 해줘야 한다. 타입 정의를 작성할 파일은 tsconfig.json 파일 내에 rootDir로 정의된 경로 내에 존재해야 타입 추론이 정상적으로 진행되는 것으로 보이며, 방법은 크게 2개로 나뉜다. src/@types 폴더 내 *.d.ts 파일 내에 정의한다. src/global.d.ts 파일 내에 정의한다. 두가지 방법 중 어떤 방법을 선택했다고 가정하고, req.session의 구조를 살펴보자. /** * This request's `Session` object. * Even tho..
[nodejs] prisma ORM 라이브러리 https://www.prisma.io/ Prisma | Next-generation ORM for Node.js & TypeScript Prisma is a next-generation Node.js and TypeScript ORM for PostgreSQL, MySQL, SQL Server, SQLite, MongoDB, and CockroachDB. It provides type-safety, automated migrations, and an intuitive data model. www.prisma.io prisma는 타입스크립트 환경에서 사용 가능한 ORM 라이브러리 중 하나로, 모델의 정의를 자바스크립트 또는 타입스크립트 파일에 선언하는 대신 prisma schema라는 별도의 설정 파일을..
[nodejs] mysql2 라이브러리 mysql2 https://github.com/sidorares/node-mysql2 GitHub - sidorares/node-mysql2: fast mysqljs/mysql compatible mysql driver for node.js :zap: fast mysqljs/mysql compatible mysql driver for node.js - GitHub - sidorares/node-mysql2: fast mysqljs/mysql compatible mysql driver for node.js github.com mysql2 라이브러리는 nodejs 환경에서 mysql에 접근하기 쉽도록 도와주는 라이브러리로, 기존에 별도로 존재하던 라이브러리를 대중적으로 사용되던 mysql 라이브러리와 동일한..
mermaid.js - 프론트엔드에서 UML을 그리는 라이브러리 과거 사용한 draw.io 파일들: https://github.com/fish9903/Bus-Tour/tree/main/drawio 학교에서 소프트웨어 공학 프로젝트를 수행할 때 UML을 다룬 적이 있었다. 당시에는 UML 이미지를 얻는 것 자체가 목적이었기 때문에 plantUML, draw.io을 병행해서 사용했고, 설계 과정에서 큰 도움을 받았다. 최근 트리 자료구조를 공부하면서 이를 시각화하기 위해 라이브러리를 찾던 중, 위 언급한 plantUML과 문법이 비슷하면서 자바스크립트 기반으로 작성된 라이브러리를 발견했는데, 그게 오늘 설명할 mermaid.js이다. Mermaid.js https://mermaid.js.org/#/ Mermaid | Diagramming and charting tool ..
[자바스크립트] 시간 차이 측정하기 요약 기본 원리: 함수를 이용, 시각을 2번 측정한 후 뒷 시간에서 앞 시간을 뺀다. 함수명 반환 타입 지원 정밀도 지원 환경 Date.now( ) number ( 정수 ) ms 노드, 웹 process.hrtime.bigint( ) bigint ns 노드 performance.now( ) number ( float ) ms~ns(유사) 노드, 웹 Date 객체 https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Date Date - JavaScript | MDN JavaScript Date 객체는 시간의 한 점을 플랫폼에 종속되지 않는 형태로 나타냅니다. Date 객체는 1970년 1월 1일 UTC(협정 세계시) 자..