분류 전체보기 260

Spring profile 실전 팁: YML 설정 원리 & default profile 구현 방법

Introduction 현재 사내 대출 관리 시스템을 담당하는 서버에서는 매일 특정 시간마다 대출자에게 reminder 메시지를 보내는 작업을 배치(Batch)를 돌려 수행한다. 그런데 해당 배치 작업 시간과 배포 시간대가 겹쳐, 서버 불안정으로 인해 간혹 배치 작업이 종료되는 상황이 일어나는 것을 발견했다. 이때 왜 수시 배포가 아닌 정기 배포냐면, 글로벌 핀테크 도메인인 우리 서비스의 특성상 해당 국가의 법적 이슈로 인해 수시로 배포가 불가능한 상황이다..(심지어 배포도 개발자, 즉 코드를 짠 사람이 배포하면 안된다..까다롭기 그지 없다) 이로 인한 비즈니스 임팩트가 상당한지라 (리마인더 메시지를 보내지 않게 됐을 때 대출 상환에 문제가 있을 수밖에 없으니) 당장 할 수 있는 조치로 배치 작업 시간대..

Spring 2022.12.21

미국 주식투자 1등이 말하는 부자되는 9가지 방법

1. 돈이 있는 곳으로 가라 나는 월가를 선택했는데, 거기에는 무한한 기회가 있기 때문이었다. 그곳에서 재능을 갈고 닦는다면 한계란 없다. 절대 노을을 보고 싶다면서 동쪽을 바라보는 짓은 하지 마라. 2. 돈에 대해 잊어라 대신 최고가 되는데 집중해라. 어떤 분야든 최고는 매우 돈을 잘 번다. 스스로에 투자하고 재능을 발전시켜라. 돈은 최고가 되는 것에 따라오는 자연스러운 부산물이다. 첫째로 지식을 쌓아라. 그 다음은 경험을 쌓아라. 그 다음은 기술(스킬)을 쌓아라. 그러면 돈이 쌓일 것이다. 3. 연 단위로 생각하지 말고 0 하나를 더 붙여라 우리는 우리가 3-5년 안에 할 수 있는 것들을 과대평가하는 반면 10-20년 안에 할 수 있는 것들은 과소평가하는 경향이 있다. 너무 빠르게 얻길 바라는 마음이..

투자 일기 2022.12.08

11월 월간 회고

Intro 22년이 한 달도 채 남지 않았다. 돌이켜보니 정말 빠르게 지나갔던 한 해였다. 마침 엊그제 정글 동기들과 송년회를 했다. 새삼 작년 이맘때쯤 정글을 한 게 믿기지 않을 정도다. 작년 이때는 불안과 걱정 가득한 나날이었는데, 어느덧 자리를 잡고 하루하루 꾸준히 나아가는 모습을 보니 나름 대견하기도 하고. 성장 속도에 대해서는 너무 연연해하지 않기로 했다. 더더더 열심히 해야 하는 마음가짐은 늘 갖고 있어야겠지만, 때로는 놀 수도 있고 쉴 수도 있다. 몰아친다고 한 번에 쭉 성장하는 것도 아니다. 정글에서 지냈던 5개월은 정말 빠르게 성장했던 시간이지만, 그만큼 과몰입하느라 마음이 힘들었던 것도 사실이다. 뭐든 균형이 중요하다. Keep 깃허브 커밋: 13/30 → 분발하자 엉망이긴 했네. 갈수..

회사 팔아 1조 원 번 창업가가 깨달은 행복의 3가지 비결

트위치 창업자가 회사를 매각한 이후에도 계속 창업에 도전하는 과정에서 배운 깨달음에 대한 영상. 1. 인간은 만족할 수 없다. 1조 원을 벌어도 더 높은 곳을 바라본다. 2. 외적인 것은 지속되는 행복을 주지 못한다. 3. 내면에서 지속적인 행복을 찾아라. (Feat. 명상, 운동, 감사) 얼마를 벌면 성공한다고 할 수 있을까? 100억만 벌어도 평생 먹고살 걱정은 없을 텐데, 그에 100배는 족한 1조 원을 번 사람이다. 상상도 하기 힘든 부와 명예를 쌓았다. 그런데도 계속해서 더 높은 곳을 바라보는 게 사람이라고 말한다. 1조 원을 벌면 끝날 것 같지만 그렇지 못했다고 말한다. 높은 곳에 올라가면 주변 역시 달라지기 때문이다. 외적인 행복은 상대적인 차이에서 나온다. 주변 사람들 연봉이 5천인데 나 ..

인사이트 일기 2022.11.28

[Effective Unit Testing] 2장 - 좋은 테스트란?

Ch.2 좋은 테스트란? 무엇이 테스트를 좋게 만드는 걸까? 아래와 같은 고려사항이 있다. 테스트 코드의 가독성과 유지보수성 프로젝트 안에서, 그리고 소스 파일 안에서 코드는 적절히 구조화되어 있는가? 테스트가 무엇을 검사하는가? 테스트는 안정적이고 반복 가능한가? 테스트가 테스트 더블을 잘 활용하는가? 2.1 읽기 쉬운 코드가 유지보수도 쉽다 현업에서 머리를 쥐어뜯게 하는 코드는 모두 접해봤을 것이다. 읽기 어려운 코드는 이해하는 데만 해도 너무 많은 에너지가 소비되기 때문에 유지보수하기가 녹록치 않다. 읽기 어려운 코드일수록 결함 수가 많다. 자동화된 테스트는 결함을 효과적으로 막아주지만, 테스트 역시 코드인지라 가독성 문제에서 벗어날 수 없다. 읽기 어려운 코드는 검증하기도 어렵다. 결과적으로 테스..

독서일기 2022.11.21

[클린 코드] 6장 - 객체와 자료 구조

6장 - 객체와 자료 구조 변수를 비공개로 정의하는 이유가 있다. 남들이 변수에 의존하지 않게 만들고 싶어서다. 그런데 어째서 수많은 프로그래머가 조회(get) 함수와 설정(set) 함수를 당연하게 public으로 설정해 비공개 변수를 외부에 노출할까? 자료 추상화 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 것이 좋다. 똑같이 2차원 점을 표현하는 두 클래스를 예시로 살펴보자. // 구체적인 Point 클래스 public class Point { // 필드값이 public으로 오픈 public double x; public double y; } // 추상적인 Point 클래스 public interface Point { // 필드값이 외부로 노출되어 있지 않고 오직 getter / sett..

독서일기 2022.11.17

[클린 코드] 5장 - 형식 맞추기

5장 - 형식 맞추기 형식을 맞추는 목적 원래 코드는 사라질지라도 개발자의 스타일과 규율은 사라지지 않는다. 오늘 구현한 기능이 다음 버전에서 바뀔 확률은 아주 높다. 이때 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다. 오랜 시간이 지나 원래 코드의 흔적을 더 이상 찾아보기 어려울 정도로 코드가 바뀌어도 맨 처음 잡아놓은 구현 스타일과 가독성 수준을 유지보수 용이성과 확장성에 계속 영향을 미친다. 1. 적절한 행 길이를 유지하라 큰 파일보다 작은 파일이 이해하기 쉽다 소스 코드(클래스가 아닌 파일 전체에서) 길이는 얼마가 적당할까? JUnit, FitNesse 등 유명한 프로그램을 포함해 대다수 자바 소스 파일을 조사한 결과 한 파일에 200줄 미만이 가장 많았다. 500..

독서일기 2022.11.15

11월 1-2주차 회고 (Feat. 현명하게 이슈 공유하기)

Intro 인도에 온 지 일주일이 지났다. 많은 우려가 있었지만 생각보다 잘 적응했다. 특히 예전에 조튜브 인도 여행기 영상 보고 엄청 쫄았는데 막상 인도 도착하고서부터는 각종 회사 지원 덕분에 편하게 다녔다. 휴대폰 유심 개통에 시간이 걸려서 초반 3일 정도는 회사-숙소 외에는 어디도 드나들기 힘들었는데(그와중에 숙소 헬스장은 인도 도착한 다음날부터 엄청 잘 다녔다만) 그마저도 인터넷 사용이 가능한 이후부터는 별 문제 없었다. 유튜브에서는 택시/릭샤 잘못 타서 엄청 고생하는 영상 뿐인데 우버 타면 진짜 아무 문제 없이 잘만 다닌다(물론 델리 한복판이 아닌 신도시 구르가온이라 가능한 일이었을지도?). 숙소도 다들 게스트하우스라 불러서 개고생할 각인가 했는데 막상 와보니 고급 아파트를 임대해서 쓰는 형식이..

회사를 졸업한다고?

“이 회사에서 달성하고 싶은 목표가 뭐예요?” 팀 리드에게 당황스러운 질문을 받았다. 우스갯소리로 나온 얘기였지만 쉽게 넘어가지 못했다. 팀에 합류할 때는 분명한 이유가 있었던 반면 여기서 무엇을 이룰 것인가에 대해서는 크게 고민하지 않았기 때문이었다. 목표라는 건 다시 말해 그것을 성취하고 나면 더 이상 남아있을 이유가 없다는 것이기도 하다. 자연스럽게 언제 이 회사를 떠날 것인가라는 물음으로 귀결됐다. 우리는 언제 퇴사를 고민할까? 흔히들 더 이상 배울 것이 없다거나, 망할 징조가 보인다거나, 중요한 직책을 맡지 못한다거나(승진에서 누락되거나) 할 때 떠나는 걸 고심한다. 그런데 이런 건 목표가 될 수 없다. 생각해보니 이전까지 몸담았던 대학원에서의 졸업과 회사에서의 퇴사가 크게 다르지 않다는 걸 깨..

인사이트 일기 2022.11.13

[클린 코드] 3장 - 함수

3장 - 함수 프로그램의 가장 기본적인 단위: 함수. /** * setUp 페이지와 tearDown 페이지를 테스트 페이지에 넣은 후 해당 페이지를 HTML로 렌더링하는 메소드 * @param pageData * @param isSuite * @return * @throws Exception */ public static String renderPageWithSetupsAndTeardowns(PageData pageData, boolean isSuite) throws Exception { boolean isTestPage = pageData.hasAttribute("Test"); if (isTestPage) { WikiPage testPage = pageData.getWikiPage(); StringBu..

독서일기 2022.11.10