Nest js 독학 삽질 일기: Day 1 ~ 폭풍 구글링.. 구현 목표 세우기, DB 만들기, 오류 해결방법: 네트워크 레이어 순서대로 접근하기

Dorito·2022년 9월 14일
0

NestJS

목록 보기
1/10
post-thumbnail

일단 Express에 대해서 살짝 맛보기만 하고 왔다.
이제는 진~짜 간단하게 nestJs를 활용해서 뭐 하나 만들어봐야지 히히
간단한 CRUD가 되는 페이지 (+ 리액트 찍먹) 만들어 볼 생각!!!

간단한 프론트도 같이 해보고 싶어서 찾아보니 리액트랑 nestjs로 블로그 만드는 법을 소개한 웹페이지를 발견했다!!


참고 페이지


요거랑 공식 문서 보구 구현해봐야지~

  • 저 페이지에서는 Mongodb를 쓰는데 나는 mySQL + typeORM을 쓸 예정이다.
    NestJs typeORM 적용하기 글이랑 공식문서 보고 해야지...
  • NestJS 기본 개념들에 간단히 적어놓은 블로그 에서는 의존성 주입, 제어의역전 개념 나옴 읽어보면 좋음
    => 대충.. MVC 패턴에서 정의한 객체들을 알아서 관리해주고 알아서 관리해주니까 맘대로 그 객체를 갖다 써도 된다~로 이해함

이때 데코레이터가 쓰인다.
Decorator 는 기능을 확장할 때 쓰일 수 있는 디자인 패턴
Injectable 데코레이터는 다른 클래스에 constructor 를 통해 이 클래스를 Inject 하기 위한 데코레이터로 DI(Dependency Injection) 기능을 사용하기 위해 쓰임
데코레이터 패턴 관련 공식 문서 보기

일단

이 페이지를 목표로 만들어 보겠습니다. (CRUD, 인증, 인가 구현, 리액트 맛보기)

저기 사이트에서는 MongoDB (MongoDB는 기존의 테이블 기반 관계형 데이터베이스 구조가 아닌 문서 지향 데이터 모델을 사용하는 교차 플랫폼 오픈 소스 데이터베이스)를 쓰는데 나는 mySQL + typeORM을 써보고 싶어서 ... 좀 더 구글링을 해봐야 할 듯

https://kscodebase.tistory.com/555?category=1282990 // Nest JS 구조

DB 구조

  1. 일단 진짜!! 간단한 구현이기때문에 테이블은 하나만 쓸듯. (현재로서는 그렇게 생각중인데 ... 너무 설계를 안하고 이야기 하고 있는건가? 근데 일단 감을 잡는게 우선이 생각하고 있기때문에 꼬!! 지금 당장은 뭐가 필요한지 잘 모르겠다.)
    저 사이트 데이터 형식이 안나와있어서.. 아래 사진에서 힌트 얻고 짜봄
  1. SQL 데이터 타입에 대해서.. 설계를 하려고 보니
    역시나 공식 문서에 잘 정리되어 있다.
  • id 데이터 타입은 uuid 같아서 어떻게 쓰는지 구글링해보니
  1. https://www.javatpoint.com/mysql-uuid#:~:text=A%20UUID%20is%20a%20Universal,according%20to%20space%20and%20time.
  2. https://dev.mysql.com/blog-archive/storing-uuid-values-in-mysql-tables/
    여기에 잘 나와있다.
  • varchar(255) 생각없이 쓰려다가 공식문서 보니까 char, varchar 같이 붙어있어서 궁금증으로 읽어봤다. 전자는 고정길이고, 후자는 가변 길이! 보통 후자를 많이 쓴다고 한다.
  • 최종
Column nameData type
iduuid
titlevarchar(255)
descriptionvarchar(255)
bodytext
authorvarchar(255)
date_postedtimestamp

이렇게 데이터 써봐야지~
가오가 있지 id 요거 int auto_increment 말고 uuid로 간다...!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Datagrip 사용해서 테이블 생성하기

일단 Datagrip 써서 만들거임 요 IDE는 어떻게 쓸거냐면..
https://www.jetbrains.com/help/datagrip/meet-the-product.html
요 공식문서를 보면서 해야함.

새로고침해도 blog 데이터베이스가 목록에 안떠서 찾아보니 해결법: ⌘; => Schemas 드가서 blog 체크해줌

create table board
      (
          id BINARY(16) primary key,
          title varchar(255),
          description varchar(255),
          body text,
          author varchar(255),
          date_posted timestamp default current_timestamp on update current_timestamp
      )


INSERT INTO  board (id, title, description, body, author)
values (UUID_TO_BIN(UUID()), 'Title 1', 'Description 1', 'This is the body of the post', 'author 1');

이렇게 테이블 형성하고, row 한개 넣어줬다.

성공적으로 만들어졌다
구글링만 시간 한세월이네..

connect ECONNREFUSED 127.0.0.1:3000 오류

참고 링크

The error ECONNREFUSED 127.0.0.1:3306 is being raised by Node.js itself, and not this module. This module passes the error through, though, from Node.js. Basically, this module is asking Node.js to create a TCP connection to 127.0.0.1, port 3306, but for whatever reason, Node.js cannot do this and raises the ECONNREFUSED error.

Unfortunately there is nothing this module can do to resolve this.

It could be an issue with Node.js (in which you can open on the Node.js issue tracker) or an issue with your MySQL server (did it restart or something?). If there is some specific things you can list to change in this module, we can re-open the issue, though.

문제 해결 접근 방법 (네트워크 계층 순서대로 확인해보기!)

  1. application layer mysql 켜져있다 확인, username, password 맞나 확인 등등.. -> how to check mysql is turned on 구글링...
  2. L4 프로세스 별로 포트가 켜져 있고 그게 어떻게 쓰고 있는지 확인하기 // mySQL이 쓰는 포트가 뭐였는지 확인
  3. L3 DNS를 뭐 쓰는지 확인 (기본: 통신사 DNS) ~ 핑 찍어보기 + 사용하는 ip가 맞는지 확인하기
  4. L2 랜 카드 확인 (물리적 오류)
  5. L1 랜선 뽑혀있는지 확인
  • 문제의 코드

문제는 내가 자의적으로 코드를 해석해서 mySQL 불러오는 포트를 3000으로 수정해놨다. 바본가;; 진짜 생각이 없는듯

3306포트라고 뻔히 다 적혀있고 답변에도 적혀있는데!! 포트 번호를 전혀 안봤다. 아주 기초를 놓친거다. 눈이 뒤로 달렸나봐 ㅎ; 항상 이런 어이없는 실수를 저지른다.
이론을 실전에 전혀 적용하지 못했고 생각이 막혀있고 막연하게 루프 아이피나 비밀번호가 틀린건가에서 더 생각이 나아가지 못했다. 솔직히 쓰면서 수치스럽다 ㅋ... 그렇지만 기록해둔다.
다음에는 이러지 말아야지. 다음에는 체계적으로 생각을 하는 습관을 길러야겠다.

0개의 댓글