즐코

express 의 router 기능과 session 모듈 사용 본문

NodeJS

express 의 router 기능과 session 모듈 사용

YJLEE_KR 2022. 2. 11. 00:15

1/ 코드의 분리

2/ express의 router 기능

3/ session 모듈 사용

1/ 코드의 분리

 

디자인 패턴 - 코드를 분리하는 디자인 MVC

Model (특정 데이터를 담는 변수 - 객체나 배열 등)

View (화면 표현 - html)

Controller (M과 V를 컨트롤 하는 파일)

 

디자인패턴 MVC에 기반해서 우리는 코드를 효율적으로 분리해야한다.

 

처음 게시판/로그인 구현 시 모든 라우터, 미들웨어를 다 server.js에 다 때려박았다.

지금은 전반적인 로직을 배우기 위해 만든 초간단 사이트이므로 코드도 그다지 길지 않았고, 나혼자 보는 코드니까 코드별 기능 분간이 쉬웠다.

 

하지만, 실제 사이트는 코드 양이 방대하고, 팀원들이 각자 분업해서 코드를 작성할 것이다.

근데 이 때 한 파일을 여러명이 다 건드린다면? 얼굴 붉히는 일이 많아질거다:-(

 

그래서, 오늘은 미들웨어, 즉 컨트롤러 부분을 따로 분리하는 걸 배웠다.

협업 시 서로의 코드가 영향을 받아 생기는 에러도 적을 것이고, 디버깅하기도 수월할 것이다.

그리고 나름대로 업계내(?) 코드 분리 패턴/규격이 있기에 낯선 파일이어도 짐작이 가능해 유지보수에도 좋지 않을까

 


 

2/ express의 router 기능

 

기본적으로 router는 따로 빼줄 때 express의 함수 Router()를 이용한다. 

Router() 함수를 실행한 결과물이 router라는 변수에 담긴 것

그 결과물들이 결국은 router를 만들어주는 객체이자 함수 인 것이다.

 

 

이 router는 라우터를 실행시키는 게 아니라, 라우터 자체를 만들 수 있는 객체인 거다.

 

 

위에서 router를 출력해보면, router를 2개 썼기 때문에,

router라는 함수 객체 안에, stack이라는 키의 값으로 Layer라는 객체가 2개 생긴다.

 

 

router라는 객체를 따로 빼서 파일을 만들고,
서버를 실행시키는 server.js 파일에서 이걸 가져다가 쓰는 게 라우터 분리이다.

라우터에 들어가는 인자값들을 만들어주는 게 router.get('/',(req,res)=>{res.render('index'})
라우터 분리 후 서버 파일은 app.use(router)

 


3/ session 모듈 사용

 

저번 수업에선 session을 이용한 로그인 구현을 얼추 해보았는데, 그건 개념을 이해하기 위한 차원에서 해본 약간 허술한 작업이었다. 이번 수업에선 라이브러리를 쓰는 걸 배웠다. 훠어어어어얼씬 편했다.

 

그 라이브러리가 바로 express-session memorystore 

npm install express-session memorystore 

내 npm은 맛이 갔기 때문에 yarn add express-session memorystore 로 설치 완.

package.json 에서 제대로 깔렸는지 더블쳌

 

 

이때 이 session은 하나의 미들웨어이다.

 

왜냐면, 서버는 클라이언트가 사이트를 접속할 때마다 모든 페이지에 대한 응답을 하기 전에 사용자의 신원확인 및 상태유지를 위해 이 쿠키값을 계속 확인해줘야한다. 근데 이걸 모든 페이지의 라우터에 적용하려면, 미들웨어들 쪽에 계속해서 중복된 코드가 들어갈 것이다. 그래서 따로 외부 라이브러리로 빼준게 이 express-session이다. 

 

사용할땐, app.use(session(객체인자)) 이렇게 쓰는데, 

근데, 저기 session() 의 인자로 값이 하나 들어가는데 내용이 좀 긴 형태의 객체가 들어간다.

그래서 우선 따로 빼서 변수에 담아주자. (익숙해지면 그냥 저 안에 넣어도 된다)

 

// 그 안에는 크게 3가지 부분을 기본적으로 설정한다고 보면 된다.

 

1. 암호화에 대한 부분 (최대한 겹치지않게 string을 조합해서 암호화)

2. 서버에서 세션 저장할 공간 지정 (메모리 또는 하드디스크 또는 mysql 또는 DB에 저장할거냐.. 우리가 선택)

   우린 우선은 메모리에 대한 라이브러리를 설치했으니 메모리에 저장할 예정 (memorystore)

3. 쿠키의 디테일 설정 (쿠키의 유효기간(maxAge), 쿠키가 쓰일 범위 등)

 

우선, 외우자..

 

반복하자면, app.use(session(sessionObj)) 는 내부에 next()가 있는거고 그렇기 때문에 항상 실행될거다.
무슨 용도로? 세션이라는 객체를 만들어주는 용도로! 

즉, 미들웨어에서 요청(req) 객체의 session속성으로 설정된다.
그래서, 미들웨어 내부에서 req.session 이런 식으로 사용할 수가 있다.
아주 편리한 애다.

 

세션 사용하는 세팅은 끝!

 

이걸 이용해서 세션 로그인 기능 구현 + 라우터 분리하기는 다음 포스팅에 정리할 거다

 

 

 

Comments