만쥬의 개발일기
article thumbnail
[Docker] - Docker 개념 정리 및 예제로 보는 작동 원리
🛠️TOOL/🐳Docker 2024. 1. 22. 13:44

본 포스트는 Docker에 대해 더 이해하기 위한 글입니다. 개요 도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다. 서비스 관리자는 도커라이징(Dockerizing) 된 컨테이너가 어떤 런타임을 필요로 하는지, 어떤 라이브러리와 코드를 필요로 하는지 전혀 알 필요가 없다. 다시 말해, 도커를 사용하면 OS 환경설정, 언어, 라이브러리, 시스템 도구 등이 설치된 환경을 그대로 이미지로 빌드할 수 있다. 그저 컨테이너를 어딘가에서 가져와서 서비스를 운영할 컴퓨팅 환경에서 실행하기만 하면 된다. 실행된 서비스는 컴퓨팅 환경과 독립된 가상의 환경에서 실행되며, 일관된 결과를 보장한다. Docker는 VS Virtual machine 혼동하기 쉽지만, Docker는 virtual machine과는 아예 다른 개..

article thumbnail
[PostgreSQL / Trouble Shooting] PostgreSQL 에러 로그 확인 및 해결법(psql: error: could not connect to server: No such file or directory )
🛠️TOOL/🐘PostgreSQL 2024. 1. 22. 11:41

개발환경 linux ubuntu 20.04 문제 상황 postgre 서버를 실행하고, psql로 접속을 시도하자 다음과 같은 에러가 발생했다. psql: error: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? 포트 개방 여부 확인 그래서 먼저 다음 명령어로 포트가 열렸는지를 확인했는데, 포트도 열려있지 않았다. (포트 설정은 /var/lib/postgresql/{version}/main/postgresql.conf 에서 확인가능) sudo lsof..

[Docker] - 컨테이너 종료 안될 때 : Error response from daemon: cannot stop container: 8b25ecab3b40: tried to kill container, but did not receive an exit event
🛠️TOOL/🐳Docker 2024. 1. 17. 17:58

가끔가다 docker rm이나 docker stop 같은 명령어들이 먹통이 될때가 있다. rm 같은 경우는 docker rm -f 등의 명령어로 해결될 때가 있으나, docker stop같은 경우는 그냥 docker service를 재시작하는 것이 건강에 이롭다. systemctl restart docker 단, 재시작 시 실행 중인 컨테이너들이 종료되어 docker ps -a에서 확인할 수 있다. 그 중 항시 실행시켜줘야 하는 컨테이너들은 다시 docker start로 실행 시켜주자. reference https://stackoverflow.com/questions/70434777/cannot-kill-container-container-id-tried-to-kill-container-but-did-n..

article thumbnail
[Java] - log4j2를 이용한 로깅 설정

최근 가장 많이 하는 생각이 어떻게 해야 로그와 예외 처리를 잘 할 수 있을까에 대한 고민이다. 자바에는 여러 로깅 라이브러리가 있는데, 그 중에서 오늘은 log4j2를 사용해 로깅 설정을 해보자. log4j2는 다음 표에서 알 수 있듯이 Multi Thread 환경에서 비동기 로거의 경우 다른 로킹 프레임워크보다 많은 처리량과 짧은 대기 시간을 제공한다. 마침 멀티쓰레딩 프로그램에 사용할 예정이기에, 아주 적합하다고 볼 수 있다. 개발환경 Plain java java17 wsl2 - ubuntu18.04 의존성 추가 먼저 최신 log4j2에 대한 의존성을 build.gradle에 추가해준다. dependencies{ . . implementation 'org.apache.logging.log4j:log..

article thumbnail
[Docker] - Docker Volume이 필요한 이유와 로컬 저장 위치
🛠️TOOL/🐳Docker 2024. 1. 17. 17:44

Docker Volume을 설정하는 이유는 여러가지가 있다. host disk의 일정 부분을 Docker에 할당하여 컨테이너가 종료될때 데이터가 손실되지 않도록 로컬에 백업하려고 하는 목적, Docker의 log나 outputfile 등의 결과물을 컨테이너로 접속하지 않고 확인하는 등등 여러 필요성이 있다. |그렇다면 host disk가 할당한 Volume의 실제 위치는 어디있을까? 리눅스의 경우 다음 명령어를 통해 확인 가능하다. docker volume inspect (volume 명) 위와 같이 Mountpoint가 바로 실제 볼륨의 위치인데, 바로 해당 위치로 이동하려고 하면 권한 문제가 생긴다. 이는 docker 경로와 볼륨에 대한 권한을 주어야 하는데, 다음 명령어들로 권한을 준 뒤, 접속해보..

article thumbnail
[Puppeteer / Trouble Shooting] puppeteer가 좀비 프로세스를 종료하지 않는 문제

puppeteer로 만든 프로그램을 돌리는 중, chromium 브라우저가 종료되지 않는 문제가 발생했다. 다음 명령어로 chromium 창이 몇개 떠 있는지 확인해보자. pgrep chromium | wc -l 949개?! 엄청난 메모리 손실을 유발하고 있었다. 지금은 겨우 버티고 있을지 몰라도, 언제 서버가 다운될 지 모르는 상황이다. ps -ef로 확인을 해보니, 좀비 프로세스로 끝도 없이 남은 모습.. 분명히 browser.close()를 해준 것 같은데 왜 좀비로 남은 걸까? 그 이유는 try catch문으로 감싸서 브라우저를 닫아줄 때, try문에만 browser.close를 적어주었기 때문이다. 이미 브라우저를 켠 상태에서 error가 날 경우 프로그램이 종료되며 해당 브라우저는 좀비 프로세..

[Javascript] - Winston을 사용하여 node.js에서 로깅하는 법

자바스크립트 코드 작성시 로거의 필요성을 느껴 Winston이라는 라이브러리를 사용해 로깅을 해보자. 모듈 설치 npm install winston --save npm install winston-daily-rotate-file --save npm install moment npm install app-root-path Logger.js 작성 const appRoot = require('app-root-path'); // root 경로를 가져오기 위해 사용 var winston = require('winston'); // log 파일 작성 require('winston-daily-rotate-file'); // log 파일을 일자별로 생성하기 위해 사용 const moment = require('mome..

article thumbnail
[Shell] - oh-my-zsh 설치
🛠️TOOL/📄Linux 2024. 1. 17. 16:19

개발환경 : AWS ec2 - ubuntu 18.04 터미널을 보기 좋게 쓰기 위해 개발환경에 oh-my-zsh를 설치해보자. zsh 설치 sudo apt install zsh -y 기본 쉘을 zsh로 변경 chsh -s /bin/zsh 만약 여기서 변경이 안되고 chsh:PAM authentication failed 오류가 발생했다면, 다음 순서를 따라하고 다시 쉘을 변경해준다. 1.chsh 설정 파일을 vim으로 접속 sudo vim /etc/pam.d/chsh 2.해당 파일의 auth required pam_shells.so 주석처리 oh-my-zsh 설치 sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/too..