+ 문제 발생개인적으로 사용하고 있는 Spring 웹 서버가 하나 있다.언제부터인가 Out Of Memory Error 가 발생하며 웹 서버가 죽어 있는 것이였다. 갑자기 애플리케이션이 죽어 버리는 것은 아니고, 몇 일이 지나서야 이런 현상이 발생했다. 가벼운 애플리케이션이고, JVM 옵션으로 -Xms1024m -Xmx2048m 를 할당했기 때문에 메모리 부족 오류는 아닐 것이다라는 생각이였다.혹시 내 애플리케이션이 메모리를 많이 사용하는지를 검증하기 위해서 모니터링 툴을 연동해 보기로 했다.Spring Boot Admin을 이용하기로 했고, 셋팅을 한 후 추이를 지켜보았다. [웹 서버 구동 즉시 현황]Heap 메모리 사용률이 600 MB 밖에 안된다.[웹 서버 구동 후 1일 23시간이 지난 후]메모리 ..
jenkins 서버에 https 인증서 작업을 하였고, 이로 인해 Github 설정의 webhook URL을 변경하게 되었다. 헌데 그 이후로 jenkins 빌드가 이뤄지지 않는 것이다. Github에 push를 하게 되면 jenkins webhook으로 빌드 시작 요청을 보내는데 jenkins 서버로부터 302 http response code를 리턴받는다. 뭐지? 갑자기 왜 리다이렉트? 원인은 어이 없는 곳에 있었다. webhook URL 마지막에 / 가 없었던 것이다. https://jenkins.xxxx.duckdns.org/github-webhook 이와 같이 접속하게 되면 https://jenkins.xxxx.duckdns.org/github-webhook/ 로 리다이렉트 된다. 이런 어이없는..
로그를 살펴 보다가 WARN o.s.b.a.m.MailHealthIndicator][87] - Mail health check failed 이런 오류를 확인했다. spring boot 에서 Google SMTP 서버와의 연결 상태를 주기적으로 체크하는데 가끔씩 이런 오류가 발생한다. 딱히 health check가 필요하지 않아 다음과 같이 설정으로 비활성화 처리했다. management: health: mail: enabled: false 위 설정이 적용된 후 서버를 재시작하게 되면 spring boot admin에 더이상 mail 상태 정보가 출력되지 않는다.
| 가독성 이란? 가독성은 코드의 첫 인상이다. 우리가 코드를 처음 맞닥드렸을 때 느껴지는 첫 인상이란게 있다. 어떤 코드는 지저분하며 복잡하고, 어떤 코드는 깔끔하고 이해하기 쉽다. 우리가 미팅을 할 때 상대방을 보면 첫 느낌이란 게 있다. 그 첫 인상이라는 것은 그 사람의 차림새, 용모, 걸음걸이, 눈빛 등으로부터 만들어진다. 코드도 사람의 첫 인상과 비슷하다. 사람과 같이 실체가 존재하진 않지만 코드 자체에서 풍겨져 나오는 기운이란 게 있다. 클래스를 잘 구성하여 역할을 분리하고 각 역할에 맞는 책임들이 클래스 내부에 캡슐화가 잘 되어 있는 것을 볼 때 그리고 논리의 흐름이 아주 자연스럽게 흘러가는 것을 볼 때 우리는 코드의 가독성이 좋다고 말한다. 즉, 유연하고 깔끔하게 잘 짜여져 있는 코드라고 ..
RFID 리더기를 이용하여 어떤 편리성을 얻게 되었는지를 기록한다. 나는 1층 공동 현관문을 들어 갈 때마다 불편함을 느꼈다. 매번 번호를 눌러야 하는 것 공동 현관문 전용 카드키가 있지만 지갑에 넣고 다녀야 하고 문을 열 때마다 지갑에서 카드키를 꺼내야 하는 것 어찌보면 별 것 아닌 행동이지만 나에게는 불편함을 주는 요소였다. 그렇다고 공동현관문을 없애 달라고 할 수 있는 것도 아니기에 방법을 찾아보았다. 인터넷을 뒤지다 보니 RFID 리더기를 이용하여 카드키를 복제 할 수 있다는 것을 알게 되었다. 그때부터 였다. 어떻게 하면 좀 더 편리하게 1층 공동현관문을 열 수 있을까? 어떻게 하면 우리집 현관문을 편하게 열 수 있을까? 카드키가 아닌 내 휴대폰과 통합하여 사용할 수 있는 방법은 없을까? 나에게..
작년까지 Google Cloud Platform을 공짜로 쓰다가 더이상 사용 할 수 없는 상황이 되어 NAS라는 것을 구매하게 되었다. 내가 구매한 제품은 Synology DS218+ 이고, 램이 2GB 였다. 만약 docker를 운영한다면 메모리를 추가적으로 설치하는 것을 권장한다. 나는 4GB를 추가해서 총 6GB로 사용 중이다. NAS를 활용하는 방법은 개개인에 따라 모두 다르다. 나같은 경우는 웹서버를 하나 운영하고 있고, 영화 음악 사진 등을 편리하게 접근하기 위한 용도로 많이 활용한다. 그리고 다양한 실험도 가능하다는 것이 매력적이다. 패키지로 제공하고 있는 docker를 이용하여 다양한 시스템을 설치해 보고 그것을 사용해 본다. 대표적으로 ntopng, guacamole 등 이다. ntopn..
스프링에서는 정적 자원 versioning을 지원해 준다.예를 들어 /static/js/jquery.js 와 같은 URL이 아닌 다음과 같은 형태의 URL을 클라이언트로 내려준다./static/js/searchBox-d7087d0b4c6023cf277f778f4e0e16f2.js 이와 같이 파일명 중간에 해쉬값을 붙여주는 이유는 무엇일까?다들 경험을 해봤을 것이다. js, css 파일을 수정하고 서버에 배포해도 특정 사용자에 대해서는 수정된 버전의 정적 파일이 적용되지 않아 웹 페이지가 정상 동작하지 않는다는 이슈들 말이다.이러한 문제는 브라우저 캐쉬때문이다.아마 /static/js/jquery.js?v=20191016 과 같이 뒤에 버전을 추가해서 이와 같은 문제점을 해소할지도 모른다. 하지만 버전을 ..
RestTemplate 사용 시 파라미터 값이 자동으로 인코딩 되는 현상을 발견하게 되었다.전송되는 URL은 다음과 같은데 파라미터 값에 특수문자들이 들어간다.http://api.com?param=ABCDE+=,$%ABCDE 이와 같이 상대 서버로 요청을 보내면 파라미터 값에 ABCDE+=,$%ABCDE 가 들어 있어야 하는데 인코딩된 값으로 전달 된다고 한다.실제 개발되어져 있는 코드를 보면 인코딩한 흔적이 없었다.구글 검색을 해보니 url 을 넘겨주는 아규먼트가 String 타입이면 URL 인코딩이 자동으로 발생한다고 설명되어져 있다.정말로 그런지 확인을 위해서 테스트 코드를 작성해 보았다.테스트 코드에 나와 있는 것 처럼 url 을 넘겨주는 아규먼트에 uri.toString() 과 같이 String..
파일을 빠르게 검색할 수 있게 도와주는 프로그램이다. 이 프로그램이 왜 유용하게 사용되는지 한번 알아보자. 어느 날 갑자기 내가 예전에 세미나 발표 자료로 썼던 문서를 찾아야 하는 상황이 발생했다. 이럴 때 우리는 어떻게 하는가? 1. 어디에 있지? 라는 생각을 한다. 2. 만약 어디에 있는지 모르면 디렉토리를 뒤지기 시작한다. 3. 그렇게 뒤지고 또 뒤지고해서 내가 사용했던 PPT 자료를 찾게 된다. 결국 파일을 찾긴 찾았지만 내 소중한 시간을 허비한 것 같다. 그래서 Listary 프로그램이 필요한 것이다. 그럼 다시 내가 Listary 프로그램을 설치해서 사용하는 유저라고 가정하에 위와 같은 상황을 다시 재현해 보자. 1. 키보드의 Ctrl 키를 두 번 누른다. 2. Listary 프로그램이 출력된..
운영중인 블로그에서 광고 수익이 발생하고 100달러 이상 도달하게 되면 다음과 같이 빨간색 영역이 활성화 된다. 광고 수익 금액을 지급 받기 위한 수단으로는 통장으로 이체 받는 것과 우편으로 수표를 전달 받는 방식 두 가지가 있는데 나는 통장으로 받는 것을 선택했다. 수표를 우편으로 받는 것에 불안한 마음이 들었기 때문이다. 통장으로 외화를 받기 위해서는 외화 통장이 필요한데 SC 제일은행이 돈을 송급 받을 때 수수료가 없다. (300달러 이하인 경우) 그래서 많은 사람들이 SC 제일은행을 이용하고 있는 추세이다. 주민등록증을 가지고 은행에 가서 "구글에서 외화를 송금 받기 위해 통장 만들러 왔다" 라고 말하면 된다. 나는 "외화 통장 만들러 왔다" 라고 했는데 행원이 혹시 구글에서 광고 수익 받는 목적..
다음과 같은 코드가 있다고 하자. @GetMapping("/completeGift") public ModelAndView completeGift() { return new ModelAndView("redirect:/"); } 사용자가 https://myservice.com/completeGift 페이지를 호출했다면 리다이렉트가 될 것이다. 우리가 예상하는 페이지는 당연히 https://myservice.com 가 될 것이다. 하지만 예상과는 다르게 http://myservice.com 페이지로 호출하게 된다. 차이점이 보이는가? 프로토콜이 달라지는 것을 알 수 있다. https 사이트에서 http 사이트로 페이지 리다이렉트 됐다. 우리는 대게 서비스를 오픈하게 되면 http://myservice.com ..
스프링에는 수많은 애노테이션들이 존재한다. 스프링을 처음 접하는 개발자 또는 다른 언어를 사용하는 개발자들이 스프링을 접했을 때 공통적으로 하는 말은 "애노테이션이 왜 이렇게 많아?" 일 것이다. 나는 스프링을 2.x 부터 사용했다. 그래서 일까? 스프링이 업그레이드 되면서 추가된 애노테이션들에 대한 거부감이 없다. 각각의 애노테이션들이 어떻게 동작하는지를 이해하고 있기에 느끼는 생각인 것 같다. 스프링을 이용해서 개발하는 사람들 대부분이 알고 있듯이 애노테이션이 어떻게 동작하는지를 잘 이해하고 있다면 큰 어려움 없이 사용할 수 있고 좀 더 간결한 코드로 개발을 할 수 있다는 장점이 있다. 간결한 코드로 개발할 수 있다? 라는 말에 의문을 가질 수도 있다. 부연설명을 하면 DB 커넥션 설정 또는 WAS ..
대게 많은 개발자들은 윈도우 OS를 사용한다.물론 나 또한 윈도우 7 64bit를 사용하고 있다. 간혹 로컬에서 Docker 테스트를 해보고 싶을때가 있는데 이를 위해서 어떻게 해야하는지 정리해 본다. 기본적으로 Docker 소프트웨어는 윈도우 버전을 제공한다.설치할 때 내가 windows 10 64bit Pro, Enterprise를 사용하고 있다면 "Docker for Windows Installer.exe" 를 설치하고 다음의 링크 절차대로 따르면 된다.https://hub.docker.com/editions/community/docker-ce-desktop-windows 어렵지 않다. 가상화 기술인 Hyper-V 기능을 활성화하고 설치만 하면 된다. 활성화 방법은 Google 에서 "Windows..
내가 관리하고 있는 티스토리의 게시물을 랜덤하게 추출해 보고 싶었다.확인해 보니 티스토리에서 이미 API를 제공해 주고 있었기에 어렵지 않게 구현해 볼 수 있었다. 내가 원하는 연동 방식은 server to server 이고 access token을 발급 받는 과정이 필요했다. access token을 발급 받으면 해당 토큰으로 server to server 연동이 가능하다. [1]먼저 OAuth 인증을 위해 클라이언트를 등록해야 한다.https://www.tistory.com/guide/api/oauth 페이지로 이동하여 "클라이언트 등록" 버튼을 클릭하자.입력폼에 서비스 URL과 CallBack 경로는 http://localhost:8080/tistoryCallback 으로 설정하였다. [2]클라이언..
I am going to share my program that I made whenever I had time.I made it using SCP command. SCP uses Secure Shell (SSH) to transfer file between client and remote server, It's fast and secure.In this article, I will show you two examples. 1. First example - copying file from several remote serverIf you need to transfer file to several remote server, You can use it below program.The program requi..
Config Server가 구축 되었으니 클라이언트 설정을 해보자. [1] 의존성 추가spring 프로젝트의 pom.xml 에 다음의 의존성을 추가해 준다.1234 org.springframework.cloud spring-cloud-starter-configColored by Color Scriptercs [2] bootstrap.yml 파일다음처럼 config server 정보를 넣어주면 된다. (config server관련 내용은 http://lng1982.tistory.com/292?category=703190 에서 확인할 수 있다.)fail-fast 옵션을 true로 하게 되면 front-service 스프링 애플리케이션 구동 시 config server의 상태를 확인한다.config serve..
It's my first time to write English article in this blog. I am going to share my program that can be executed on several linux machine. Long time ago, I wanted to execute for date command on the linux system that we manage.I accessed a linux machine repeatedly.It was difficult for me to do it.So, I made a program blow. cmd.sh#!/bin/sh if [ $# -lt 2 ] then echo "Usage : $0 {명령어} {서버리스트파일}" exit 1..