본문 바로가기
Dev/javascript

노드 교과서 강의 정리.zip

by 혜옹쓰 2021. 11. 14.

장장 124강짜리 노드 교과서 강의를 모두 끝냈다..!

https://www.inflearn.com/course/%EB%85%B8%EB%93%9C-%EA%B5%90%EA%B3%BC%EC%84%9C/dashboard

어찌보면 자바스크립트도 막 배워서 마스터도 못한 내가 처음으로 정식으로 듣게 된 강의인데,

매 시간마다 강의와 다른 에러를 만나며 수정하는 개발의 참맛..^^ (이라고 현직 개발자가 그랬음) 을 조금은 깨닫게 된 것 같다..

 

오늘은 첫 섹션 코드부터 쭉 훑으며, 강의들을 정리하고 버전 차이 등 강의에서 나오지 않은 에러를 어떻게 해결했는지 정리하려고 한다!


가장 먼저 섹션 1에서는 자바스크립트에 대한 강의가 이루어졌다. 자바스크립트도 배운 지 얼마 되지 않았던 나로서는 처음부터 집중할 수 있었던듯! 특히 이벤트 루프에 대한 부분을 많이 강조하셔서, 아이패드로 슥삭거리며 공부해땅.

엥 근데 다시보니 이게 무슨말인지?

섹션 2~3 에서는 정말 간단하게 http 패키지로 서버 여는 법, module.exports로 파일간 모듈 사용하는 법, 많이 사용되는 노드 내장 모듈들을 배웠다. 거의 한 개나 두개? 정도의 파일로 강의를 진행했기 때문에 그리 큰 에러가 생기지 않았다. 비전공자로서,, 세션과 쿠키에 대한 부분에서 조금 어려움을 겪었지만ㅋㅋㅋㅋ

섹션 4~5에서는 npm 에서 패키지를 다운받아 사용하거나 배포하는 법에 대해 배웠당. 아마 여기서 처음으로 강의와 다른 에러를 만났던 것 같은데, npm publish 를 했을 때 403 에러가 발생하는 부분이었다! 강의에서는 배포용 패키지 이름이 중복됐을 때 에러가 날 수 있다고 했는데, 이름 문제는 아니었고, 이메일 인증을 안해서 발생한 에러였당..ㅎ

 

섹션 6부터 본격적으로 폴더 구조를 잡아가며 express 를 사용하기 시작했다! ~대장정의 시작~

일단 폴더 구조는 크게 CSS파일을 담아두는 public, 라우터들을 따로 분리해놓는 routes, html 파일들을 담아두는 views, 데이터 베이스와 관련있는 schemas 나 models, 개발과 배포 환경을 설정하는 config, 로그인 로직 설정하는 passport 등이 있다. 비밀번호나 키 등을 보안하기 위한 dotenv도 따로 파일로 추가!

특히 라우터, 미들웨어 사용하는 부분이 좀 어려웠는데, 순서에 유의하면서 작성하니까 조금 이해됐당. 에러 처리 미들웨어와 next 중요하다는 것도 체크! 끝 부분에 템플릿 엔진으로 퍼그나 넌적스도 배웠는데, 사실 프런트에 대한 지식도 거의 없고 html 도 잘 모르는 나로서는 이래저래 따라하기에도 어려웠당..프런트 강의는 요즘 구름에서 듣고있는데, 이것도 정리해야지ㅣ!

 

섹션 7부터는 데이터 베이스를 활용하는 강의였당. MySQL을 노드에서 사용할 수 있게 해주는 시퀄라이즈에 대해 배웠는데, 따로 schemas 폴더에 각 테이블에 해당하는 구조를 잡아 파일을 작성하고, 이 때 다른 테이블과의 관계를 정의하는 부분이 정말 어려웠다.. 

sequelize.query 로 raw 쿼리를 바로 보낼 수 있다고 했는데, 강사님은 슥 말하고 넘어가셨지만 MySQL이 조금 더 익숙한 나로서는 이 방법이 더 편할 수도 있겠다 라는 생각이 들기도 해따...

섹션 8은 MySQL 과 다른 NoSQL 의 몽고디비에 대한 강의였는데, 몽고디비와 함께 컴파스를 같이 설치했다. 강의는 기본적으로 윈도우로 진행하기 때문에 컴파스 설치에서 애를 먹었다ㅠㅠbrew 로 설치하라는데 brew는 항상 내 말을 한 번에 알아듣는 적이 없었기 떄문에,,..그리고 다른 강의에서 추천해준 몽고디비 홈페이지에서 AWS 연결해서 사용하는 방법이 조금 더 편하기도 했다ㅋㅋㅋㅋ카페에서 접속하면 ip를 추가해 주는 부분이 귀찮긴 해도!

섹션 9에서부터는 실습에 들어갔다. node bird 라고 SNS 페이지를 만드는 실습! 여기서는 특히 디비 구조 잡는게 어려웠다..! 테이블이 고작 4갠데 관계 설정 하다가 kijul...

  static associate(db) {
    db.User.hasMany(db.Post); // User - Post 간 일대다 관계
    db.User.hasMany(db.Domain);
    db.User.belongsToMany(db.User, { // User - User 간 다대다 관계. 중간테이블 설정
      foreignKey: 'followingId', // 같은 테이블간 관계 설정이 여러번 일 때 Id 헷갈리지 않기 위해 foriegnKey 설정 
      as: 'Followers', // foreignKey 와 as 는 반대의 관계가 되어야 함! 
      through: 'Follow',
    });
    db.User.belongsToMany(db.User, {
      foreignKey: 'followerId',
      as: 'Followings',
      through: 'Follow'
    });
  }

이 챕터부터 에러가 상당히 많이 났는데,,.. 기본적으로 가장 많이 만났던 에러가 TypreError! 이 에러의 10의8은 내가 타이핑을 잘못 한 것이 많았ㅆ다...^^ 에러로그 잘 보면 어떤 파일에 몇번째 줄인지 확인하고 오타가 없는지 확인해준다!

호옥시 정말 오타가 없는데 왜 타잎에러가 나는지 모르겠다면, 난 그 근처에 있는 모든 함수나 라우터에 다 콘솔 로그를 찍어줬다ㅋㅋㅋㅋ 가끔 객체가 언디파인드로 떠서 에러가 나는 경우도 있어서, 언디로 뜨는 객체가 있다면 왜 언디로 뜨는지 다시 그 함수를 쪼개보고...하다보면 해결되더라! (물론 걸리는 시간은 책임 안 짐!^^)

 

섹션 10에서는 API 에 대한 강의가 진행됏다! 내가 노드를 처음 접하게 된 것도 API 서버 구축때문이었기 떄문에 조금 수월하지 않을까 했는데, 네..아니었고요

앞에서 만든 노드버드의 API 를 이용하는 노드캣이라는 서비스를 만들어서 실습해봤다. 인증과 토큰 부분에서 징허게 에러가 많이 났고,,ㅠㅠ 기본적으로 강의에서 사용하는 bcrypt 가 M1 맥북에서 설치와 사용이 안된다는 문제가 있어서 bcryptjs 패키지로 대체했는데 다행히 사용법이나 사용 결과는 모두 같았다!

 

섹션 11에서는 jwt 와 UUID 를 배웟다. 기본적인 백엔드 서버 구축은 가능하다고 보고 보안에 더 집중한 강의를 해 주신 것 같았다! 또 cors 패키지로 에서 예방하는 법도 배웠고.. 백엔드에서는 서버 이용자들을 위해 수정사항이 생기면 새로운 버전의 파일을 만든다는 실무적인 팁도 얻을 수 있었던 섹션!

또 jest 를 이용해서 서버를 열기 전 테스트를 해서 QA를 거치는 법 까지 배울 수 있었는데, 마지막 부하 테스트는 정말 아무리 해도 해결이 안돼서.... 터미널에서 npx artillery quick 명령어가 아예 먹질 않아서 부하 테스트는 넘어갈 수 밖에 없었당,,..

 

섹션 12는 웹소켓 이용! 실시간으로 클라이언트와 서버 간에 양방향 데이터 전송을 위해 사용한다고 하는데, git 채팅방을 만들어 실습해봤다. 사실 양방향 데이터 전송...지금까지 해왔던 서버와 뭐 어떻게 다른건지 개념적인 자세한 설명은 없어서 (내가 책은 안사고 강의만 들어서 그런가) 아직 개념적인 부분이 긴가민가 하긴 하다..!

추가로, 버전 문제로 구글링 해서 수정한 부분의 코드를 살짝 남겨본당!

const currentRoom = socket.adapter.rooms[roomId];
const currentRoom = socket.adapter.rooms.has(roomId); // 구글링해서 수정함..

 

섹션 13은 경매 프로그램 실습! 요정도 부터는 앵간한 에러도 익숙하고 그래서 큰 어려움 없이 강의를 들었던 것 같은 느낌...? 앞선 채팅방과 다르게 서버에서만 데이터를 주기적으로 클라이언트에게 보내주어야 하는 서비스이므로 (서버시간을 기준으로 경매를 하는 등) 웹소켓이 아니라 서버센트 이벤트를 활용했다. 또 서버가 켜져있을 때 알아서 코드를 실행해주는 스케쥴러 관련 코드도 짜보았는데, 서버가 꺼지면 의믜가 없어지기 때문에 운영체제 자체 스케쥴러를 이용하는걸 더 추천하신다고 한다!

 

섹션 14는 앞선 강의들과 다르게 서비스를 실습하는건 아니고, CLI 프로그램을 만들어보는 강의였다. GUI와 반대개념으로, 백엔드에서는 더 자주 사용한다고! 리눅스와 맥을 위한 주석을 처리해줘야 한다는 점이 쪼꼼 귀찮다는 점 말고는 큰 어려움 없었던 강의였던 것 같다 .. 하나의 program 에 command, usage, option 등 하나하나 지정해줘야 한다는게 귀찮했던것도 빼야겠네... 여기서도, 강의에서는 if (args) 만 써도 인식하던것을 if (args.args.length) 로 써야한다는게 달랐는데, 이건 패키지 자체의 버전이 달라진 이유라는데 나도 자세히는 알아내지 못했다ㅠㅠ또, 강의에서는 package.json 파일의 script 를 이름만 바꿔서 계속 사용하던데, 나는 수정해도 계속 이전의 명령어만 입력해서 "cli": "./index.js" , "cli_tmpl": "./template.js" 이렇게 아예 새로운 명령어를 만들어서 사용했다

 

섹션 15~16은 AWS 와 배포에 대해 배웠다! 코드를 짜는 부분은 많이 어렵지 않았는데, AWS Lightsail 을 우분투로 사용하는 부분이 자꾸 막히고 해결 방법도 안나오고 해서 머리를 많이 쥐어뜯었던...^^ 결국 AWS는 따로 더 공부해야겠다고 하고 따로 파일을 압축해서 업로드 하는 방법을 사용했다..이 부분 때문에 AWS 자격증도 뽐뿌와서 바로 홈페이지에서 학습코스 신청한건 안비밀! 


 

정리해보니 뭔가 쉽고 간단해보이는데, 개인적으로 너무 맨땅에 헤딩이었다는 생각과 동시에 우당탕탕 배우긴 했구나 라는 생각이 드는 강의였다..! 다음으로는 풀스택 강의를 들어야 겠다는 다짐을 하며! 나는 또 코드 리뷰 하러 갑니다😇