New
-
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
-
테스트 메소드 (함수) 이름은 비즈니스 내용을 사용하기
테스트 메소드 (함수) 이름은 비즈니스 내용을 담아야한다. 이는 테스트의 의도를 명시적으로 표현하기 때문에 중요한데, 테스트 코드를 작성하는 것에 집중한 나머지 이름에 대해서는 크게 신경쓰지 않고 넘어가는 경우가 많다. 예를 들어 다음과 같은 기존의 테스트 코드가 있다고 가정해보자. // bad describe('ArticleService', () => { it('create article pending status', async () => { const limitOverUserId = await createLimitOverUser(); const article = await sut.create(limitOverUserId, '테스트글'); expect(article.status).toBe(Article..
2023.08.05
-
PostgreSQL 11 에서의 add column not null & default 성능 개선
Aurora MySQL 5.7까지만 써본 경험에서 Online DDL 은 여전히 부담스럽다. 그럼에도 대량의 데이터가 쌓인 테이블에 DDL을 수행하는 것은 서비스를 운영하다보면 피할 수 없다. 100GB 이상의 테이블에 Online DDL로 컬럼을 추가해도 1시간이 넘도록 수행되던 경험을 해보면 가능한 기존 테이블에 컬럼을 추가하는 등의 DDL 작업은 피하고 싶어진다. 다만, MySQL과 다르게 PostgreSQL에서는 오래 전부터 일부 ALTER 작업에 대해서는 잠금 없는 변경이 가능하다. 이는 MySQL에서는 테이블 구조를 변경할때 전체 테이블의 데이터를 새로운 구조로 복사하는 방식을 취해서 테이블의 크기가 큰 경우 오래 걸리는 것과 다르게 PostgreSQL에서는 테이블 구조 변경 작업시 meta ..
2023.08.01
-
원하는 프로젝트에 참여 하고 싶을때
팀에서 일을 하다보면 어떤 프로젝트가 진행될때 나도 함께 하고 싶을때가 종종 있다. 누가 봐도 커리어에, 성장에 도움이 될 것 같은 그런 프로젝트들이 진행되고 나 역시도 그런 프로젝트에 참여 하고 싶은 그런 경우 말이다. 리더가 그 프로젝트에 나를 포함시켜준다면 가장 좋겠지만, 보통은 그렇지 않고 다른 멤버가 프로젝트에 포함된다. 내가 그 프로젝트에 너무 참여하고 싶다면 어떻게 해야할까? 가장 먼저 용기를 내는 것 부터 시작이다. 리더에게 이야기를 해야한다. 그 기회를 갖고 싶다고. 하지만, 동호회가 아닌 회사라는 조직에서는 그것만으로는 기회를 얻진 못한다. 항상 일은 가장 적합한 사람에게 맡긴다. 모든 팀원이 하고 싶은 일을 하는 곳이 아니다. "잘해낼 수 있을까 걱정이 되지만 그래도 참여하고 싶다" ..
2023.07.16
-
JetBrains IDE AI Assistant EAP 후기 (2023.07.12)
2023년 6월 26일, JetBrains에서 AI Assistant 기능이 추가 되었다. JetBrains IDE의 AI Assistant 현재 (2023.07.12) 까지 정식 기능은 아니며 EAP 버전에서만 사용 가능하다. GPT 채팅이 있어서 IDE에서는 어떤 차별점이 있을까 궁금해서 EAP 버전을 설치해서 사용해보기 시작했다. 아래 모든 단축키는 Mac을 기준으로 한다. 1. 설치 IntelliJ나 WebStorm 등 IDEA 에서는 다 지원하기 때문에 어떤 IDE라도 EAP 버전을 설치하면 바로 사용할 수 있다. EAP 버전을 설치하는 방법은 JetBrains Toolbox 를 설치하고, 이를 실행해보면 다음과 같이 설치된 IDE들의 목록이 나온다. 여기서 EAP 버전을 설치하고 싶은 IDE의..
2023.07.12
-
AWS Lambda를 활용한 동적 Redirect Server 구축하기 (Dynamic HTML Serving)
기존 프로젝트에서 신규로 페이지를 만들었지만, 해당 페이지의 공유 링크는 기존 프로젝트의 meta tag가 아니라 신규 페이지 전용 meta tag 가 필요할 때가 종종 있다. 카톡방 공유 링크의 미리보기나 여러 크롤러들의 수집등에 유리함을 얻기 위해서는 Server Side에서 meta tag를 만들어서 HTML을 내려주는 것이 좋다. 하지만 아래와 같은 환경이라면 이렇게 Server Side를 동적으로 그려내기가 어려울 수 있다. 기존 프로젝트의 레거시로 인해서 동적으로 Server Side에서 meta tag를 수정하기가 어렵거나 SPA로 구축되어 단일 HTML로만 관리되고 있어 Server Side에서 meta tag 를 수정하기 어렵거나 그래서 원하는 meta tag를 가진 공유 링크만 담당하는..
2023.07.08
-
지표 일회일비
어제 저녁 우리 회사의 2번째 서비스인 랠릿의 팀원분들과 이야기를 나누었다. 신규 서비스가 런칭하고, 약 1년간 운영을 해왔다. 그리고 계속해서 신규 기능을 넣고 있지만 지표가 내맘같이 오르지 않고 있다. 이럴때 보통 해당 제품의 개발자들은 매일 매일 서비스 지표를 확인하고 일회일비 한다. 그래서 그 부분에 대해 내 생각을 팀원분들께 전달해서 슬랙으로 전달드렸다. 아래 내용은 그 슬랙의 내용 중 민감한 부분을 제외한 전문이다. 최근에 주식 차트 보듯이 매일 매일 서비스 지표를 확인하고 왜 안오르냐고 답답해 하는 모습이 눈에 띄어서 이야기를 드렸어요. 아마 랠릿의 담당자분들은 이런 것에 목말라하실것 같아서 제 이야기를 좀 하고 싶었습니다. 랠릿 이라는 서비스는 런칭한지 이제야 1년 반, 제대로 목적 조직이..
2023.07.08
-
인연은 어디서나
최근에 영한님을 만나서 2~3시간 이야기를 나누었다. 영한님 차 타면서 집으로 가는 길에 예전에 함께 일하던 때에 대한 것들을 다루다보니 과거 생각이 많이 났다. 그러면서 그때 참 같이 일해서 좋았고, 선물 같은 시간이였다는 이야기를 나누었다. 다른 곳에서도 몇번 언급했지만, 영한님과의 인연은 페이스북 DM으로부터 시작이였다. 그 전까지는 컨퍼런스, 책으로만 뵙던 분을 DM으로 연락을 받았던 것이다. 그것도 내 블로그를 보시고 나서 말이다. 당시에 잘 다니고 있던 회사가 있었지만, 영한님을 비롯해서 당시에 유명하신 많은 분들과 함께 일할 수 있는 경험은 다시 없을것 같단 생각에 합류를 하게 됐다. 그리고 스타트업에서 성장하는 경험, 엔지니어링이 조직에 기여하는 법, 회사와 조직원이 동반 성장하는 경험 등..
2023.06.29
-
3. 좋은 함수 만들기 - Null 을 다루는 방법
여기서는 null 과 undefined 를 구분하지 않고 null 로 통일해서 표현한다. 정적 분석 서비스 rollbar 에서 1000개 이상의 JS 프로젝트에서의 소프트웨어 결함 통계를 공개했다. (출처: top-10-javascript-errors-from-1000-projects) 상위 1~10위까지의 대부분이 null과 undefined 로 인한 문제였다. 이 외에 (과거 자료지만) 안드로이드 플레이 스토어의 Top 1,000 Popular Apps 들을 분석한 결과에서도 NullPointerException 가 전체 결함 중 2번째였다. (출처: Multi-objective Automated Testingfor Android Applications) 이 만큼 빈값(Null, Undefined) ..
2023.06.24
-
좋은 API Response Body 만들기
기존 SSR 시스템(jquery + Server Template)을 API 기반의 신규 시스템으로 전환하는 작업을 하면서 팀의 백엔드 개발자분들께 Response Body 관해서 종종 코멘트를 한다. 이런 코멘트들이 쌓이다보니 그냥 한번에 사내 위키로 정리하는게 좋겠단 생각에 먼저 블로그에 정리하게 되었다. 일반적인 내용들 + 팀 전용 내용들을 다 같이 담아서 사내 위키에 남기려고. 정답이 있는 것은 아니지만, 개인적으로 선호하는 Reponse Body 규칙들이 있다. API 역시 사용자 인터페이스이다. 인터페이스라는 측면을 무시하고, 내가 편한 방법, 혹은 기준 없이 API의 Body를 만들다보면 정작 사용해야하는 쪽에서 불편할때가 많다. (사용자 인터페이스임에도 불구하고 말이다) 아래는 내가 선호하는..
2023.06.10
-
100미터 17초에 달리기
최근에 교육생분들을 대상으로 신입 개발자를 준비할때 있었던 일들에 대해 이야기를 나누는 시간을 가졌다. 이제막 개발을 시작하게된 분들도 계시고, 컴퓨터 공학을 전공했지만 계속해서 취업에 실패해서 교육기관에 참여하신분들도 계시고 다양했다. 공통된 질문 기저에 깔린 걱정은 "내가 다른 사람에 비해 부족한데 어떻게 극복하느냐" 였다. 그래서 그에 대한 내 생각을 전달드렸다. 국비교육기관이나 부트캠프에서 여러 동기들과 함께 개발을 하거나, 신입 개발자로 입사하여 비슷한 연차의 다른 개발자들과 같이 일을 하다보면 내가 썩 영민하진 못하다는 생각을 하게 된다. 이클립스는 커녕 Java도 처음 하는 신입 개발자분이 나보다 훨씬 더 좋은 퀄리티로 과제를 해결한다던가 중학교부터 코딩을 시작해서 나와 같은 나이에 이미 개..
2023.06.04
-
Number와 boolean 은 최대한 Not Null로 선언하기
테이블 설계시 종종 받는 질문 중 하나가 Boolean과 Number 컬럼의 Not Null 유무이다. 비즈니스적으로 기본값이 있는 경우가 아니면 유연하게 하기 위해 nullable 로 선언하는 경우를 자주 본다. 테이블의 Boolean과 Number 타입 컬럼을 nullable 로 설정하면 여러 문제가 발생할 수 있어서 가급적 추천하지 않는다. 대표적으로 다음과 같은 문제가 있다. 1. 혼란스러운 의미 컬럼을 nullable 로 설정하면 기본값이 null 이 되므로, 데이터의 의미가 굉장히 혼란스럽게 된다. 예를 들어, boolean 컬럼이면 값이 true, false, null 세 가지 상태가 될 수 있다. 이는 '참', '거짓', '미확인' 의 세 가지 상태가 된다는 것이다. (일부 상황에서는 유용..
2023.06.02