만쥬의 개발일기
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..

article thumbnail
[Docker] - 배포 서버와 개발 환경의 Platform이 다를때 : The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) ...
🛠️TOOL/🐳Docker 2024. 1. 17. 16:14

문제 상황 개발환경에서 DockerHub에 Docker 이미지를 푸시하고, 배포서버에서 pull해서 사용하려고 하자 실행시 WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested 와 같은 에러가 발생했다. 이는 개발환경은 WSl2 Ubuntu (linux/amd64) 이고, 배포 서버는 linux/arm64 아키텍처이기 때문이다. 따라서 로컬에서 docker image를 빌드 시, 해당 아키텍처용 이미지를 만들어주어야 한다. 이를 위해선 docker buildx가 필요한데, buildx란 다..

article thumbnail
[Project] - Web Sublink Crawler for Dynamic Web
📑Project , 대외활동 2024. 1. 10. 17:47

목표: Dynamic Web도 크롤링 가능한 Web Sublink Crawler 제작 요구사항 불특정 다수의 웹사이트의 하위 링크를 모두 찾는다. SPA에도 통용되어야 한다. 시간이 너무 오래걸려선 안된다. 모듈화 가능하게 제작한다. 첫 번째 시도 : SEO 크롤러 사용 Screaming frogm, Moz 등 다양한 SEO 크롤러 활용 SPA가 아닌 웹사이트의 경우 모든 하위링크를 잘 찾는 모습이다. 여기서는 대략 266개의 하위 링크를 찾았고, 시간은 대략 3분 정도가 걸렸다. SPA의 경우는 하위링크를 잘 찾지 못하는 것으로 확인되었다. 장점 : 사용이 쉽다 SPA가 아니라면 모든 링크를 잘 찾는다. 단점 : 유료 플랜이 있다. 시간이 오래걸린다. SPA의 경우 하위 링크를 찾지 못한다. 두 번째 ..

article thumbnail
[SSH] - MobaXterm을 통해 원격 서버 SSH 접속 후 vscode로 작업하는 법
🛠️TOOL 2024. 1. 10. 13:53

MobaXterm을 사용해야 하는 이유 원격 서버에서 작업해야 할 경우 대부분 연결을 ssh로 하게 되었는데, 기존에는 로컬에서 작업 ➡️ git에 push ➡️ 원격 서버에서 pull 로컬에서 scp프로토콜을 이용해 파일 전송 등의 방식을 사용하였고, 크게 불편함을 느낀 적이 없었다. 그러나 서버측에서 간단한 수정만을 하거나, 리눅스 서버에 데스크탑 환경이 깔려있지 않음 + 위 두가지 방법을 사용 못하는 경우엔 꼼짝없이 vi로 코딩을 해야만 했다. 나의 경우는 원격 서버 내의 파일들이 필요하지만 전부 로컬로 옮길 수 없는 방대한 양인데다가, 기존 코드 자체가 해당 데스크탑의 폴더 구조를 기준으로 짜여져 있기 때문에 반드시 추가 작업을 해당 원격 서버 환경에서 해야만 했다. 따라서 SSH로 접속하고, 해..