Category 회고

Typescript의 함수 반환에 대한 생각

Typscript로 개발을 하다가 함수의 return type과 관련하여 궁금증이 생겨서 멘토분께 질문을 드렸었다. 좋지 않은 질문이었음에도 훌륭한 답변을 해주셔서 그 안에 많은 긍정적인 사고를 할 수 있었다. 새로운 지식을 배웠으니 이를...

FE와 BE간의 페어프로그래밍 및 회고

⚠️ 개인적인 의견이 잔뜩 담겨 있는 글이며, 생각을 담은 글이기에 글이 다소 정리되지 않았으며 옳지 않은 부분이 있을 수 있습니다.

부스트캠프 웹·모바일 7기 회고

약 5달간의 여정이 끝났다. 웹에 관해 아는 것이 전혀 없던 내가 어떻게 두려움도 없이 이 곳에 올 선택을 할 수 있었을까. 부스트캠프에 지원하기로 했던 결심은 내 개발 인생에서 가장 크고...

Category Trouble Shooting

[Nestjs] 정적 모듈에서의 환경변수 사용

NestJS에서는 dotenv 등의 외부 라이브러리가 아닌 내장된 ConfigModule를 통해 환경 변수를 접근할 수 있도록 해주는데. .env 파일을 삽입해두면 하위 모듈에서 이를 process.env 식으로 접근하여 환경 변수를 사용할 수 있다.

Category Nestjs

Typescript로 커스텀 에러 정의 및 사용하기

에러 정의를 “커스텀화”해서 얻고 싶은 것

[Nestjs] Socket Server에서 disconnect 감지하기

부스트캠프에서 팀원들과 SleepyWoods라는 실시간 WebSocket 서비스를 만들었을 때, Socket.io를 사용했었다. 이번 글에서는 간단하게 클라이언트의 disconnect를 감지하는 부분을 구현해보자.

[Nestjs] 정적 모듈에서의 환경변수 사용

NestJS에서는 dotenv 등의 외부 라이브러리가 아닌 내장된 ConfigModule를 통해 환경 변수를 접근할 수 있도록 해주는데. .env 파일을 삽입해두면 하위 모듈에서 이를 process.env 식으로 접근하여 환경 변수를 사용할 수 있다.

Category Socket

[Nestjs] Socket Server에서 disconnect 감지하기

부스트캠프에서 팀원들과 SleepyWoods라는 실시간 WebSocket 서비스를 만들었을 때, Socket.io를 사용했었다. 이번 글에서는 간단하게 클라이언트의 disconnect를 감지하는 부분을 구현해보자.

Category Crawling

Selenium을 이용한 동적 크롤링

회사에서 필요한 데이터를 수집 및 가공하는 과정에서 python으로 크롤링을 하게된 적이 있었다. 이 때 다양한 문제들을 접할 수 있었는데, 그 과정에서 얻어낸 정보들을 정리하기로 결심했다.

Category Selenium

Selenium을 이용한 동적 크롤링

회사에서 필요한 데이터를 수집 및 가공하는 과정에서 python으로 크롤링을 하게된 적이 있었다. 이 때 다양한 문제들을 접할 수 있었는데, 그 과정에서 얻어낸 정보들을 정리하기로 결심했다.

Category BoostCamp

토큰 인증 과정에서 취약성 개선을 위한 고민

항상 기계적으로 구현했던 인증 부분에 관해서 어느날 의문이 들었다. 우리는 어떤 공격을 방어하기 위해 이러한 절차들을 마련해둔걸까? 과연 JWT 토큰 기반의 인증은 안전한걸까? 정리해보자.

인증과 인가를 위한 Nestjs의 Guard

NestJS에서는 인증 부분을 Guard를 통해 쉽게 구현할 수 있다. 우리는 현재 두 가지의 Guard를 사용하고 있다. 두 가지의 Guard의 이름을 criticalGuard와 looseGuard로 지었다.

편리하지만, 안전해야하는 인증 과정

SleepyWoods 서비스는 웹 게임 기반의 SNS로 개인화된 경험 및 데이터가 잘 지켜지는 것이 중요하다. 편리하지만, 안전하기도 한 회원 인증 서비스를 구현하기 위해 고민했던 부분을 정리해보자.

Typescript의 함수 반환에 대한 생각

Typscript로 개발을 하다가 함수의 return type과 관련하여 궁금증이 생겨서 멘토분께 질문을 드렸었다. 좋지 않은 질문이었음에도 훌륭한 답변을 해주셔서 그 안에 많은 긍정적인 사고를 할 수 있었다. 새로운 지식을 배웠으니 이를...

FE와 BE간의 페어프로그래밍 및 회고

⚠️ 개인적인 의견이 잔뜩 담겨 있는 글이며, 생각을 담은 글이기에 글이 다소 정리되지 않았으며 옳지 않은 부분이 있을 수 있습니다.

Category Typescript

Typescript로 커스텀 에러 정의 및 사용하기

에러 정의를 “커스텀화”해서 얻고 싶은 것

토큰 인증 과정에서 취약성 개선을 위한 고민

항상 기계적으로 구현했던 인증 부분에 관해서 어느날 의문이 들었다. 우리는 어떤 공격을 방어하기 위해 이러한 절차들을 마련해둔걸까? 과연 JWT 토큰 기반의 인증은 안전한걸까? 정리해보자.

인증과 인가를 위한 Nestjs의 Guard

NestJS에서는 인증 부분을 Guard를 통해 쉽게 구현할 수 있다. 우리는 현재 두 가지의 Guard를 사용하고 있다. 두 가지의 Guard의 이름을 criticalGuard와 looseGuard로 지었다.

편리하지만, 안전해야하는 인증 과정

SleepyWoods 서비스는 웹 게임 기반의 SNS로 개인화된 경험 및 데이터가 잘 지켜지는 것이 중요하다. 편리하지만, 안전하기도 한 회원 인증 서비스를 구현하기 위해 고민했던 부분을 정리해보자.

Typescript의 함수 반환에 대한 생각

Typscript로 개발을 하다가 함수의 return type과 관련하여 궁금증이 생겨서 멘토분께 질문을 드렸었다. 좋지 않은 질문이었음에도 훌륭한 답변을 해주셔서 그 안에 많은 긍정적인 사고를 할 수 있었다. 새로운 지식을 배웠으니 이를...

Category 인증

토큰 인증 과정에서 취약성 개선을 위한 고민

항상 기계적으로 구현했던 인증 부분에 관해서 어느날 의문이 들었다. 우리는 어떤 공격을 방어하기 위해 이러한 절차들을 마련해둔걸까? 과연 JWT 토큰 기반의 인증은 안전한걸까? 정리해보자.

인증과 인가를 위한 Nestjs의 Guard

NestJS에서는 인증 부분을 Guard를 통해 쉽게 구현할 수 있다. 우리는 현재 두 가지의 Guard를 사용하고 있다. 두 가지의 Guard의 이름을 criticalGuard와 looseGuard로 지었다.

편리하지만, 안전해야하는 인증 과정

SleepyWoods 서비스는 웹 게임 기반의 SNS로 개인화된 경험 및 데이터가 잘 지켜지는 것이 중요하다. 편리하지만, 안전하기도 한 회원 인증 서비스를 구현하기 위해 고민했던 부분을 정리해보자.

Category NestJs

인증과 인가를 위한 Nestjs의 Guard

NestJS에서는 인증 부분을 Guard를 통해 쉽게 구현할 수 있다. 우리는 현재 두 가지의 Guard를 사용하고 있다. 두 가지의 Guard의 이름을 criticalGuard와 looseGuard로 지었다.

편리하지만, 안전해야하는 인증 과정

SleepyWoods 서비스는 웹 게임 기반의 SNS로 개인화된 경험 및 데이터가 잘 지켜지는 것이 중요하다. 편리하지만, 안전하기도 한 회원 인증 서비스를 구현하기 위해 고민했던 부분을 정리해보자.

Category 문진

Turborepo에서 commonjs 라이브러리 생성

라이브러리를 commonjs 기반으로 생성해야하는 이유

백엔드, 프론트엔드와 API 타입 공유하기

타입 공유를 선택한 계기 백엔드에서 API들을 구현하면서 다양한 API 타입들을 정의하게 되었다. 이 때, 프론트엔드와 백엔드에서 사용하는 타입을 공유하기로 결정했다. 이를 통해 다음과 같은 이점을 얻을 수 있었다. 타입 안정성...

[문진] 모노레포 적용기 (feat. Turborepo)

모노레포를 결정한 이유 기존의 불편함 현재 문진 웹서비스의 개발 팀원은 백엔드 개발자인 나와 프론트엔드 개발자인 윤하님 두명으로 구성되어 있다. 기존에 같이 토이 프로젝트를 진행하면서 백엔드와 프론트엔드를 분리하여 개발했었는데, 다음과 같은...

Category Turborepo

Turborepo에서 commonjs 라이브러리 생성

라이브러리를 commonjs 기반으로 생성해야하는 이유

백엔드, 프론트엔드와 API 타입 공유하기

타입 공유를 선택한 계기 백엔드에서 API들을 구현하면서 다양한 API 타입들을 정의하게 되었다. 이 때, 프론트엔드와 백엔드에서 사용하는 타입을 공유하기로 결정했다. 이를 통해 다음과 같은 이점을 얻을 수 있었다. 타입 안정성...

[문진] 모노레포 적용기 (feat. Turborepo)

모노레포를 결정한 이유 기존의 불편함 현재 문진 웹서비스의 개발 팀원은 백엔드 개발자인 나와 프론트엔드 개발자인 윤하님 두명으로 구성되어 있다. 기존에 같이 토이 프로젝트를 진행하면서 백엔드와 프론트엔드를 분리하여 개발했었는데, 다음과 같은...

Category 모노레포

Turborepo에서 commonjs 라이브러리 생성

라이브러리를 commonjs 기반으로 생성해야하는 이유

백엔드, 프론트엔드와 API 타입 공유하기

타입 공유를 선택한 계기 백엔드에서 API들을 구현하면서 다양한 API 타입들을 정의하게 되었다. 이 때, 프론트엔드와 백엔드에서 사용하는 타입을 공유하기로 결정했다. 이를 통해 다음과 같은 이점을 얻을 수 있었다. 타입 안정성...

[문진] 모노레포 적용기 (feat. Turborepo)

모노레포를 결정한 이유 기존의 불편함 현재 문진 웹서비스의 개발 팀원은 백엔드 개발자인 나와 프론트엔드 개발자인 윤하님 두명으로 구성되어 있다. 기존에 같이 토이 프로젝트를 진행하면서 백엔드와 프론트엔드를 분리하여 개발했었는데, 다음과 같은...

Category 트러블슈팅

[문진] 모노레포 적용기 (feat. Turborepo)

모노레포를 결정한 이유 기존의 불편함 현재 문진 웹서비스의 개발 팀원은 백엔드 개발자인 나와 프론트엔드 개발자인 윤하님 두명으로 구성되어 있다. 기존에 같이 토이 프로젝트를 진행하면서 백엔드와 프론트엔드를 분리하여 개발했었는데, 다음과 같은...

Category Type-safety

백엔드, 프론트엔드와 API 타입 공유하기

타입 공유를 선택한 계기 백엔드에서 API들을 구현하면서 다양한 API 타입들을 정의하게 되었다. 이 때, 프론트엔드와 백엔드에서 사용하는 타입을 공유하기로 결정했다. 이를 통해 다음과 같은 이점을 얻을 수 있었다. 타입 안정성...

Category npm

NPM Package 배포하는 법

모노레포 환경에서 개발을 하다보면 자체적으로 라이브러리나 패키지를 구현할 때가 많다. 이러한 라이브러리를 다른 프로젝트들에서도 사용하려면 NPM으로 배포하는 것도 좋은 방안이 될 수 있다. 본 글에선 NPM에 내 라이브러리를 배포하는 방법을...

Category pm2

PM2를 이용하여 무중단 배포를 해보자

Node 기반으로 서비스 환경을 구성했을 땐 무중단 배포를 위해 프로세스 관리 도구인 PM2를 많이 쓰게 된다. 해당 글에선 PM2가 어떤 동작을 하여 무중단 배포를 하는지, 또한 어떻게 구성하는 지를 정리해보자....

Category 배포

PM2를 이용하여 무중단 배포를 해보자

Node 기반으로 서비스 환경을 구성했을 땐 무중단 배포를 위해 프로세스 관리 도구인 PM2를 많이 쓰게 된다. 해당 글에선 PM2가 어떤 동작을 하여 무중단 배포를 하는지, 또한 어떻게 구성하는 지를 정리해보자....

Category DB

Soft Delete VS Hard Delete

우리 서비스에 어떤 것이 더 좋을까?