Hot
-
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
-
어느 축구 선수의 은퇴와 선물
최근에 많은 분들을 뵙고 이야기 나누다가 빠르게 승진 중이신 분의 커리어 고민에 대해 이야기할 기회가 있었다.굉장히 큰 회사에서 나이나 연차에 비해 빠르게 승진과 리더십 기회를 얻은 분이셨다.최상위 리더의 평가만 좋은게 아니라, 같이 일하시는 주변 분들의 평가도 대단히 좋은 분이라서 "어떻게 하면 그 위치의 역할을 잘 할 수 있을까" 에 대해 고민 하시는 줄 알았지만, 그게 아니였다.오히려 너무 빠른 승진과 기회로 인해 비슷한 연차, 비슷한 나이대의 동료들과 거리가 멀어지고 있는 것에 대한 고민이였다.권한 혹은 리더십이 높아질수록 점점 조직의 사정을 더 알게 되기도 하고, 개인의 성과 보다는 팀의 성과, 팀원들의 성과, 조직에 더 도움이 되는 결정 등에 대해 고민하다보니 매일 하는 업무, 고민, 생각 등..
2024.05.09
-
.gitignore가 작동하지 않을때 대처법
.gitignore가 제대로 작동되지 않아서 ignore처리된 파일이 자꾸 changes에 나올때가 있습니다. git의 캐시가 문제가 되는거라 아래 명령어로 캐시 내용을 전부 삭제후 다시 add All해서 커밋하시면 됩니다. git rm -r --cached . git add . git commit -m "fixed untracked files" 참고
2018.06.23
New
-
HTTP API 디자인 - URI편
마틴 파울러의 블로그를 가보면 Leonard Richardson이 제안한 HTTP API 성숙도 모델 (Richardson Maturity Model - RMM)을 소개한다.여기서는 다음과 같이 4단계를 설명한다.레벨 0: 하나의 URI를 정의하고 모든 작업은 이 URI에 대한 POST 요청레벨 1: 개별 리소스에 대해 별도의 URI를 만든다.레벨 2: HTTP 메서드를 사용하여 리소스에 대한 작업을 정의레벨 3: 하이퍼미디어(HATEOAS 등)를 사용Roy Fielding 의 정의에 따르면 레벨 3이 진정한 RESTful API에 해당한다.대부분의 RESTful API는 진짜 RESTful API는 아니며 보통 레벨2 부근에 해당한다.아래는 마틴 파울러 블로그에 나와있는 성숙도 레벨이 무엇을 의미하는지..
2024.05.21
-
어느 축구 선수의 은퇴와 선물
최근에 많은 분들을 뵙고 이야기 나누다가 빠르게 승진 중이신 분의 커리어 고민에 대해 이야기할 기회가 있었다.굉장히 큰 회사에서 나이나 연차에 비해 빠르게 승진과 리더십 기회를 얻은 분이셨다.최상위 리더의 평가만 좋은게 아니라, 같이 일하시는 주변 분들의 평가도 대단히 좋은 분이라서 "어떻게 하면 그 위치의 역할을 잘 할 수 있을까" 에 대해 고민 하시는 줄 알았지만, 그게 아니였다.오히려 너무 빠른 승진과 기회로 인해 비슷한 연차, 비슷한 나이대의 동료들과 거리가 멀어지고 있는 것에 대한 고민이였다.권한 혹은 리더십이 높아질수록 점점 조직의 사정을 더 알게 되기도 하고, 개인의 성과 보다는 팀의 성과, 팀원들의 성과, 조직에 더 도움이 되는 결정 등에 대해 고민하다보니 매일 하는 업무, 고민, 생각 등..
2024.05.09
-
어떤 감독이 될 것인가?
소라의 날개 25 ~ 27권을 보면 남녀 농구부의 방학 합숙 훈련 이야기가 나온다.새로 부임한 감독님은 농구부원들의 목표가 전국대회 진출임을 알고, 전국대회 진출을 위한 훈련을 준비한다.전국대회 진출팀이 되기 위한 훈련은 당연히 높은 훈련 강도를 필요로 하고, 훈련 메뉴를 본 매니저 등은 높은 강도로 인해 우려를 표한다.우리팀은 이 정도의 훈련을 처음 경험하니 낙오자가 너무 많고 효과가 적지 않겠냐고.이때 감독님의 이야기가 와닿았는데,이 훈련을 통과하고 못하고 보다 더 중요한 것은 처음 만나는 벽을 만났을때 어떤 마음가짐들을 하느냐가 훨씬 중요하다는 것이다."무리를 해도 불가능한 일이라면, 처음부터 주문도 강요도 하지 않아.솔직히 말하면 이 합숙의 메뉴도 상당히 무리하게 짜놨어.한 명도 빠짐없이 전원 해..
2024.05.02
-
의미에 매몰되지 않기
학생 시절에 좋아하던 이성이 있었다.좋아하니깐 더 잘해주고 싶었고, 내가 하는 행동의 순위에서 항상 최우선이였다.근데 고백을 하면 계속 거절했다.진심과는 별개로 인연은 아니였다.친구로서 계속 지내다가 어느날 그 친구에게서 아프다는 연락을 받았다.보통 같았으면 연락을 받자마자 걱정하고 달려갔을텐데, 그날은 그 연락을 받고 "근데 내가 약 들고 간다고 사귀게 되는 것도 아니잖아? 그럼 의미가 있나?" 라는 생각이 들었다.이런 생각을 했다는 것에 소스라치게 놀랐다.그 친구가 좋아서 해온 모든 행동을 나 스스로 의미가 없는 행동으로 만들어버린 것이기 때문이다.좋아서 무엇이든 해주고 싶었던 순수한 진심이 오염된 것 같았다.사귀는게 확실할때만 내가 해온 노력이 모두 의미가 있는 것이고, 사귀지 않을때는 어떤 ..
2024.04.24
-
Public API의 CDN 캐시
API의 캐시 중에는 모든 사용자 (로그인/비로그인 관계없이) 동일한 응답값을 줘야하는 것들이 있다. 로그인/비로그인에 관계없이 항상 일정한 데이터가 사용자 UI에 필요한 경우이다. 이를테면 인프런 서비스의 상단 헤더에 노출되는 강의 카테고리 (1 depth, 2depth, 3depth) 같은 경우. 이 캐시 데이터는 서비스의 모든 페이지에서 호출하고 있다보니 페이지 조회수 만큼 캐시 API를 호출하게 된다. Redis 캐시 -> 로컬 캐시 등으로 캐싱처리를 해도 결국 서버로 가는 조회 요쳥수가 개선되는 것은 아니고, 서비스 전체에서 가장 많이 호출되는 API 영역이 개선된 것이 아니다. SSR을 CDN으로 캐시 해도, SSG로 정적 페이지를 만들어도 헤더 영역은 사용자별 로그인 구분을 위해 CSR로 구..
2024.04.14
-
언제 이직할 회사를 고르면 좋을까?
연휴에 외부의 주니어 개발자분을 만나서 커피챗을 진행했다. 커피챗에서 받은 질문은 "향로님은 4개의 회사를 다니셨고 3번의 이직을 하셨는데, 3번다 이직이 만족스러웠냐?" 였다. 나는 3번의 이직이 모두 만족스러웠다. 그 타이밍에 그 회사들을 간 것에 대해 정말 잘한 선택이라고 생각하고 있고 실제로 이후의 커리어에도 계속 도움이 되었다. 어떻게 그럴수 있었을까? 에 대해 답변 드린 내용이다. 보통 "후회없는 이직을 하려면 어떻게 해야하느냐", "언제 이직하면 좋으냐" 라는 질문을 자주 받는데, 여기엔 여러 답변들이 있을 수 있다. 더이상 회사에서 성장하지 못한다고 느낄때 회사가 더이상 성장하지 않는다고 느낄때 회사의 조직 문화가 너무 안맞다고 느낄때 사람간의 관계가 너무 힘들때 등등 퇴사/이직의 트리거는..
2024.04.13
-
일의 힘듦
사내에 공유드렸던 내용을 기록차 남겨둡니다. 오늘 A Cell의 스프린트 플래닝때 이야기 드린 내용이긴한데, 글로벌 프로젝트를 진행하면서, 혹은 플레이어, 앱, (예상치못한) 데이터 엔지니어링 등 새로운 환경에 도전하는 제품팀 분들도 들으시면 좋을것 같아서 공유드려요. 저는 여자친구랑 대략 10년정도 연애를 했는데요. (2014년부터) 10년 내내 거의 안싸우다가 이번에 결혼식 준비하면서 10년치를 몰아서 싸우고 있어요. (어제도....) 10년을 만나는 동안 웬만한 커플이 싸우는 일에는 저희는 거의 싸우지 않아서 결혼준비도 무난히 잘 끝날것 같다는 생각을 했는데요. 막상 결혼식을 준비하다보니 상대가 피곤한 상황인걸 알고 있음에도 어쩔 수 없이 확답을 요구하고, 같이 움직여야하는 상황이 계속 생기더라구요..
2024.04.09
-
혼란하게 진행하기
요즘 픽사의 CEO 에드 캣멀이 쓴 "창의성을 지휘하라" 를 보고 있다. 여기를 보면 스타트업에 너무 적합한 이야기가 있다. "사람들은 효과가 검증된 것, 예컨대 과거에 통한 스토리, 방법, 전략에 안주하고 싶어한다. 새로 고안한 방법이 효과가 있다고 판명되면, 이 방법을 계속 사용한다. 조직은 이런식으로 학습한다. 조직은 성공을 거둬 성장할수록 기존 접근법에 집착하고, 점점 더 변화를 거부하게 된다." "안정적인 것을 추구한다고 안전해진다는 보장은 없다. 무작위성을 두려워하는 대신 인생에서 무작위성을 피할 수 없다는 사실을 인식하고, 무작위성을 긍정적으로 활용하는 선택을 내릴 수 있다고 믿는다. 예측할 수 없는 상황은 창의성의 산실이다." "픽사의 열 번째 장편 애니메이션 업(UP) 은 픽사의 작품 중..
2024.03.31
-
블로그 누적 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