11년 동안 다닌 게임 회사에서 희망퇴직을 하게 되었습니다. 아내와 두 아들을 둔 40대 가장이 왜 이런 결정을 하게 되었는지, 그리고 앞으로의 삶을 어떻게 그려나갈지 정리해보는 시간을 가져보려 합니다. 더불어 20대 초반부터 지금까지 걸어온 길을 되돌아보며 삶의 변곡점들을 되짚어보려고 합니다.이 글에서는 첫 번째 회사부터 네 번째 회사인 엔씨소프트에 이르기까지의 여정을 다루고, 그 과정에서 마주했던 중요한 변화와 결단의 순간들에 대해서도 이야기해 보겠습니다. 이를 통해 제 삶의 흐름을 정리하고, 앞으로 나아갈 방향을 찾는 계기로 삼고자 합니다. 제 인생의 첫 번째 변곡점첫 변곡점은 군대에서 시작되었습니다.철부지나 다름없는 저는 군대에 입대하게 되고, 군대에서 철이 들어 제대하게 되었습니다.어떻게 철이..
"하나의 지식을 깊이 아는 것 보다 여러개의 지식을 얇게 알고, 부족한 깊이는 인공지능의 도움을 받는다." 동료가 던진 말이다. 흔히 기술자는 한 가지를 아주 깊숙히 알아야 한다라고 말한다. 나 또한 한 가지를 제대로 아는 것이 전문가의 자질이라고 생각한다.하지만 동료가 한 말을 듣고 나서부터 생각에 잠긴다. 인공지능이 나왔고, 앞으로 더 발전하게 될 것이고, 더 많은 인공지능이 나올 것이다라는 사실은 분명하다. 이 말인 즉슨, 사회는 점점 생산성의 극대화와 효율성을 위해 다양한 기계들을 인간 사회 깊숙한 곳 까지 투입할 예정이라는 의미이다. 인공지능의 등장으로 인해 현대 사회는 앞으로 점점 더 빠르게 변화될 것이다. 내가 이렇게 생각하는 이유는 사람에게 도움이 되는 혁신적인 도구의 등장은 우리 사회에 ..
MSA 아키텍처 기반의 서비스를 직접적/간접적으로 경험하면서 느낀점을 기록해 본다. + 3번의 MSA 경험A 서비스 개발자 2명 투입 (나를 포함)팀 동료의 권유와 새로운 기술에 대한 욕심Spring Cloud 도입약 10개의 서버B2B 서비스라 사용자 많지 않았음.3~4년 뒤에 서비스 사라짐 B 서비스 MSA 서버군 인수인계 받음 약 10개의 서버로 구성 되어 있음 라이브 서비스가 아닌 PoC 단계의 서비스 (Proof of Concept : 특정 아이디어나 이론이 실현 가능한지를 확인하기 위한 시범적 프로젝트) 혼자서 새로운 요구사항을 구현하고, 라이브 오픈까지 진행해야 하는 상황이였다. 이때 팀을 이동하면서 진행한 첫 프로젝트 이기도 했고, WebRTC 라는 기술을 이용한 서비스 이기에 여러모로 ..
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 상태 정보가 출력되지 않는다.
| 가독성 이란? 가독성은 코드의 첫 인상이다. 우리가 코드를 처음 맞닥드렸을 때 느껴지는 첫 인상이란게 있다. 어떤 코드는 지저분하며 복잡하고, 어떤 코드는 깔끔하고 이해하기 쉽다. 우리가 미팅을 할 때 상대방을 보면 첫 느낌이란 게 있다. 그 첫 인상이라는 것은 그 사람의 차림새, 용모, 걸음걸이, 눈빛 등으로부터 만들어진다. 코드도 사람의 첫 인상과 비슷하다. 사람과 같이 실체가 존재하진 않지만 코드 자체에서 풍겨져 나오는 기운이란 게 있다. 클래스를 잘 구성하여 역할을 분리하고 각 역할에 맞는 책임들이 클래스 내부에 캡슐화가 잘 되어 있는 것을 볼 때 그리고 논리의 흐름이 아주 자연스럽게 흘러가는 것을 볼 때 우리는 코드의 가독성이 좋다고 말한다. 즉, 유연하고 깔끔하게 잘 짜여져 있는 코드라고 ..