/images/avatar.png

error log - AWS EC2의 SSH 접속이 안될 때

1 Bug 갑자기 macOS terminal에서 AWS EC2에 ssh접속이 안된다. 접속해보면 즉각적인 반응이 아닌, 오랜 시간 후 다음과 같은 메세지를 뱉었다. $ ssh -i my_key.pem [email protected] ssh: connect to host 11.111.11.111 port 22: Operation timed out Operation timed out 이라니… 찾아보니 여러 이유가 있을 수 있었다. 보안규칙에 22포트에 대한 설정이 누락되었거나, 명령어가 잘못 입력되었거나, 방화벽 설정에서 막혔다거나… 대개 구글링했을때 나오는건 Connetion timed out 이었는데 이건 너무 포괄적인 답변들이라 난감했다. 여튼 현재상황에서, 설정은 잘못된게 없었고 다른 ssh(github)로 테스트 해보니 모두 정상이었다.

error log - EC2에서 PM2 실행시 NODE_ENV 설정 명령어

1 AWS EC2에 배포를 하려하는데, 조그만 문제가 하나 생겼다. 아래 예시와 같이 .env파일을 개발, 배포 등의 목적으로 각각 나누어 코드를 작성했는데, main.ts 파일 코드 예시 if (process.env.NODE_ENV === 'production') { dotenv.config({ path: path.join(__dirname, '/../env/.env.production') }); } else if (process.env.NODE_ENV === 'develop') { dotenv.config({ path: path.join(__dirname, '/../env/.env.dev') }); console.log('process.env.NODE_ENV is ', process.env.NODE_ENV); } else if (process.env.NODE_ENV === 'test') { dotenv.config({ path: path.join(__dirname, '/../env/.env.test') }); } else { throw new Error('process.env.NODE_ENV IS_NOT_SET!!'); } 이걸 EC2에서 pm2로 프로세스를 돌릴 때 어떻게 명령을 내려야 하는가 였다.

Swagger를 이용한 백엔드의 효과적인 API명세 전달

사진출처: unsplash 백엔드가 효과적인 명세 전달 고민 Failure 그동안 진행했던 프로젝트에서 제대로 된 API 명세를 적시에 프론트측에 전달하지 못했고, 때문에 최종 출시를 앞두고 서로간의 코드 오류를 잡느라 시간적 비용이 꽤나 낭비됐다. 간단하게는 Request Body 값의 TYPE과 관련된 소통 혼선으로 겪었던 헤프닝도 더러 있었다. 어떻게 하면 좋을까? 우선은 백엔드의 입장에서 생각해본다. 명세는 코드가 만들어지면서 늘 수정될 수 있다. 때문에 명세는 코드와 함께 작업되어야 하고, API 테스트를 위해 즉각적으로 수정되어야 한다. 같은 백엔드 팀의 경우에는 직접 코드를 보기에 명세의 부족함을 보완할 수는 있다.

블로깅 플랫폼 변경: Google Blogger에서 GitHub + Hugo로

< 이미지 출처 = unsplash > github + hugo로 이사! 이전: google blogger 이전에 사용했던 블로그의 플랫폼은 google blogger였다. tistory나 naver 블로그에 비해 내가 원하는 문법의 허용범위가 더 커서 오랫동안 사용중이었다. (예를 들면 toc, 각주, MarkDown 문법과 HTML 문법으로의 글 작성 모두 지원 등…) 기술 블로그에서 하나의 문서 양이 스크롤을 필요로 한다면 특히나 필요한 것이, 바로 TOC(table of contents) 라고 생각한다. h태그를 이용한 toc의 가장 큰 장점은 전체적인 개요를 한 눈에 살펴볼 수 있고, 또한 해당 태그 부분만의 링크를 가질 수 있다는 점!

typeORM transaction에서 repository 사용하기

<사진: unsplash> transaction 구성중 Entity가 아닌 Repository 사용시 typeORM에서 transaction을 사용하는 방법은 몇가지가 있지만, 복잡한 service단의 처리에서는 아래의 queryRunner 방식이 더 적합할것 같아서 dataSource.createQueryRunner() 방식을 사용했다.1 // transaction으로 묶어주기 const queryRunner = dataSource.createQueryRunner(); await queryRunner.connect(); await queryRunner.startTransaction(); try { // feed 저장 let newTempFeed: Feed = plainToInstance(FeedDto, feedInfo); const tempFeed = await FeedRepository.createFeed(newTempFeed); //<- 문제!! // ... 추가 코드들 } catch (err) { await queryRunner.rollbackTransaction(); throw new Error(`createTempFeed TRANSACTION error: ${err}`); } finally { await queryRunner.

Node.js 백엔드TypeScript + typeORM으로 무한 대댓글 가공하기

<사진: unsplash> 기능 구현 목표 댓글, 대댓글… 대댓글 등의 무한대댓글 구조 typeORM의 Entity를 연계한 createQueryBuilder 등을 지향하며, 최대한 직접적인 QueryRunner 방식 지양 삭제 및 비공개 댓글 가림 json 출력시 불필요한 요소 제거 (특히 Date 타입에서 !! ) 가장 오랜시간을 지연시켰던 Blocker typeORM createQueryBuilder 메소드로 출력시 2023-02-14T08:55:24.090Z // ^ ^^^^ <- 거추장스럽다. 이런 식으로 나오는 문제가 있는데 꽤나 씨름했다. 우선 Entity의 Date type은 datetime이 아닌 timestamp로 했다. mySQL에서의 출력은 DB가 설치된 서버의 시간대를 따르기에