Hot
-
블로그 누적 1,000만 조회수 후기
2024.02.12에 블로그의 누적 조회수가 1,000만이 되었다. 전체글은 585개가 되었다. 2015.1.31에 첫 글을 작성했으니, 약 9년만에 1,000만이 되었다. 예전에는 6개월에 100만씩 증가했다면, 요즘은 7개월에 100만씩 증가하고 있다. 아무래도 기술 문제를 해결한 사례보다는 현재의 내 생각을 계속 정리하다보니 구글 검색을 통해 유입되는 비율이 낮아진 것 같다. 1,000만이 오면서까지 있었던 일들을 연도별로 정리해보았다. 2015년 2015년 1월 31일에 첫 글을 작성했다. 누가봐도 성의없는 글이다. 처음 시작은 아웃사이더님, 권남님 의 블로그/위키를 보고 나도 이렇게 되고 싶다는 마음에 시작했다. 당시에도 여러 블로그 플랫폼이 있었고, 특히 개발자는 이글루스를 많이들 사용하고 있..
2024.03.24
-
운영 로그와 디버그 로그 분리하기
최근에 Pete Hodgson가 martinfowler 블로그에 기재한 글을 보면서 로깅도 하나의 기능으로 봐야한다는 생각이 더 강해져서 이 글을 쓰게 되었다. 시스템을 구축하다보면 다음과 같이 크게 두 종류의 로그를 남긴다. logger.error(`API Timeout: ${timeout} seconds`, e); logger.info(`Ordered Food Product Id: ${product.id}`); logger.debug(`Total Order Price Amount: ${sum(products.amount)}`); 이 로그들은 모두 필요한 메세지를 노출시키지만, 실상은 목적이 다르다. Error와 Info 로그는 운영 환경에서 장애를 디버깅하거나 실행 중인 시스템의 여러 진행 상황, 지..
2024.03.15
-
Spring Boot 3.x 실행이 안될 경우 (feat. IntelliJ)
스프링 부트 3.0 이 출시되었다. (현재 최신은 3.0.1 이지만) 3.0 부터는 Java 17부터 지원된다. 그러다보니 기존에 Java8, 11등을 사용하시던 분들은 3.x 스프링 부트 프로젝트를 실행할때 에러들을 만나게 되는데, 이번에 나도 똑같이 경험해서 정리하게 되었다. 문제 스프링 부트 3.0.1 프로젝트를 실행할 일이 생겼다. 그래서 기존에 설치된 IntelliJ에서 Gradle Import를 시켰더니 다음과 같이 방다한 에러 메세지와 함께 실행이 되지 않았다. 기존 노트북에서 모두 Java 11로 프로젝트를 구동시켰었다. No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.0.1 was found. The ..
2023.01.20
New
-
블로그 누적 1,000만 조회수 후기
2024.02.12에 블로그의 누적 조회수가 1,000만이 되었다. 전체글은 585개가 되었다. 2015.1.31에 첫 글을 작성했으니, 약 9년만에 1,000만이 되었다. 예전에는 6개월에 100만씩 증가했다면, 요즘은 7개월에 100만씩 증가하고 있다. 아무래도 기술 문제를 해결한 사례보다는 현재의 내 생각을 계속 정리하다보니 구글 검색을 통해 유입되는 비율이 낮아진 것 같다. 1,000만이 오면서까지 있었던 일들을 연도별로 정리해보았다. 2015년 2015년 1월 31일에 첫 글을 작성했다. 누가봐도 성의없는 글이다. 처음 시작은 아웃사이더님, 권남님 의 블로그/위키를 보고 나도 이렇게 되고 싶다는 마음에 시작했다. 당시에도 여러 블로그 플랫폼이 있었고, 특히 개발자는 이글루스를 많이들 사용하고 있..
2024.03.24
-
힘 빼지 않기
코인 노래방을 종종 다닌다. 스트레스를 풀기위해 다니는데 노래를 못해서 낮은 노래를 선택하고 음이탈이 나지 않으려고 최대한 조심해서 불러왔다. 스트레스를 풀러 간 어느 날, 노래방 밖에서도 들릴 정도로 엄청 큰 소리로 노래를 부르는 사람이 있었다. 음정 박자도 전혀 맞지 않고, 음이탈이 나도 그냥 기세로 밀어붙이면서 노래를 불렀다. 밖에 있는데도 듣기 힘들 정도로 고함치는 것에 가깝게 노래를 부르던 그 사람은 노래를 마치고 아주 개운한 표정으로 방에서 빠져나왔다. 남들이 어떻게 생각하든 본인은 아주 만족한 채로 노래를 마친 표정이였다. 그 분의 표정을 보면서 그간 부르고 싶은 노래 보다는 음역대가 맞는 노래에 맞춰 음이탈이 안나는 것에 급급하여 살살 부르던 것이 생각나 갑자기 짜증이 확 났다. "스트레스..
2024.03.16
-
운영 로그와 디버그 로그 분리하기
최근에 Pete Hodgson가 martinfowler 블로그에 기재한 글을 보면서 로깅도 하나의 기능으로 봐야한다는 생각이 더 강해져서 이 글을 쓰게 되었다. 시스템을 구축하다보면 다음과 같이 크게 두 종류의 로그를 남긴다. logger.error(`API Timeout: ${timeout} seconds`, e); logger.info(`Ordered Food Product Id: ${product.id}`); logger.debug(`Total Order Price Amount: ${sum(products.amount)}`); 이 로그들은 모두 필요한 메세지를 노출시키지만, 실상은 목적이 다르다. Error와 Info 로그는 운영 환경에서 장애를 디버깅하거나 실행 중인 시스템의 여러 진행 상황, 지..
2024.03.15
-
한 페이지
요즘 데이식스의 "한 페이지가 될 수 있게" 노래에 엄청 꽂혔다. 정확히는 꽂힌 가사가 있다. "아름다운 청춘의 한 장 함께 써내려 가자 너와의 추억들로 가득 채울래 지금 이 순간이 다시 넘겨볼 수 있는 한 페이지가 될 수 있게" 어떤 동시대를 함께 보내는 모든 그룹 혹은 조직의 일원들간에도 통하는 이야기 같았다. 특히 스타트업 안에서 일하는 동료들간에도, 조직과 팀원 사이에도 통하는 이야기인 것 같았다. 대학교때는 학과 생활보다는 동호회 생활을 동기들과 재밌게 했다. 졸업한 후에도 계속 연락하고 만날 정도로 오랜 인연을 이어가고 있다. 동기들과 동호회 활동을 하면서 이런 저런 행사도 준비하고 대회도 나가고 늦게까지 술도 마시고, 자취방에서 게임도 하고 그랬던 20대 이야기는 지금도 만나면 자주 꺼낸다...
2024.03.10
-
좋은 오프보딩
온보딩의 반대말로 오프보딩이 있다. 조직을 나가는 직원에 대한 퇴사 절차를 의미한다. 보통 퇴사 이후에도 회사에 대한 좋은 이미지를 남겨주기 위해 좋은 방향으로 퇴사절차를 밟는다. 여기서 중요한 것은 절차에 집중한다는 것이다. 이런 절차도 물론 중요하겠지만, 그 팀원이 정말 좋은 팀원이였다면 떠나는 이가 미안해 하지 않도록 하는 것이 중요하다. 그리고 이를 위해 떠난 이후에도 조직이 계속해서 더 잘되는 모습을 보여줘야한다. 소라의 날개 31권에서도 비슷한 이야기가 나오는데 많이 공감되었다. (오른쪽에서 왼쪽방향으로 읽어야 한다.) 떠나는 팀원이나 남은 팀원이나 서로에게 소중한 시간을 함께한 동료였다면 부정적인 감정이 전파되길 바라지는 않을 것이다. 만약 내가 떠나고 동료들이 더 힘들어하거나 망하길 바란다..
2024.03.04
-
혼란함에 익숙해지기
사내에 공유드렸던 내용을 기록차 남겨둡니다. 저는 혼란한 상황이나 환경을 계속해서 체계적으로 정리/정돈하는 것은 2순위이고, 1순위는 혼란한 상황/환경 내에서 적응하는 것이 가장 중요하다고 생각하는데요. 혼란함 그 자체를 못견디는 것은 계속해서 변하는 업계에서는 꼭 해결해야할 역량이라고 봐요. 혼란함이 있을때마다 매번 정리 정돈하고, 체계적으로 모든 것을 하려고하면 오히려 변화의 속도를 못쫓아가고 항상 뒤쳐지게 된다고 생각합니다. 빚이 없는 상태가 가장 마음이 편하겠지만, 목표를 달성하기 위해 빚을 내 대출자로서의 삶을 견뎌야하는 것처럼요. 절대 빚을 지지 않고 원하는 목표를 달성하려면 수십년이 걸릴 수 있겠죠. 개인이 감당 가능한 범위 내에서 빚을 내고 목표에 빠르게 도달하는 것을 레버리지 라고하는데,..
2024.02.09
-
신입 엔지니어를 채용하는 것
주말에 쉬는 중 다음과 같은 링크를 공유 받았다. 시니어만 고용하는 것은 소프트웨어 업계에서 최악의 정책입니다 글을 읽어보면 시니어를 뽑지말아야한다는 것은 아니지만, 시니어만으로 팀을 꾸릴려고 해서는 안된다는 이야기를 한다. 대체적으로 내용에 꽤 공감을 했다. 특히 "ambition, character and brains have little to do with experience." (야망, 성격, 두뇌는 경험과는 거의 관련이 없습니다.) 는 매우 공감이 갔다. 글을 읽다가 소라의 날개 10권에서 주인공 팀과 겨룬 신죠 토와 고교 농구부가 생각이 많이 났다. 신죠 토와 고교 농구부는 다카하시와 코지마 2명의 학생이 입학을 하면서 농구부가 없던 학교에 농구부를 신설하고, 부원들을 모집하면서 시작한다. 하..
2024.02.06
-
좋은 리더가 되는 방법
요즘 좋은 기회로 여러 리더분들을 뵙고 있다. 한달에 1~2번정도 CEO, CTO, CPO 분들을 뵙고 서로 궁금한 것들을 물어보고 이야기를 나누는 시간을 가지고 있다. 이 분들과 대화를 나누다보면 "오? 그러네요?" 라는 감탄사를 낼 때가 자주 있다. 그러면서 어떻게 이런 제품 아이디어를 가지셨을까? 혹은 이런 조직 관리 쳬계를 가지시게 된 걸까 궁금해서 사적인 이야기들로 이어진다. 그런 이야기들을 정리해보면 공통적으로 "인간의 본성은 어떠하다" 라는 본인만의 주관적인 정의가 내려진 분들이 좋은 제품 혹은 좋은 제품을 만드는 것 같았다. "아! 사람이란 이런 존재구나" 라는 것의 기준이 있는 사람들은 그 기준에 맞춰서 조직 관리나 제품의 방향성을 결정하는것 같은 느낌을 받았던 것이다. 데이터를 통해 결..
2024.01.20
-
2023년 개인 회고
직업적인 회고인 CTO 회고는 별도로 정리했다. 올 한해는 내가 해온 결정들에 대해 다시 한번 생각하는 일이 많았다. 0. 고민 사주 올해 점신 앱을 유료로 구매해서 한해 운수를 봤다. 종종 주변에서 사주를 봐주곤 했는데, "와 재밌다" 하고 듣고 한 귀로 흘리곤 했다. 근데 올해는 뭔가 의도한대로 작동하지 않는 것들이 많아서 "왜 이러나" 하는 생각들을 참 많이 했다. 지금의 이 결과는 왜 그런걸까? 내가 그때 그러지 않았으면 어땠을까? 등등을 참 생각을 많이 했었다. 의도와 다른 결과가 있을때마다 자책만하니 기분이 꽤 많이 다운되었다. 그래서 어딘가에라도 좀 기대보자는 생각에 앱을 통해 올해 운세를 봤다. 무료로 사주를 볼 수도 있는데, 그래도 이런 서비스를 사용할때는 합당한 비용을 지불해야한다고 생..
2024.01.08
-
2023년 CTO 회고
2021년 초에 합류했다가 벌써 만 3년이 다되어간다. 올해는 점점 내 역할을 팀원들에게 위임하는 한 해였고, 제품의 성적표와 회사의 매출이 연결되는 것을 증명하는 해였던것 같다. 개인 회고는 별도로 작성할 예정이다. 1. 조직 개발팀 미션 인프랩 개발팀의 미션과 가치을 작성해서 팀에 공유했다. 사내 Wiki에 먼저 기록하고 기술 블로그에 공개적으로도 공유했다. 매 주마다 진행하는 개발팀 스프린트에서 자주 하던 이야기들이 있다. 득점왕 보다는 팀을 우승시키는 팀원이 되자. 계몽보다는 전염시키자. 숙련도가 낮음을 기술의 문제로 돌리지말라. 기타 등등 이런 이야기들을 자주 하다보니 개발팀 전체가 어떤 사람이 우리팀에 어울리는지, 어떤 동료가 좋은 동료인지 추상화된 형태로 다들 이해는 하고 있는 상태였다. 다..
2023.12.28
-
지향하는 개발 문화
요즘 외부 개발자분과의 채용을 목적으로 한 커피챗을 하다보면 종종 받는 질문 중 하나가 CTO인 내가 지향하는 개발 문화가 무엇인지이다. 배민에 있을때 꽤 많은 팀을 옮겨다녔다. 그 중 가장 기억에 남는 팀이 있었는데, 이 팀의 만족도가 굉장히 높았다. 이 시기에는 우리팀이라면 회사의 어떤 문제든 풀 수 있을것 같다는 자신감이 있었다. 여러 기술 부채도 많이 해결했고, 여러 팀과 함께 협업하는 일도 많았다. 팀의 기술 부채 사례를 가지고 사내, 사외 공유도 많이 할 수 있었다. 당시엔 팀의 개발 문화에 대해서 크게 생각하지 않았다. 팀장님도 개발문화에 대한 언급을 그렇게 많이 하지 않으셨고, 가능하면 팀원들과 함께 회사의 여러 문제를 해결하는 것에 집중하셨다. 그러니깐, 팀의 개발문화를 위해 어떠한 액션..
2023.12.22
-
원 만들어 가기
오늘까지해서 하반기 개발조직 & 프로덕트 조직의 모든 워크샵이 끝났다. 팀의 인원수가 많지 않을때는 개발파트 전체가 한 회의실에 모여서 진행을 했고, 직군별로 어느정도 구성이 되고 나서부터는 같은 시간대에 모여 직군별로 서로 다른 공간에서 워크샵을 각각 진행했다. 개발 파트 전체가 같은 날에 진행하니, 각 직군별 워크샵에 1~2시간씩 정도만 참여할 수 밖에 없어서 내가 적극적인 참여는 하지 못했다. 이번에는 모든 직군의 워크샵에 참여하고 싶었다. 그래서 백엔드, 프론트엔드, 데브옵스 등 직군별로 별도로 일정을 잡고 진행했다. 각 파트별 워크샵이 어떻게 진행되는지 좀 더 체감하고 좀 더 건강하고 유의미한 워크샵 진행을 도와주고 파트별 Action Item이나 고민에 대해 좀 더 회사의 입장에서 도와주거나 ..
2023.12.16
-
경쟁력 있는 신입 포트폴리오
팀원들의 이력서를 글 하단에 첨부해두었다. 이 사이드 프로젝트를 진행한 멤버들에게 관심이 생긴다면 한번 커피챗을 요청해보자. 올해 대학생분들을 멘토링을 종종 했다. 자주 받던 고민이 "어떻게 해야 취업 경쟁력이 생기느냐" 인데, 나는 그럴때마다 아래와 같이 조언을 드렸다. "뭐든 괜찮으니 본인에게 필요한 것을 하나 만들고 실제 출시까지 해보라. CLI, 패키지, 웹, 앱 상관없이 출시를 하고, 100, 1000명의 고객을 만들고, 365/24시간 운영해보면 로그 메세지는 어떻게 남겨야하고, 에러 핸들링은 어떻게 해야하고, 쿼리는 어떻게 작성해야하고, SQL 인잭션, XSS 공격 등을 왜 막아야하고, 한정된 서버 자원을 어떻게 활용해야 하는지 등등을 배우게 된다. 운영하면서 배운 내용을 블로그에 정리하면 ..
2023.12.10
-
좋은 피드백 (절벽으로 몰아세우지 않기)
최근 술자리에서 "왜 혹독한 조언 혹은 높은 프레셔 등 개발팀원들의 성장에 대한 강한 피드백을 하지 않느냐" 에 대한 질문을 들었다. 그에 대해 다음과 같이 답변을 드렸다. “여러 회사를 거치면서 어떤 것이 진짜 성장인지 명확하지 않다는 생각을 하게 되었고, 지금 우리 팀에 필요한 것은 대기업에서 사용하는 기술을 적용하느냐 마느냐가 아니다. 특히 어떠한 한명의 슈퍼맨에 의지해서 조직의 기술력이 높아지는 것 역시 필요하지 않다. 그렇게 해도 팀 전체는 전혀 성장하지 못한 불안한 성장이기 때문이다. 가능하면 다 같이 성장해서 모두가 조직의 졸업까지 이탈자 없는 성장을 바라고 있다.” 만약 현재 우리 팀원들이 제대로 된 성과를 내지 못하고 있다면, 당연히 피드백을 했을 것이고, 잘못된 방향으로의 성장에 대해서..
2023.12.03
-
테스트 데이터 초기화에 @Transactional 사용하는 것에 대한 생각
얼마 전에 2개의 핫한 컨텐츠가 공유되었다. 존경하는 재민님의 유튜브 - 테스트에서 @Transactional 을 사용해야 할까? 존경하는 토비님의 페이스북 2개의 컨텐츠에서 테스트 데이터 초기화에 @Transactional 사용하는 것에 대해 서로 다른 의견을 내신 것이다. 마침 페이스북에 태깅되기도 했고 (ㅠㅠ) 과거에 라이브 방송에서도 "향로님은 반대한다" 라고 언급되기도 했었다. (반대하는 것은 사실이기도 하고..) 내 생각을 정리해야지 해야지 하다가, 마침 이번주에 시간이 되어서 정리하게 되었다. 1. Spring Team은? 내 의견을 정리하기 전에, 먼저 Spring Team 의 코드를 살펴보자. 인프라스트럭쳐 계층 (데이터베이스) 테스트를 작성하는 팀의 코드를 보면 될 것 같아서 Sprin..
2023.11.26
-
이기는 팀 경험
아래 글은 오늘 팀 내부에 공유한 글입니다. 팀을 떠난 후에도 다시 볼 일이 있을것 같아 블로그에도 남깁니다. 오늘 추천 받은 영상인데, 그간 저희 인프랩 조직 내에서 계속 이야기하던 주제와 맞물려서 공유드립니다. (전) 구글 인사담당자셨던 황성현님의 인터뷰를 보면 다음과 같은 내용이 나옵니다. "엄청난 스트레스를 받는 펀드 매니저들 중 최고 경영층까지 갔던 사람들의 공통된 특징"을 보니 어렸을때부터 12학년 (고3) 까지 팀 스포츠를 했다는 것인데요. 그냥 만년 후보 선수로 벤치를 지키고 있더라도, Being part of a winning team - 이기는 팀의 맴버였던 경험이 있던 사람이 끝까지 살아남을 수 있는 비결이라는 것입니다. 즉, 내가 4번 타자였던게 중요한게 아니라 우리 팀이 1등한게 ..
2023.11.23
-
Qodana 무료로 시작해보기 (2023.11)
JetBrains에서 SonarQube와 같은 정적 분석 도구를 출시했다. Qodana JetBrains 에서 출시하는 제품들은 일단 관심을 가지게 된다. IntelliJ, WebStorm, DataGrip 등을 몇년간 계속해서 사용하면서 충분히 만족감을 느꼈고 (불편함이 없진 않았지만), 최근에 출시한 Writerside도 VSCode를 대체한 마크다운 에디터로 잘 사용하고 있다. 그만큼 DX를 가장 신경쓰는 제품을 만드는 회사라는 확신이 있기 때문에 이번 Qodana 역시 기존의 Sonar 제품들을 잘 대체할 수 있을까 하는 기대감에 사용해보게 되었다. 그리고 기존에 잘 사용하던 SonarQube의 대체제를 고민하던 시점이기도 했다. Qodana는 SonarQube에 비해 어떤 장점이 있을까? 눈여겨..
2023.11.23
-
[리팩토링] 코드 배치와 변수 줄이기
비즈니스 로직 위주로만 생각하고 바로 코드를 작성하다보면 코드가 길어지고, 가독성이 떨어지는 경우가 많다. 특히 가독성이 떨어지면 코드를 리팩토링할때도 이상한 방향으로 할 때가 있다. 이럴때 가독성을 높이기 위해 코드 배치와 변수를 줄이는 방법을 알아보자. 예제 ORM 없이 직접 SQL을 작성하는 환경에서 다음과 같이 코드를 작성했다고 가정하자. export class ProductRepository { async create (createDtos: ProductCreateDto[]) { const promiseList = []; const results: Product[] = []; // 반복문을 수행하면서 DTO를 Entity로 변환하고 SQL Promise를 쌓아둔다. for(const dto of..
2023.11.12
-
[일기] Mild High Club - Homeage
퇴근 후에 깨끗하게 샤워하고 거실 불을 끄고, 테이블 전등만 켠 채로 적당히 늘어지는 음악도 들으면서 코드 작업이나 글 쓰는 시간을 좋아한다. 오늘은 유달리 날이 되게 추운데 바깥 야경이 또렷하게 보였다. 반짝반짝 빛나는 야경은 왜 이렇게 예쁜걸까. 언젠가 이 집을 떠나는 날이 오더라도, 매일 근사한 감동을 주었던 이 밤들을 잊지 못할것 같다. 오늘은 무슨 노래를 들을까 하면서 유튜브를 찾다가 우연히 배우 알렝 드롱의 리즈시절에 관한 쇼츠를 보게 되었다. 여기서 나온 노래가 너무 마음에 드는 것이다. 적당히 늘어지고, 뭔가 7080 같은 느낌도 들고 말이다. 그래서 좀 더 찾아보니 Mild High Club 의 Homeage 란 노래였다. 노래가 너무 몽환적이라서 무슨 가사일까 궁금했다. Someone ..
2023.11.08
-
재능 있는 척 하지 않기
프로그래밍을 배우기 시작한 뒤 부터 노력하지 않는 척을 꽤 자주했다. 이를테면 주말에 사이드 프로젝트나 공부를 했어도 회사에서는 웹툰/영화를 봤던 이야기만 하는 것이다. 주변 사람들에게 저 주말에 공부했어요 라던가, 남는 시간에 사이드 프로젝트나 스터디를 했어요 등을 말하기 싫었다. 당시의 나는 개발을 못했기 때문이다. 노력을 해도 그 정도라면 내가 재능이 없다는 것을 의미하는데 그걸 인정하기 싫었다. 노력을 했음에도 못하는 즉, 재능 없는 사람이 될 바에는 차라리 노력을 안해서 못하는 사람이 되는게 낫다고 생각하게 되었다. 그럼 내가 개발 실력이 부족해도 그건 내 재능이 부족한게 아니라 내 노력이 부족한 것이 되니깐. 내가 선택한 이 분야에서 내가 재능이 없다는 것을 인정하기가 참 어려웠다. 그래서 뭘..
2023.11.06
-
[PostgreSQL] 모든 View 의 접근 기록 테이블에 적재하기 (애플리케이션 변경 없이)
View Table을 적극적으로 사용하는 시스템에서 View Table의 의존성을 줄이고자 할때가 있다. 이는 레거시 데이터베이스를 리팩토링 해야하는 경우인데, 보통 너무나 파편화된 데이터베이스 접근을 하나로 통합하고자 할때이다. 보통 ORM을 사용하는 경우에는 이러한 리팩토링이 쉽지만, ORM을 사용하지 않는 경우에는 어떻게 해야할까? 가장 먼저 해야할 것은 View가 계속 사용되고 있는지, 리팩토링에서 누락은 없었는지를 확인할 수 있는 방법을 마련하는 것이다. 특정 테이블의 변경이 있을때마다 어떠한 액션을 넣을 수 있는 가장 흔한 방법은 Trigger 이다. 하지만 아쉽게도 PostgreSQL에서는 View Table의 Select 쿼리에 대한 Trigger가 적용되진 않는다. 그래서 다른 방법을 고..
2023.11.05
-
그대들, 어떻게 살 것인가 (요시노 겐자부로)
최근 미야자키 하야오 감독님의 "그대들은 어떻게 살 것인가" 영화가 개봉된다는 소식을 들었다. 제목이 너무 낯익어서 찾아봤더니 미야자키 하야오 감독님이 이 책을 오마주해서 영화를 만들었다고 한다.대학생일때 도서관에서 빌려서 읽었던 책인데, 당시에는 책 내용이 너무 가식적이라고 생각했었다. 중2병이 늦게 와서 그랬는지 모르겠지만, 그땐 되게 시니컬했고 그만큼 이런 내용에 거부감이 있었다. 그래서 책을 읽고나서는 "이런 책을 왜 사람들이 좋아하는지 모르겠다" 라는 생각을 했었다. 그러다가 취업 준비, 이직 준비, 여러 주변의 변화 등이 있었는데, 이런 변화들이 있을때마다 이 책의 내용이 떠올랐다. 그리고 나는 어떤 어른이 되고 싶은지, 어떤 사람이 되고 싶은지에 대한 생각을 하게 되었다. 이 책을 보면 주인..
2023.10.30
-
두근두근
대학교를 다닐때 학교 공부는 하지 않고, 도서관에서 자기계발서를 한참 읽던 시기가 있었다. 그때 읽었던 책 중에 하나가 젊은 구글러가 세상에 던지는 열정력이라는 책이었는데, 200X년에 구글코리아에 입사하신 김태원님이 쓰신 책이다. 각 챕터마다 김태원님의 생각이 적힌 책인데, 그 중에서 "두근두근" 챕터에는 수잔 베이츠의 "사람을 움직이는 리더의 대화법" 의 내용이 담겨 있었다. 교회는 이미 사람들로 꽉 차 있었고, 사진기자와 나는 교회 뒷문에 진을 칠 계획으로 언덕에 올랐다. 그때 나는 마침 따르는 기자들 없이 경호원 두 명과 걸어가는 지미 카터를 보았다. 그들은 막 교회로 들어가려던 참이었고, 내 심장은 빠르게 뛰었다. 이런 기회가 오리라고 예상하지 못했던 나는 아무런 준비도 되어 있지 않은 상황이었..
2023.10.22
-
가장 좋아하진 않는 프로그래밍
요즘 받아 보는 고민 중에 "가장 좋아하는 일이 프로그래밍이 아니다는 것을 인정하기 힘들다"는 것이 있다. 예를 들면 이런 것인데, 본인은 시간이 날때마다 그림을 그리는데 그 시간이 너무 재밌다는 것이다. 그래서 그림 그리러 가는 시간이 항상 기다려지고 빨리 퇴근하고 싶은 생각을 계속 한다는 것이다. 그래서 주변에서는 프로그래밍보다 그림 그리는 것을 더 좋아하는 것 같다고 농담으로 이야기하는데, 자긴 그걸 인정할 수 없다는 것이다. 근데 나는 아무리 고민을 들어봐도 프로그래밍 보다 그림을 그리는 것을 더 좋아한다고 느꼈다. 그리고 그게 왜 문제지? 라는 생각을 했다. 좀 더 고민을 들어보니 프로그래머로서 프로그래밍보다 더 좋아하는게 있어선 안된다고 믿고 있던 것이였다. 커리어 초반에 같은 팀에 있던 사수..
2023.10.09
-
Eclipse Mat 메모리 할당 크기 조정 (Mac OS)
Heap Dump를 분석하기 위해 Eclipse mat를 종종 사용한다. 너무 큰 덤프 파일을 불러오면 다음과 같이 OOM 이슈가 발생한다. An internal error occurred during: "Parsing heap dump" Out of Memory mat 에 할당된 메모리를 높여야만 대용량의 덤프 파일을 불러 올 수가 있다. 이를 위한 설정은 다음과 같다. 설정 모든 설정은 MAC OS를 기준으로 한다. mat 설정은 /Applications/mat.app/Contents/Eclipse/MemoryAnalyzer.ini 위치에 존재한다. 그래서 필요한 에디터로 (여기서는 vi) 해당 파일을 열어서 vim /Applications/mat.app/Contents/Eclipse/MemoryAn..
2023.10.08
-
Hibernate Fetch Join시 메모리에서 페이징 처리 사전 차단하기
Hibernate (Spring Data JPA) 를 사용하다보면 종종 HHH000104: firstResult/maxResults specified with collection fetch; applying in memory! 의 WARN (경고) 로그 메세지를 만난다. 해당 로그는 페이징 처리할때 여러 엔티티를 Fetch Join 을 하면 발생한다. Fetch Join은 N+1 문제를 해결하는 가장 자주 사용되던 방식이다. 하지만, 경고 메시지에서 언급했듯이 페이징 처리시에 사용할 경우 페이징이 전혀 적용되지 않고, 조건에 해당하는 모든 데이터를 가져와 메모리에 올려두고 사용한다. 조건에 해당 하는 데이터 전체를 가져오기 때문에 당연히 성능 상 이슈가 되며, 이를 메모리에 올려두고 페이징을 처리하니 이..
2023.10.02
-
2023 인프콘 회고
올해 2월부터 준비한 인프콘이 2023.08.15 에 성황리에 마무리 되었다. 인프콘의 모든 발표는 인프런에 무료로 공유되어 있다. 회고 써야지 써야지 하다가, 이제야 쓴다. 인프콘 컨퍼런스 운영에 대해서는 관여를 하지 않았다. TF 멤버분들이 100% 진행해주셔서 감사할 따름이다. 그래서 인프콘을 어떻게 준비했는지 그 과정이 궁금하신 분들은 아래 회고들을 참고해보면 좋다. 인프콘 2023 현장 스케치 인프콘 TF 회고 인프콘 TF 리드 - 앨리스의 회고 이번 후기는 인프콘 사이트 개발과 개인 발표자로서의 회고이다. 인프콘 사이트 준비 작년 인프콘 준비 기간 동안 개발 리소스가 거의 없어서, 공식 사이트 개발을 DevOps와 디자이너 두명이서 워드프레스로 테마 골라서 만들자로 결론내고 진행했었다. 그리고..
2023.09.17
-
소설에 몰입하기
고민 상담을 하다보면 자존감에 대한 고민을 많이 듣는다. 타인과의 비교 타인의 비난, 시기, 질투 내가 어쩔 수 없는 상황에 대한 불안감 등등 부정적인 감정을 만나게 될 때가 많다. 이런 부정적인 감정, 태도, 상황에서 어떻게 자존감을 지킬 수 있냐는 고민과 함께 나는 그 감정과 그 상황을 어떻게 잘 넘기는지에 대한 질문이 이어졌다. 부정적인 기분을 잘 처리하는 사람인가? 하는 생각이 드는 것과 별개로 남들이 보기에 그랬다면 어떻게 그랬을까? 곰곰히 생각해봤다. 그러다가 도둑맞은 집중력의 내용을 보고 답을 찾을 수 있었다. 우리는 소설을 읽을 때 다른 사람의 머릿속에 있는 경험에 푹 빠져든다. 사회적 상황을 그려보고, 깊고 복잡하게 타인과 그들의 경험을 상상한다. … 키스 오틀리 교수는 소설을 많이 읽으..
2023.09.10
-
좋은 예외(Exception) 처리
좋은 예외 처리는 견고한 프로그램을 만들고, 좋은 사용자 경험을 줄 수 있다. 예외 처리를 통해 애플리케이션이 예기치 않게 종료되는 것을 방지하고, 갑작스런 종료 대신 사용자는 무엇이 잘못되었는지, 그리고 가능하다면 어떻게 바로잡을 수 있는지에 대한 의미 있는 오류 메시지를 받을 수 있다. 뿐만 아니라 좋은 예외처리는 개발자가 문제를 진단하는 데 큰 도움이 되어 이로 인해 문제 해결 시간이 단축된다. 특히, 복잡한 시스템에서 여러 단계의 프로세스가 있는 경우 예외는 프로세스의 위치에 따라 다르게 처리되어 적절한 예외 처리는 이러한 프로그램의 프로세스를 관리하는 데 유연성을 제공한다. 반면, 이를 위해 과도하게 사용하면 메인 비즈니스 로직이 무엇인지 파악하기 힘들 정도로 너무 많은 오류 처리를 가지고 있는..
2023.09.05
-
미국가서 중국어 공부하지 않기
빅테크 회사분들의 시니어분들과 사석에서 만날때와 스타트업으로 이직하신 시니어분들을 만날때 서로 대화의 주제가 다름을 체감한다. 예를 들면, 우리팀의 주니어가 평균 레이턴시 1초인 API를 0.1초로 개선했다 를 이야기한다고 하면 여전히 빅테크에 계신 분들은 그 주니어가 기술적으로 뛰어난 사람임을 이야기하고, 어떻게 개선했는지가 주력이라고 한다면, 스타트업으로 이직하신 시니어분들은 "1초인데 왜 개선하지…?" 라는 이야기를 한다는 것이다. 두 그룹의 시니어분들 다 몇년 전까지는 비슷한 규모의 회사를 다녔음에도 말이다. 하루 수백만 ~ 수천만건의 호출이 발생하는 API이기 때문에 이를 0.1초로 개선한 것은 서비스 전체적인 개선이니 당연히 그 시기의 개발팀에 있어서는 정말 중요한 작업이다. 그리고 2년전까지..
2023.08.17