p.19 실패는 다 자신의 꿈과 직업에 전념하지 않고 사소한 재미를 추구하기 때문에 오는 것이오. 지금 즐거우면 나중에 궁하게 되고, 당장의 즐거움을 포기하면 장래에 큰 즐거움이 오는 것이오. 이것이 세상 돌아가는 이치요. 내가 좋아하는 탁구를 잠시 뒤로하고, 목표에 몰입한다. p.39 아침에 늦게 일어나는 사람 중에는 밤에 무엇인가를 하는 사람이 많은데, 이것이 다 쓸데없이 밤을 새우는 것입니다. 밤은 음의 시간이라 자야하는데 깨어있고, 태양이 뜬 양의 시간에는 자고 있으니 음양을 도적질하는 셈입니다. 해가 중천인데 오밤중처럼 잠만 자고, 남들이 다 일어나서 일을 할 때야 일어나서 일을 하려니, 손에 잡히는 일이 없는 것이 당연합니다. 이런 사람은 그럭저럭 아침시간을 때우고 점심밥을 먹고서야 일을 시작..
p.30 글을 잘 쓰는 데는 재능과 작문 기술이 요구된다. 하지만 그보다 더 중요한 것은 시간이다. 충분히 시간을 들일 수 있다면 누구나 지금보다 훨씬 더 높은 수준의 생각과 철학을 문장들 속에 풀어놓을 수 있다. 시간이야말로 가장 창조적인 편집자다. 글 뿐만이 아니라, 한 가지 일에 얼마만큼의 시간을 할애하는지에 따라 결과물이 달라진다. 원씽이 생각나는 구절이다. p.41 글을 쓰는 작가이자 음식을 만드는 요리사인 나는 이 두 작업에 엄청난 에너지를 필요로 한다. 그래서 오랜 시간 동안 내게 빛과 소금이 되어줄 에너지 공급원을 찾아 헤맸다. 그리고 마침내 '유레카!'를 외칠 수 있었으니, 바로 '수면'이었다. 하루 최소한 8~9시간의 수면을 가차 없이 지키기 시작하자 일상이 완전히 바뀌었다. 잠 부족으..
내용 정리 및 나의 생각 p.23 행복해지는 게 항상 쉽지만은 않다. 어쩌면 살아가면서 마주치게 되는 아주 큰 도전이 될 수 있다. 진정한 성숙이란 현재의 행복에 책임을 지는 것이다. 그것은 우리에게 부족한 것 대신 현재 가진 것에 집중한다는 뜻이다. 현재의 행복에도 책임이 있다라는 말이 가슴에 와닿는다. 가장으로써 남편으로써 그리고 아빠로써 나는 우리 가족의 행복을 지켜야 할 책임이 있다. p.27 당신의 생각이 당신의 감정을 만들어낸다. 이 사실의 중요성을 이해하는 것이 불행과 우울에서 탈출하는 첫 번째 단계다. 행복한 감정, 불편한 감정, 짜증나는 감정 모두가 생각이 우선해야 나타나는 감정들이다. 생각 다음에 감정이 나타나는 원리를 잊지 말자. p.28 죄책감이 드는 생각을 먼저 하지 않고 최책감을..
내용 정리 및 나의 생각 p.35 구글 검색이 그토록 귀중한 가장 큰 이유는 데이터가 많기 때문이 아니라 사람들이 솔직한 생각을 내놓기 때문이다. 사람들은 친구, 연인, 의사, 설문조사원은 물론 자기 자신에게도 거짓말을 한다. 하지만 구글에서는 섹스 없는 결혼생활, 정신건강문제, 불안감, 흑인을 향한 적대감에 관해 다른 곳에서는 내놓기 힘든 정보를 공유한다. 생각해 보니 그렇네. 내가 구글이나 네이버에서 검색을 할 때 나의 속마음이 그대로 검색어에 담긴다. 검색을 할 때만큼은 거짓없이 키워드를 입력한다. 익명성 때문인가? 궁금하다. 익명성을 보장하는 인터넷 게시판에 글을 쓸 때에는 약간의 과장과 거짓말이 섞여 들어가는 경우가 있다. 하지만 검색 할 때만큼은 진실만이 존재한다. 어떤 차이가 있는 것일까? ..
rest api를 설계할 때 전송되는 코드성 값들은 int 타입이 좋을까? string 타입이 좋을까? 누군가는 A장점이 있다고 생각하고 누군가는 B장점이 있다고 생각하고 누군가는 C장점이 있다고 생각한다. 각자가 생각하는 논리가 있기에 어느 한 명의 논리가 맞다라고 단정 지을수도 없다. 이럴 때 좋은 방법은 각각의 논리를 표에 넣어서 확인해 보는 것이다. 다음처럼 말이다. 항목 Integer String 연산 속도 V 가독성 V 로그 확인 V if문 비교 V 변경 V 실수 예방 V 메모리 절약 V 위의 표처럼 String보다는 Integer를 사용할 때 이점이 더 많다. 그렇다고 해서 꼭 Integer를 써야 하는 것은 아니다. 어떤 서비스에서는 가독성과 로그 확인을 위해서 꼭 String을 써야 한다..
if문 지옥에 빠졌다. if문 최대 중첩이 6단계이다. 그 외 평균 3~4개의 중첩 if문이 보인다. for문 중첩도 최대 4개까지 있다. 도메인 로직이 if문 안에 꼭꼭 숨겨져 있다. 코드를 볼 때 마다 새롭고, 유지보수에 들어가는 비용이 크다. 해당하는 서비스를 관리의 영역으로 둘 수가 없어, 새로운 업무를 적극적으로 맡을 수가 없다. 중첩 if문으로 인한 가독성 저하 로직을 위해서는 if 문은 필수이다. 하지만 if 문이 중첩되어 있다면 가독성은 점점 떨어지게 된다. 1 2 3 4 5 6 if(true) { if(false) { if(true) { } } } cs 이런 코드를 만나면 가정의 고리를 계속 머릿속에서 이어 나가야 한다. 첫 번째 if문은 쉽다. 하지만 두 번째 if문을 만나면 첫 번째 ..
요즘은 기술적인 내용보다 머릿속에 떠도는 여러가지 키워드들에 대한 나의 생각을 적어보고 싶어 오래간만에 글을 써본다. 효율과 비효율의 정의우선 효율과 비효율의 사전적 의미를 알아본다. 효율은 '들인 노력과 얻은 결과의 비율' 비효율은 '들인 노력에 비하여 얻은 결과가 만족스럽지 못함' 비효율이 발생되는 원인우리가 수영을 배울 때 코치가 이론과 실습을 알려주지만 실제 수영을 해보면 배운대로 동작이 나오지 않는다. 수영 동작을 반복적으로 하며 양적인 시간을 채워나가야지만 비효율에서 효율의 구간으로 조금씩 넘어가게 된다. 즉, 비효율은 자연스러운 현상이고, 효율로 가기 위해 필요한 과정이라고 생각하면 된다. 효율은 비효율에 의존적이고, 자연스러운 현상이다. 문제는 비효율의 지속성간단한 예를 들어보자. 배포 자..
+ 문제 발생개인적으로 사용하고 있는 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..