분류 전체보기
[Docker] Docker, Nginx, Node.js 환경에서 서비스 무중단 배포하기
Overview 사이드 프로젝트에서 서버를 제대로 관리하기 위해 Docker를 적용하면서 무중단으로 배포한 과정을 공유하려고 합니다.😃 전에는 Node.js 프로세스 관리 모듈로 Pm2를 사용하면서 reload 기능으로 무중단 배포를 했었는데 Docker와 pm2를 같이 사용하는 것은 권장되지 않기때문에 pm2를 사용하지 않고 nginx의 http 로드 밸런싱 기능을 이용해 무중단 배포를 진행하였습니다. 왜 Docker와 pm2를 함께 사용하는 것이 권장되지 않을까? Docker 내부에서 pm2를 실행시키는 것은 의미가 없습니다. Docker와 pm2 모두 프로세스 프로세스 관리자이며 둘 다 로그 전달, 자동 다시 시작을 수행할 수 있습니다. (pm2 자동 재시작 - Docker의 restart 옵션으로..
[Docker] Docker 호스트에 원격으로 배포하기(docker compose 이용)
Overview 사이드 프로젝트에서 서버를 제대로 관리하기 위해 Docker를 적용하면서 원격으로 배포한 과정을 공유하려고 합니다. 자료가 많아 쉽게 원격으로 배포를 할 수 있을 줄 알았는데 생각보다 어려움을 겪어서 정리하고자 글을 작성하게 되었습니다. 다음 기회에는 CI/CD도 적용해보고 싶네요 😯 맥북 기준으로 작성되었으며 docker-compose.yml 파일이 준비되어 있다고 가정합니다. 샘플이 필요하시다면 여기에서 다운로드하시면 됩니다. ❌ DOCKER_HOST 환경 변수를 설정하여 실행 docker-compose 명령 전에 DOCKER_HOST 환경 변수를 실행해주면 타겟을 지정할 수 있습니다. -H(--host) 옵션을 통해 전달해도 됩니다. DOCKER_HOST= "ssh://user@r..
[MacBook]맥북에게 5000번 포트를 빼앗겼을때 - error: bind EADDRINUSE null:5000 에러 해결
Overview 잘쓰고 있던 맥북에서 Montery로 업데이트 이후 서버 실행 시 error: bind EADDRINUSE null:5000 에러가 발생했습니다. 확인해보니 ConrolCe..가 5000번 포트를 사용하고 있습니다. sudo lsof -iTCP -sTCP:LISTEN -n -P 해결 방법 서버에서 사용하는 포트를 변경하는 방법도 있겠지만 맥 시스템 환경 설정에서 Airplay 수신 모드를 체크 해제하면 해결할 수 있습니다. 참고글 Port 5000 already in use — MacOS Monterey issue
Node.js란? Node.js 특징 정리(이벤트 기반, 논 블로킹 I/O 모델)
평소 Node.js를 이용해 백엔드를 개발했지만... NodeJS에 대해 단순히 이벤트 기반이고 비동기식이다라고 밖에 모르고 사용했었던 것 같아 자신에게 반성하며 장단점과 특징에 대해 자세하게 정리하려고 합니다. 정리하고 나니 근질근질했던 부분이 싹 가라앉는 것 같아 기분이 좋습니다. 😄 Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다. Node.js 홈페이지에서 소개하는 Node.js의 정의입니다. Chrome V8 Javascript 엔진이 무엇인지는 모르겠지만 "Jvascript 런타임"이라는 것은 이해할 수 있습니다. 즉 Node.js는 Javascript를 실행할 수 있는 환경입니다. Node.js가 세상에 나오기 전까지는 Javascript..
[MongoDB]mongoose에서 가상 필드 조회안하기, Document를 Object로 변환하기
mongoose에서 가상 필드를 사용하지 않고 조회하는 방법을 공유하려고 합니다. 더 좋은 방법이 있다면 댓글로 알려주시면 감사하겠습니다.🙏 가상 필드 조회 안 하기 아래처럼 가상 필드를 사용하고 있다고 했을 때 postSchema.virtual('totalComments').get(function (this: IPost) { return this.comments.length; }); find(). select()로 가상 필드에서 사용하는 필드를 제외시키면 에러가 발생하게 됩니다. "Cannot read properties of undefined (reading 'length')" find 끝에 lean()을 붙여주면 MongoDB Document가 아닌 Javascript Object(Plain Old..
SVN checkout시 SSL 에러 해결방법(CentOS)
CentOS 8에 SVN을 세팅하고 Checkout 도중 SSL 오류가 발생하여 6시간 삽질을 통해 해결한 내용을 공유하려 합니다. 관련된 글이 잘 나오지 않아서, 이 글을 읽고 도움이 되는 분이 있으면 좋겠습니다. 🙏 SVN 설치 우선 SVN을 설치하고 checkout 받은 과정은 아래와 같습니다. yum list installed subversion // svn 설치 확인 yum list subversion // 설치 가능 목록 확인 yum install subversion.x86_64 // svn 설치 mkdir /svn/repo cd /svn/repo svn checkout svn주소 --username="유저명" --password="암호" 디렉터리를 생성하고 checkout이 무난하게 될 거라..
공개적으로 학습하라!
개발 블로그를 운영하고 싶었지만 글을 쓸 때마다 블로그를 운영하는 목적을 찾지 못해서 글을 작성하지 못하고 있었습니다. 단순하게 하고싶어서 하는 거지!라고 하기에는 제 글 때문에 잘못된 정보가 전달될까 걱정됐고, 아무 목적 없이 글을 쓰는 거라면 노션에 적는 것과 뭐가 다르지라고 생각해서 노션에서 정리하고 있었습니다. 😂 그러던 중 우연히 공개적으로 학습하라! 라는 글을 보게 되었고 스스로 성장하기 위해 블로그를 다시 운영하려고 합니다. 공개적으로 학습하라! 아래 글은 리액트 커뮤니티에서 가장 활발한 개발자 중에 한명이라는 Shawn Wang이 작성한 개발자의 개인적 성장에 관한 글을 번역한 것입니다.Shawn은 싱가폴 출신으로 현재 뉴욕에서 생활하며 Netl velog.io 맞기 위해 끊임없이 최선을 ..
SQL, NoSQL 비교(특징, 스키마, 속도, 확장)
사이드 프로젝트에서 어떤 Database를 사용할지 고민하면서 각 차이점에 대해 알아본 내용들을 정리해보려 합니다. 잘못된 내용이 있거나 도움이 되었다면 댓글 부탁드립니다. 🙏 먼저 요약✌️ 관계형 DB의 장점 = 비 관계형 DB의 단점, 비 관계형 DB의 장점 = 관계형 DB의 단점이라고 생각하면 된다. 모두 장단점이 있기 때문에 각 특성을 파악하고 상황에 맞는 DB를 선택해야 한다. 단순히 Node.js는 MongoDB가 좋다는 생각은 잘못됐다. NoSQL은 최대한 단순하면서 많은 데이터, RDBMS는 복잡하면서 무결성이 중요한 데이터에 용이하다. 즉 금융, 결제와 같이 데이터 간 관계가 복잡하거나 무결성이 중요하다? SQL 변경에 유연해야 하거나 데이터의 양이 많거나 샤딩이 필요하다면 NoSQL 장..