본문 바로가기
항해99/WIL

[항해 99] WIL 3주차 - 주특기 입문, 주특기 숙련 (후기)

by lucian 2022. 7. 31.

서론

  • 7.29 - 주특기 숙련 주차 시작
  • 아침 9시 ~ 저녁 9시까지 하루 총 12시간(+알파)

일정

  • 7.22(금) : 주특기 입문 주차 팀 배정 및 OT
  • 7.22(금) ~ 7.28(목): Node.js 팀, 개인 과제 진행
  • 7.29(금) : 주특기 숙련 주차 팀 배정 및 OT
  • 7.29(금) ~ 7.30(토): JS언어 Node.js런타임, express 프레임워크, MongoDB, MySQL 개인, 팀 프로젝트 진행

 

주특기 입문

  • 개인 프로젝트 (JS언어로 Node.js와 express.js를 이용하여 글 작성/수정/삭제 기능 및 댓글 작성/수정/삭제 기능 구현)
  • 팀 프로젝트 (Javascript에 대해 중요한 점 찾아서 넣기)
  • Node.js, express.js, mongoDB, Thunder Client, RoBo 3T 로 서버를 구현하기 시작함
  • 아직 GET과 POST로 DB에서 불러오거나 넣는 기능만 구현 중(로그인, 회원가입은 불가능)
  • JavaScript 프로토타입을 이제 좀 알 것 같다. 왜 함수형이라 했는지, 여기서 객체가 뭔지 이 함수와 객체의 프로토타입연관성은 무엇인지!

 

주특기 숙련

  • 개인 프로젝트 (JS언어로 Node.js와 express.js를 이용하여 회원가입/로그인/로그인 인증/ 글 작성/수정/삭제 기능 및 댓글 작성/수정/삭제 기능 구현)
  • 팀 프로젝트 (ORM, ODM이 뭔지, IIFE와 require()의 관계, 라우터와 미들웨어는?)
  • Node.js, express.js, DB(mongoDB,MySQL), Sequelize 로 서버를 구현하기 시작함
  • JWT token 사용. header, payload, verify signiture / 토큰을 만들거나 인증함.
  • mongoDB의 mongoose, Joi와 MySQL의 sequelize를 이용해서 각 DB에 정보를 넣고 로그인/회원가입 구현

배운점

Javascript

  • 프로토타입 : 객체의 유전자
    - 기본 함수는 생성자 함수가 될 수 있다.(안되는 함수도 있음. IIFE, 화살표 함수 등)
    - 함수가 정의된 시점에 함수의 프로토타입이란 객체가 생성되는데, 이 것을 우리는 생성자함수.프로토타입이라 부르겠다.
    - 생성자함수.프로토타입프로퍼티로 constructor를 갖는데 이 프로퍼티는 자신의 생성자 함수를 가리킨다. 또한 객체이기 때문에 객체.프로토타입을 상속받는다. 그래서 객체.프로토타입 안에 프로퍼티나 메서드를 사용할 수 있다.
    - 생성자 함수는 JS엔진에서 우리 몰래 프로퍼티를 넣어놨는데 prototype이란 프로퍼티(변수)이다. 이 변수가 생성자함수.프로토타입을 가리키고 있다.
    - 생성자함수로 생성된 객체는 생성자함수.프로토타입을 상속받는다. 왜냐면 생성자함수.프로토타입객체이기 때문에 (함수를 상속받을순 없으니 생성자함수로 만든 인스턴스는 생성자함수.프로토타입을 상속받는것....)
    - 이 생성자함수로 생성된 객체를 인스턴스라 하고 이 인스턴스는 __porto__라는 프로퍼티(변수)로 생성자함수.프로토타입을 가리키고 있다. 또한 상속을 받기 때문에 생성자함수.프로토타입 안에 있는 프로퍼티나 메서드를 사용할 수 있다.
    - 결국 인스턴스의 부모는 생성자함수.프로토타입이고, 조상은 객체.프로토타입이다.
      인스턴스 ---> 생성자함수.프로토타입.  ----->  객체.프로토타입
      우리는 이것을 프로토타입 체인이라 부른다. 체인  상에 있는 있으면 연결되어 자신의 조상에 잇는 프로퍼티나 메서드를 사용할 수 있게 된다.
  • 동기/비동기 : 저번주까지 비동기/동기를 잘못알고 있었듯 하다. 순서대로 즉 스택이라 생각하면 편한 것 같다.
    스택은 A가 먼저 들어오고 B가 들어오면 나갈때는 무조건 B가 먼저 나가야한다. 이것이 동기이다.
    하지만 비동기는 A가 먼저 들어와도 A 먼저 끝낼 수 있다.
  • 블로킹/논블로킹 : 제어권을 생각하면 편하다. A와 B가 있는데 A가 하다가 B에게 제어권을 넘겨주면(블로킹) A는 하는 행동을 모두 멈춰야한다. 하지만 제어권을 주지 않으면(논블로킹) A는 A의 일을 하고 B는 B의 일을 한다.

    - 동기/블로킹 : 사장이 출근한 후 직원이 일을 하면 사장은 아무것도 안하다가 직원 일이 끝나면 사장은 그 때서야 일을 하고 퇴근한다.
    - 동기/논블로킹 : 사장이 출근한 후 자신의 일을 하면서 직원도 동시에 자신의 일을 한다. 중간중간 직원에게 일 끝냤나고 물어보면서 일을 한다. 직원이 일을 다 끝내면 그제서야 자신이 하는 일을 멈추고 퇴근한다.
    - 비동기/블로킹 : 사장이 출근한 후 직원이 일을 하면 사장은 아무것도 안하다가 직원 일이 끝나면 사장은 그때서야 일을 하고 퇴근한다.
    - 비동기/논블로킹 : 사장이 출근한 후 자신의 일을 하고 직원도 자신의 일을 한다. 사장은 일을 끝내 퇴근했고, 직원은 마저 일을 끝내고 보고서를 사장자리에 제출하고 퇴근한다.

    동기/블로킹비동기/블로킹은 결국 같다. 왜냐면 블로킹이 제어권을 넘겨주면 다른 것은 일을 못하는데 비동기/블로킹은 제어권을 넘겨주었기에 비동기임에도 일을 못하는 불상사가 발생해 동기/블로킹과 같은 현상이 일어난다.

Node.js/ Express.js

  • Restful API : 클라이언트와 서버가 통신하는데 이를 알기 쉽고 표준화되고 안전하게 표현하는 방법이다.
    자원을 이용해서 어떻게 할것이다를 잘 정의한 것이다. 여기서 자원은 URL, 어떻게는 METHOD를 말한다.
    - 무상태(Staetless) : 한번 보낸 요청과 응답을 서버는 저장하지 않는다. 즉 클라이언트가 보내준 것에 과거나 미래를 예견하지 않고 요청한 것만 맞춰서 보낸다.
    - 캐시 가능성(Cacheable) : 첫번째 통신 이후 두번째 통신을 할 때, 같은 데이터를 또 보낼 때가 있다. 데이터량이 적으면 상관이 없지만 만약 크다면 다시 보내는데 오래 걸릴 것이다. 이를 피하기 위해 클라이언트는 첫번째 응답 후에 큰 데이터를 브라우저에 저장한다.
    - 계층화 시스템 : 클라한테 요청받은 것을 서버는 요청을 다른 서버로 전달할 수도 있다. 이렇게 계층적으로 여러 서버에서 실행하도록 할 수 있다. 결국 클라이언트는 응답을 내가 보냈던 서버에서 받게 된다.
    - 온디맨드 코드 : 서버에서 받은 데이터로 클라의 기능을 일시적으로 확장하거나 사용자 지정할 수 있다.

  • package.json : npm (node package manager)로 npm init을 시작하면 현재 폴더안에 어떤 라이브러리가 설치되어 있는지 표시해준다. === 스냅샷? 같은 역할
    또한 라이브러리를 추가하면 package.json파일에 라이브러리 이름이 등록이 되고 이는 추후 다른 os체제에 갔을 때 이 스냅샷을 기준으로 관련된 패키지를 os에 맞게 설치해준다.

나의 생각과 이야기

  • 체력의 한계가 오고있다... 잠을 자야하는데 매일 5시간 4시간정도 자는 것같아서 죽을 것 같다.
  • 점차 어려워지고 있다. 저번주까지는 그래도 이해하면서 조금의 여유가 있었지만, 숙련주차가 되면서 이해하면서 진행하는데 시간이 꽤 걸린다. (체력적으로지치고 있어서 그런가?)
  • 강의가 너무.. 강의는 참고용으로 하고 학습강의 위주로 보라는데 학습강의에 처음 보는 코드가 있으면 설명도 없다. 강의를 보면 몇개는 설명을 해주는데 대부분은 설명이 없긴 하다. 강의자료, 강의의 퀄리티가 점점 떨어지고 있다.
  • 강의자료/강의를 똑같이 실행해도 할 때마다 오류가 발생한다....
  • 내 코드에 대한 피드백을 해주셨으면 좋겠다. 현직에서 어떤 방식으로 쓰고 있는지 좀 더 발전할 부분이 무엇인지 알려줬으면 좋겠다.
  • 사실 이 글도 볼지 의문이다.. ㅋㅋㅋㅋ

댓글