express.js 또는 nodejs로 서버 운영 하시는 분들 조언을 받고 싶습니다.

김제연   
   조회 4026   추천 0    

nodejs 및 expressjs 를 사용하여 웹서비스를 만들었습니다. 

처음 하는거라 버그가 없을래야 없을수가 없는데 .. 요즘은

웹팩을 사용해서 번들링 하고 한번 다운 받아가면 새로 고침 하기전까지 

아무것도 받지 않고 ajax 를 통해서만 데이터들이 왔다갔다 해서 

첫 로딩만 약간 걸릴뿐 장점이 있는걸로 알고 있습니다.. 

그런데 막상 시작 해보고 나니 .. 프로덕션 모드로 서버를 실행하고 

 <p> 테스트 </p>로 되어잇는걸 <p> 테스트2</p> 로 고치고 

웹서버를 재시작 해도 ... 사용자 컴퓨터에서는 바뀐것을 감지 하지 못하고 

새로 로그인 하거나 새로 고침을 해야지만 테스트2를 볼 수 있습니다.

php 의 경우 서버사이드 렌더링이다 보니.. 서버쪽 템플릿이나 html 소스를

테스트2 로만 바꿔주면 바꿈과 즉시 변경이 되는것과 틀려서 .. 

어떻게 해줘야 하는지 감이 오질 않습니다. 프로세스 죽거나 멈추는건

pm2 클러스트 모드를 사용할 예정입니다.. 다른건 이해가 다 가는데 .. 

어떻게 업데이트를 반영하는지 감조차 오질 않고 있습니다.

그리고 express에 내장된 서버를 사용하는게 좋을지 nginx를 사용하는게 

좋을지도 조언 부탁 드립니다.

짧은글 일수록 신중하게.
크럭스 2019-03
frontend가 어떻게 구성되어있는지는 모르겠는데, 보통 cache-control 헤더를 통해 캐시가 되지 않도록 설정하거나 (대신 이렇게 하면 트래픽 부담이 있겠죠) 업데이트마다 파일명을 바꾸거나 parameter를 붙여줘서 cache invalidation 해줍니다. webpack을 쓰시는거 같으니 매 빌드시마다 파일명을 랜덤하게 생성하는 옵션이 있습니다, create-react-app 같은거 쓰셨으면 service worker가 구성되어있을수도 있는데 이러면 좀 복잡해지고요.

저는 주로 nginx를 앞단에 두고 동적 컨텐츠는 node.js로 리버스 프록시 해서 서빙하고, 정적 컨텐츠는 nginx에서 바로 서빙하게 세팅합니다. 퍼포먼스가 훨씬 낫습니다.
     
김제연 2019-03
답변 감사합니다 webpack 를 사용하고 있어서 매번 파일명은 바뀝니다 재시작하면 적용이 되는데 클라이언트에서는 reload나 브라우져를 껏다켜야 적용이 됩니다 제가 버그를 고쳐도  띄워 놓은 사용자는 버그가 그데로 남아있어 고민입니다
          
크럭스 2019-03
혹시 새로고침 안해도 클라이언트 상에서 바로 바뀌는걸 원하시는건가요? 그건 PHP를 써도 똑같을텐데요. 굳이 구현하려면 websocket으로 서버단에서 업데이트 되었다는걸 push 하고 해당 신호를 받으면 클라이언트에서 location.reload() 하도록 구성하면 됩니다만...

아니면, js css 등이 다 바뀌더라도 html은 캐시가 남아있을 수 있습니다. 전 그래서 html 파일은 캐시가 되지 않도록 서버상에 설정해둡니다.

제일 간단한건 크롬에서 개발자도구 열고 네트워크 탭에서 새로고침시 어떻게 뜨나 확인해보세요.
               
김제연 2019-03
사용자가 A페이지를 보고 있고 .. B페이지에 버그가 있어서
B페이지를 고치면.. php 의 경우 B페이지가 서버사이드 렌더링이라 그때그때 요청하는데
vue.js 는 한방에 js 를 받아가지고
A에서 B로 넘어가도 ... 새로 요청을 하지 않고 .. 이전 버전 그대로 보여줘서요

개발자 도구에서도 .. 서버에서 .. webpack 으로 빌드 다시 하고 ..
서버 재시작 한 뒤에도 .. 페이지 이동이나 뭔가를 눌러봐도 ..
js 를 다시 가져오지 않습니다

재접속이나 refresh 외에는요.
                    
크럭스 2019-03
Vue.js로도 server side rendering 구현이 가능하고, 많이 씁니다.

말씀하신 문제를 해결하려면 위에 적은것처럼 websocket 등을 사용해 동적 업데이트를 구현하거나, 아니면 server side rendering을 구현하시면 됩니다.

SEO 생각하면 server side rendering이 훨씬 유리하니 그쪽을 추천드리고 싶네요.
                    
크럭스 2019-03
                         
김제연 2019-03
답변 감사 합니다.. 알려주신것 기반으로 열심히 찾아보겠습니다.
                         
허인구마틴 2019-03
감사합니다
이것 쓰려고  마음부터 준비중입니다
아주 멋져요
Ray 2019-03
*비밀글입니다
     
김제연 2019-03
*비밀글입니다
          
Ray 2019-03
*비밀글입니다
               
김제연 2019-03
npm run dev 는.. 개발용이라 핫 리로딩은 잘 되서 .. 개발은 잘 했습니다.
문제는 dev모드로 서비스 할 수 없으니
프로덕션에서
pm2 + nginx 로 윗분이 말씀하신데로 프록시로 사용 예정이구요 ..
pm2 로 실행 -> 사용자 접속 -> 버그 발견 수정 -> 웹팩 리빌드 -> pm2 재시작
이렇게 해도 .. 이전 버전으로 계속 서비스 되는게 문제 입니다..
                    
Ray 2019-03
*비밀글입니다
                         
김제연 2019-03
답변 감사 합니다.. 알려주신것 기반으로 열심히 찾아보겠습니다.
박경원 2019-03
당연히 클라이언트쪽 캐시가 비워지고 새 데이터를 받아야 반영이 되죠
그런데 프로덕션 환경에서 왜 코드를 수정하시나요?
그런걸 원하시면 프론트엔드는 vue-cli를 쓰시면 수정하는 족족 바로 반영이 됩니다. 그걸 빌드해서 프로덕션으로 배포하시면 되고요
     
김제연 2019-03
네 프로덕션 환경에서 코드를 수정하는게 아니구요
프로덕션 환경으로 배포 했다가 .. 버그가 발견되면..
수정해서 웹팩으로 빌드한뒤.. 서버를 재실행해도 ..
기존게 그대로 실행되고 있어서 질문 드렸습니다.
          
박경원 2019-03
위에 pm2를 쓰신다고 하셨는데
pm2 restart 말고 pm2 delete 뒤 다시 시작시켜보세요
제 기억에 두 개가 달랐던것 같네요
               
김제연 2019-03
현재 pm2 는 안쓰고 있고 .. 사용 예정 이구요 ..
npm run build 해서
만든뒤
npm start 해서 .. 시작해서 하다가 ..
수정할꺼 수정해서
다시 빌드 한뒤에
npm start 다시 실행 해도 .. 반영은 안되고 있는 상태 입니다.
클라이언트에서 재접속 또는 f5 해야 가능.
                    
박경원 2019-03
프로덕션이니 클라이언트가 F5 해야하는건 당연한거죠
서버는 요청받은 라우트에 대해 html 파일 렌더링해서 던지면 자기 할 일 끝입니다
웹소켓 같은걸로 뭘 짜지 않는한 계속 클라이언트를 추적하면서 자기가 재시동 되었다고 클라이언트에 알림을 하고 하지는 않아요
                         
김제연 2019-03
네 .. 알고 있습니다.. 근데 제가 말씀드리는건
A페이지를 그대로 보고 있는 상황에서 핫 리로딩 같은 기능을 원하는게 아니구요 ..
라우팅을 변경 해도 ... 자체가 js 로 spa 처럼 처리가 되어서 ...
다른 페이지들로 왔다갔다 해도 변경이 안되어서 여쭈어 본겁니다.
                    
박경원 2019-03
서버 업데이트하고 클라이언트에선 다른곳으로 가는 링크를 클릭하면 업데이트가 반영된채로 보이는게 아니라
SPA면 라우트를 뷰-라우터가 담당하니
새로 빌드된 js파일 자체를 한 번 더 받아와야 합니다. 보통 / 라우트를 get 할때 html css js 다 받아오잖아요 그걸 한 번 더 해야되요
                         
김제연 2019-03
네 .. 상황이 그렇다 보니 refresh 또는... 접속을 끊고 다시 접속 해야만 하나 보더라구요
dev모드에서 .. 핫리로딩 쓰다가... 프로덕션 모드로 하니까 ..
답답하네요 ㅋㅋ 바로바로 바뀌어야 좋은데..


QnA
제목Page 1406/5723
2014-05   5233657   정은준1
2015-12   1760085   백메가
2017-11   3333   원상현
2017-11   4924   어훕
01-15   705   최딴따라
2012-09   6177   회원K
2014-06   8802   권희석
2014-06   7757   차평석
2021-08   2825   sungsung
2009-07   6078   cb400
2020-04   2474   강프로
2014-07   5707   user
2021-08   3432   공백기
2023-03   2333   전설속의미…
02-11   567   븍띤
2009-08   6259   ging
2016-10   5263   전설속의미…
2020-04   2731   거니스트
2023-03   2119   Chobo01
2009-08   6777   차평석
2009-08   7579   한명훈
02-21   969   쿵짝쿵짝