사이드 프로젝트로 개발 및 운영중인 서비스에 모니터링 시스템을 적용해 보았습니다. Prometheus 를 이용하여 데이터 수집 및 저장하고, Grafana 에서 데이터를 시각화 합니다. 제가 서비스 하고 있는 서버는 NAS에서 운영되고 있습니다. Prometheus + Grafana는 Docker 컨테이너 기반으로 설치하려고 합니다. Prometheus와 Grafana를 설치하기 위해서 docker-compose.yml 파일을 다음과 같이 작성하였습니다.version: '3.7'services: prometheus: image: prom/prometheus:v2.53.2 container_name: prometheus ports: - "9090:9090" volumes: ..
요즘 생활체육 대회를 스크래핑 하는 사이트를 만들고 있습니다.대부분의 사이트는 정형화된 형식으로 대회 일자를 제공하고 있지만 특정 사이트는 아래와 같이 비정형화된 형식으로 대회 일자를 제공하고 있습니다.전국 직장 근로자들에게 생활탁구의 참여도를 높이고 건전한 여가활동은 물론 공동체 의식의 함양으로 동료 간의 화합과 건강한 직장문화를 만들어 가는데 이바지 하고 관광 단양을 전국에 홍보하여 지역발전에 기여 하는데 그 목적이 있다. 2. 행 사 개 요- 대회명 : 제1회 단양 직장대항 전국오픈탁구대회- 일 시 : 2024년 12월 14일(토) ~ 15일(일) 9시 30분- 장 소 : 단양국민체육센터- 주 최 : 단양군탁구협회- 주 관 : 단양군탁구협회- 후 원 : 단양군청, 단양군의회, 단양군체육회, 일시 ..
요즘 사이트를 하나 만들고 있습니다. 아직은 사용자가 많지 않아 집에 있는 NAS에서 운영하고 있는데요.한 대의 NAS 서버에 웹 애플리케이션과 DB 서버가 동작하고 있습니다. 사이트에 여러 생활체육 정보들이 차곡차곡 쌓여가면서 한 가지 우려사항이 생겼습니다. 그건 바로 데이터 입니다. 백엔드에서는 생활 체육 관련된 사이트들을 돌아다니면서 새로운 대회들을 스크래핑 하고, 데이터를 가공한 후 DB에 저장하고 있습니다. 이런 데이터들이 점점 많아지면서 데이터 백업에 대한 중요성 또한 높아졌습니다. 지금부터는 DB 백업을 어떻게 하고 있는지에 대해서 기록해 보려고 합니다. 우선 DB 백업 스크립트를 만들어야 합니다.db_backup.sh 파일을 만들고 아래와 같이 스크립트를 작성하였습니다.#!/bin/bash..
저는 업무 할 때 반복적인 일이 발생하면 무조건 자동화 스크립트를 만들어서 활용합니다. 여러 자동화 스크립트를 만들어 가면 확실히 중요한 업무에 더 많은 에너지와 집중력을 쏟아 부을 수 있습니다. 궁금한게 있었습니다."나는 왜 반복적인 작업들을 귀찮아 하고, 자동화를 원하는 걸까?" 이 질문에 대해 고민하다가, 제 성향이 부지런함과 효율을 중시하기 때문이라는 결론에 도달했습니다.자동화 스크립트를 만들기 위해서는 문제를 해결하기 위한 방안을 깊이 생각해야 하고, 이를 구현하기 위해 노력을 들여 프로그램을 만들어야 하기 때문입니다. 하지만 '남이 만든 그릇에 내 인생을 담지 마라' 책을 읽고 난 후 내가 자동화 스크립트를 계속 만들려고 하는 이유를 깨닫게 되었습니다.책에 아래 문장이 있습니다.p.17"게으름..
사이드 프로젝트로 스크래핑 시스템을 만들어서 운영중에 있다.원하는 사이트의 컨텐츠 정보를 주기적으로 스크래핑하여 메일이나 텔레그램으로 전송해 주는 역할을 하고 있는데 spring boot 기반으로 동작한다. 아래와 같이 매일 원하는 정보를 수신한다. 수신된 정보를 열어보면 '조회수가 높은' or '투표수가 많은' 컨텐츠 데이터를 추출하여 메일로 전송해 준다. 그럼 이제부터 스크래핑 시스템이 NAS 까지 어떻게 자동 배포되는지를 정리해 본다.스크래핑 서버는 우리집 NAS에서 기동된다. 자동 배포되는 방식코드 수정github 저장소에 pushwebhook 트리거 발생webhook 에 등록되어 있는 jenkins url로 HTTP POST 요청을 보냄jenkins 빌드 작업 시작jenkins에서 git 플러그..
pom.xml 에 여러 개의 dependency 설정을 했을 때 각 라이브러리가 참조하는 라이브러리 중 버전이 충돌하는 경우가 있다.예를 들어 다음과 같이 hystrix-core 라이브러리는 commons-logging 1.1.1 버전을 참조하고 있고httpcomponents 라이브러리는 commons-logging 1.2 버전을 참조한다. 12hystrix-core -> commons-logging:1.1.1httpcomponents -> commons-logging:1.2cs 이처럼 두 개의 서로 다른 버전을 참조하고 있을 때 maven은 root 레벨과 가장 가까운 라이브러리를 선택하게 된다.이게 무슨 의미냐 하면mvn dependency:tree 명령을 치면 pom.xml 에 선언되어 있는 의존성..
로컬환경에서 개발 할 때 가끔 패킷을 보고 싶을 때가 있다. (로컬 -> 로컬 통신)패킷 캡쳐를 할 때 대게는 wireshark를 많이 이용한다. 허나 해당 프로그램은 loopback 인터페이스에 대한 캡쳐가 불가능하다.그래서 찾아보니 RawCap 이란게 있더라http://www.netresec.com/?page=RawCap 위의 페이지에 들어가서 RawCap.exe 파일 다운로드 받고 다음과 같이 실행하면 된다.1234C:\Users\nklee\Desktop>RawCap.exe 127.0.0.1 test_catpture.capSniffing IP : 127.0.0.1File : test_catpture.capPackets : 100Colored by Color Scriptercs 실행 후 캡쳐된 tes..
아래 이미지를 참고하자.메이븐의 Lifecycle, Phase, Goal, Plugin에 대해 설명해 주고 있다.[참고 이미지] https://i.stack.imgur.com/tp88Z.jpg LifecycleMaven에는 3가지 라이프사이클을 제공하고 있다.Clean lifecycle : 빌드된 결과물 제거Default/build lifecycle : 빌드 결과물 생성Site lifecycle : Java document 결과물 생성CI 툴을 이용하여 메이븐 빌드를 할 때 mvn clean deploy 와 같이 실행하면 빌드된 결과물을 제거하고 빌드 결과물이 생성된다. Phase라이프사이클의 단계를 의미한다.Phase는 의존관계를 가지고 있다. 예를들어 mvn package 를 실행하게 되면 packa..
SQL Management 툴에서 DB접속 정보를 저장하는 방법에 대해서 알아보았다.자주 사용하지 않는 툴이라 귀찮아도 매번 서버 주소, 계정, 패스워드를 입력하였는데..이마저도 귀찮아졌다. 1.보기 > 등록된 서버 선택하면 다음과 같은 창이 나온다. 2.Local Server Groups 선택 > 오른쪽 마우스 클릭 > 새 서버 등록 선택 3.Local Server Groups 하위에 등록한 서버가 노출되게 된다.이후에는 서버 호스트, 아이디, 패스워드를 매번 넣지 않고 더블 클릭을 통해 DB에 접속할 수 있다.
이클립스 NEON 버전 설치 후 사용해 보고 있는 중이다.여러 가지 기능들 중 가장 기억에 남는 것들만 정리해 본다. Word wrap in text editorsAlt + Shift + Y소스 코드가 길어서 editor 화면을 넘어가면 개행해 준다. Commands and shortcuts to zoom in text editorsCtrl + 더하기, 빼기소스 코드의 font 사이즈를 조절할 수 있음 Automatic Save of dirty editorsPreferences > General > Editors > Autosave소스 코드 자동 저장 기능5초로 설정하고 소스 코드를 수정한 후 저장하지 않으면 5초가 되었을 때 자동 저장된다.자동 저장하는 것은 좋으나 실수로 타이핑되는 코드 까지도 저장 ..