본문 바로가기

Web/Node.JS

패스트캠퍼스 챌린지 최종 후기

Fast campus Logo

 

Fastcampus_Node.js 수강 목록

 


 

패스트캠퍼스 작심 30일 챌린지를 마치며...

 

처음에는 NodeJS를 배우기 위해 어떻게 해야할까 고민을 많이 하였다.

그러던 중 인터넷 강의를 하나 찾아서 들으면 어떨까 하는 생각이 머릿속을 스쳐갔다.

그래서 이곳 저곳의 강의를 찾던 중 FastCampus의 NodeJS 강의를 발견하게 되었다.

 

물론 다른 여러 사이트들의 강의들을 찾아보며 어느 강의를 수강할지 고민하였다.

그 강의들 중 실무경험을 중심으로 NodeJS에 가르치면서

공부의지가 조금 부족한 나에게 강제로 공부할 수 있게(?) 도와주는 이벤트를

FastCampus에서 진행하고 있어 바로 수강신청 하였다.

 

이 작심 30일 챌린지라는 이벤트를 통해 매일 조금씩이나마 공부를 하며

앞으로 어떻게 공부를 할지 고민하는 계기가 되었다.

(물론 다른 일들을 처리해야되서 지금은 잠시, 진짜 잠시 쉬고있다.)

 

오늘은 그동안 배운 내용에 대해 간략히 복습해보며

강의 수강을 통해 어떤점이 좋았는지 작성할 예정이다.

 

Nodejs - 효율적인 개발을 위한 도구 설치

 

그렇게 배운 첫번째 NodeJS 강의!

첫번째 강의에서는 NodeJS를 학습하기 전에

소스코드를 효율적으로 작성할 수 있도록 도와주는 ESLint와 Prettier라는 포매터에 대해 학습하였다.

 

여러 사람들이 협업해서 개발할 경우 모두 저마다의 규칙을 가지고 개발하느라

코드의 일관성이 없어진다.

이때 ESLint와 Prettier를 통해 일관된 코드를 작성할 수 있도록 규칙을 정할 수 있어

유지보수성이 좋은 코드를 작성할 수 있다.

 

그리고 Javascript의 기본적인 문법과 중요한 개념인 callstack, closure, 그리고 async에 대한

동작구조와 사용 예시 등을 통해 학습하였다.

NodeJS도 결국 script이기때문에 기본적으로 Javascript에 대한 학습이 기본적으로 되어있어야

NodeJS를 통해 기능을 구현할 수 있다.

아래 문단에 Javascript에 대해 학습한 내용을 작성할 예정이니 Javascript는 이정도로 넘어가고.

 

또한 요즈음 많이 관심을 받고 있는 TypeScript에 대해서도 학습하였다.

Typescript도 일반적인 Javascript에서 사용이 가능하지만 수강하는 과정이 NodeJS지 않은가.

npm을 통해 Typescript 개발을 도와줄 패키지를 설치하여

//@ts-check를 통해 Typescript 문법을 사용하였다.

 

물론 이러한 기능들을 사용하려면 NodeJS의 패키지를 관리하는 npm을 통해서

ESLint, Prettier, Typescript 관련 패키지들을 설치해야 한다.

 

첫 강의에서는 NodeJS를 구현하기 위한 기본적인 개념들과

협업과 일관성을 위한 도구들에 대해 학습하고 사용하는 방법에 대해 실습을 하며

기본적인 개념을 다시 다지는 좋은 계기가 되었다.

 


 

그럼 Javascipt에서 무엇을 배웠나?

 

기본적인 문법들을 배운것도 있지만 이번 강의를 통해 가장 좋았던 점은

Event 처리가 어떻게 동작하는지 학습하고, 관련 개념에 대해 제대로 학습한 것이다.

 

Nodejs - 노트를 활용한 EventLoop 학습

 

먼저 Javascript는 이벤트가 발생하면 Event Loop를 통해 Main Thread를 실행한다.

그리고 호출된 함수들을 Call Stack이라는 공간에 쌓아두고 하나씩 꺼내면서 이벤트를 처리하게 된다.

 

이때 앞으로 실행할 Callback을 쌓아두는 공간을 Callback Queue라고 하며,

이벤트 발생 시 Main Thread에게 알려주기 위해 Callback을 사용하는 것이다.

Callback을 사용하여 처리하는 이벤트의 대표적인 예로는 파일 처리 완료 기능이나 네트워크 작업 완료,

그리고 타이머 호출 기능 등이 Callback을 사용한다.

 

Event Loop에 대해 조금 더 설명하자면,

Callback Queue에서 이벤트를 하니씩 꺼내 Callback Stack에 적재한다.

그리고 Callback Stack에 있는 이벤트를 하나씩 꺼내 실행하게 된다.

이러한 동작구조를 통해 Script의 이벤트가 처리된다.

 


 

그리고 또 중요한 개념은 Scope와 Closure다.

이 두 개념 역시 기본적인 개념이지만 매우 중요하다.

Scope는 말 그대로 범위이다.

변수를 하나 선언했을 때 그 변수가 어느 범위까지 영향을 미치는지를 의미한다.

 

Javascript에서 Lexical Scope를 통해 Binding이 이루어지는데

이는 내부 function에서 외부 function의 변수에 접근할 수 없음을 나타낸다.

또한 Javascript에서는 Block Scope의 개념이 있는데

이는 같은 이름으로 변수를 중복해서 선언하면 서로 다른 객체로 인식한다는 것이다.

주로 Let과 Const를 통해 변수를 선언할 때 Block Scope의 대상이 되며,

var를 통해 이름이 같은 변수를 중복으로 선언하면 이는 Block Scope의 대상이 아니므로

두 변수를 같은 객체로 인식한다는 점을 알아두자!

 

그록 Closure는 Function과 Environment를 합친거라 할 수 있다.

여기서 Environment는 함수에 접근할 수 있는 모든 Scope을 의미하며

Function이 하나 생길때마다 Closure가 하나씩 생성된다

특히 Closure는 Higher-order Function을 만드는데 매우 유용하다.

 


 

Nodejs - JSON Stream 처리

 

그리고 본격적인 NodeJS에 대한 학습!!

앞에서 기본적인 Javascript 문법과 개념을 설명하였으면

이제 NodeJS의 다양한 개념들과 간단한 예제 작성을 통해 학습하는 시간이다.

 

패스트캠퍼스의 강의에서 NodeJS를 학습할 때 가장 먼저 배우는 내용은 파일 간의 참조관계를 설정하기 위한 require와

Node의 패키지 매니저인 NPM에 대해 먼저 설명한다.

특히 npm의 경우에는 개발을 위해 필요한 패키지를 설치하거나 실제 Product 코드를 작성하기 위해

다양한 패키지들을 설치할때 사용된다.

NPM에 대해서는 별도로 학습을 해보고!

 

챌린지 기간 중 그래도 중요하다고 생각되는 내용은 바로 Stream이다.

Stream은 NodeJS에서 제일 중요한 Datatype 중 하나인데,

스트리밍이 가능한 소스로부터 핸들러에게 데이터를 잘게 분리하여 전송하는 기능을 담당한다.

여기서 잘게 분리된 데이터를 Chunks라 부른다.

 

Stream의 정의를 통해 아마 바로 눈치챈 사람들도 있을 것이다.

바로 Stream은 대용량의 데이터를 처리하거나 비동기적으로만 데이터를 처리할 수 있을 때 매우 유용하게 쓰인다.

대표적으로 대용량 파일을 압축한다거나 네트워크를 통해 입력을 비동기적으로 받는 경우를 들 수 있다.

 

이러한 역할을 해주는 Stream에는 4가지 종류가 있는데,

Readable은 말그대로 Stream으로부터 데이터를 읽는 역할을 담당한다.

대표적으로 서버의 경우 HTTP를 통해 요청을 읽는, 클라이언트의 경우 서버로부터 전달받은 응답을 읽는 기능을 한다.

두번째로 Writable은 Stream을 통해 데이터를 출력하는 역할을 담당하며,

Readable과 반대로 서버의 경우 HTTP 응답을 쓰거나, 클라이언트의 경우 서버에게 전달할 HTTP 요청을 작성하는 기능이 있다.

 

세번째로 Duplex는 Readable과 Writable의 역할을 수행하는 것으로, TCP Sockets과 zlib stream, crypto stream 등이 있다.

마지막으로 Transform은 입력받은 Stream을 변환하여 새로운 Stream으로 만드는 역할을 수행하며,

Duplex의 zlib stream과 crypto stream이 여기에도 해당된다.

 


 

그리고 챌린지 마지막 1주 정도는 아마 실무에서 가장 많이 쓰일 것으로 예상되는

Rest API에 대해 학습하였다.

 

Nodejs - Rest API를 활용한 홈페이지 작성 실습

 

Rest API는 서버와 클라이언트 간의 데이터 전송에 대한 규칙을 정한 것으로,

사용자가 필요로 하는 데이터를 서버로부터 전달받기 위해 HTTP 요청을 어떻게 해야하는지,

그리고 서버는 데이터를 어떤 형태로 전달해줄 것인지 규약을 정하는 것이다.

 

NodeJS를 통해서도 Rest API를 구현할 수 있으며,

어떻게 구현할 수 있는지 강의의 예제를 따라하며 Rest API에 대해 학습하였다.

물론 NodeJS의 개념을 활용해서!

 

일반적인 Javascript의 경우 요청이 들어왔을 때 처리하는 Function들을 호출하여

데이터를 전송하면 된다.

NodeJS도 Javascript 기반이므로 당연히 Function을 통해 구현하면 된다.

하지만 NodeJS에는 Middleware라는 개념이 존재한다.

 

Middleware는 Request가 들어왔을 때 이를 처리하기 위해 거치는 모든 Function들을 의미하며,

Function 간 연관성이 없으면 Middleware의 의미가 없어진다.

그래서 특정 Function에서 데이터를 처리한 후 다음 미들웨어에 데이터를 전달해줌으로써

Function 간 연관성을 만들어준다.

여기서 작업이 끝났으니 다음 Middleware를 실행하기 위해 next라는 함수를 활용하여 데이터를 전달하게 된다.

 

이 Middleware와 NodeJS의 Express, 그리고 Router라는 중요한 개념을 이용하여 위의 실습 이미지와 같은

HTML Page를 만들어 보았다.

 

Rest API를 통해 데이터를 주고받는 기능을 조금 더 학습하여

추후 Rest API를 구현할 때 학습한 내용을 활용해보아야겠다.

 

물론 이 외에도 HTML 구조나 CSS를 적용할 수 있도록 템플릿을 활용하여 구현하는 방법과 에러를 핸들링하는 방법,

그리고 기능 테스트를 위해 패키지를 설치하고 Test Code를 작성해보는 등

실무에서 도움이 될만한 다양한 강의들을 수강하였다.

 


 

이번 30일 간 학습한 내용은 아직 NodeJS의 초반 강의들이라 깊게 공부하지는 못했지만

NodeJS의 학습에 대한 흥미를 끌어내기에는 충분하였다.

실무에서 웹프로그래머로써 Java를 통해 구현한 내용들을 NodeJS를 통해 구현해보면서

Script를 통해 조금 더 효율적으로 기능을 구현해볼 수 있겠다는 생각이 많이 들었다.

 

요청을 서버에 전달하고, 서버는 DB에 요청해서 데이터를 받아 마사지하고,

그걸 또 클라이언트에 전달하는... 얼마나 비효율적인 작업인가... 하는 생각이 들었다.

물론 그동안 해왔던 일이기때문에 잘 동작만 하면 OK이지만!

 

그럼에도 굳이 BackEnd 영역에 요청을 전달하지 않고 Node를 통해 직접 DB의 데이터를 읽어

사용자에게 바로 전달할 수 있는 것을 보며

남은 NodeJS 강의를 꾸준히 학습해서 기존의 기능들을 조금 더 효율적으로 처리할 수 있도록

개선을 해봐야겠다는 목표가 생겼다.

 

혹시나 나처럼 '뭔가 NodeJS에 대해 공부는 해보고 싶은데 어떻게 공부할지 모르는' 사람이 있다면

강의를 통해 학습해보는 것도 좋은 방법인것 같다.

물론 사람마다 강의가 도움이 되기도, 안되기도 하지만 실무 경험을 바탕으로

강사는 어떻게 Coding을 하는지 그리고 어떤 기능들을 어떻게 많이 사용하는지

배워볼 수 있어 자신의 역량을 키우는데 도움이 될것이라 생각한다. 

 


- 패스트캠퍼스 URL : https://bit.ly/37BpXiC

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.