소프트웨어 개발은 항상 새로운 것을 배우고 문제를 해결하기 위해 끊임없이 노력하는 분야입니다. 이러한 작업에서 적절한 질문을 하고 이를 해결하는 것은 매우 중요합니다. 그래서 나는 "좋은 소프트웨어 개발자는 좋은 질문을 하는 사람이다"라는 주장에 동의합니다. 우선, 좋은 질문을 하는 것은 자신이 직면한 문제나 과제를 이해하고, 문제의 본질을 파악하는 데 매우 중요합니다. 좋은 소프트웨어 개발자는 문제를 분석하고 해결책을 찾기 위해 깊이 있는 질문을 할 수 있어야 합니다. 그들은 단순한 예/아니오 질문이 아니라, 왜 그렇게 생각하느냐는 것을 물어봄으로써 문제의 본질을 파악하려고 노력합니다. 이를 통해 좋은 개발자는 복잡한 문제를 해결할 수 있습니다. 또한, 좋은 질문을 하는 것은 다른 사람들의 경험과 지식..
푸시 발송을 FCM 레거시 API로 발송하고 있어서, 최신 SDK를 이용해서 푸시가 발송되도록 코드를 수정했다. 페이로드 형태가 약간 변했는데, 호환될것 같은 형태로 코드를 수정했다. 당시 가지고 있던 아이폰으로 발송 테스트는 잘 했다. 그러나 배포 다음날 대량 푸시발송을 했을 때, 안드로이드폰의 지표가 이상한것을 확인했다. 확인해보니 푸시는 발송되었지만, 푸시 랜딩과 푸시를 수신했다고 하는 로그를 저장하는 기능이 동작하지 않았다. 안드로이드 개발자의 도움을 받아 원인은 파악했다. 원인은 페이로드 형태가 이전과 호환되지 않는 것이었고 호환되도록 수정해서 바로 배포했다. 이 오류로 안드로이드로 발송된 푸시가 정상동작하지 않았고, 고객은 특정 메시지의 푸시를 눌렀지만 앱만 켜지고 아무것도 안하는 경험을 했다..
스터디 소개 2022년 6월 30일부터 2022년 11월 3일까지 마이크로서비스 패턴 스터디를 진행했습니다. 진행하기 전에 신청 공고를 페이스북, 링크드인, 커리어리에 올려 두었고, 간단한 폼으로 신청을 받았어요. 어떤 일을 하시는지 여쭤보았고 왜 공부하고 싶으신지 여쭤봤습니다. 그리고 적극적으로 답해주신분들을 제 주관적으로 판단해서 스터디 멤버를 구성했습니다. 중간에 나가신 분도 계셨지만 그래도 열분정도 끝가지 스터디에 참여해주셨어요. 다양한 회사에서 오셨고 다양한 경험을 가지고 계셨어요. 운이 좋게도 각 패턴에 대해서 고민을 하셨던 경험이 있는 분들이 있어서 이야기가 재미있게 오갔습니다. 연차는 비교적 다양하진 않았어요. 2-4년차 분들이 대부분이셨어요. 그래서 더 열정적이었던 것 같아요. 13개의 ..
공부하려는 의도 우리가 작성한 대부분의 코드들은 테스트가 어렵고 구조를 파악하기 어렵다. 주요 기능에 대해서 테스트하기 위해서 테스트가 실행되는 시간과 상황을 명시해야지 테스트가 정상적으로 수행된다. 이것은 해당 코드가 시간과 상황에 따라 다르게 동작하는 코드이기 때문이다. 이런 코드나 기능을 부수효과(side effect)가 있다고 하고, 그렇게 부수효과가 있는 기능을 액션이라고 칭한다. 반대로 단순히 부수효과 없이 동일한 인풋이라면 동일한 아웃풋이 나오는 기능을 계산(함수)이라고 칭한다. 계산은 당연하게도 시간과 상황을 명시할 필요없이 인풋과 예상되는 아웃풋만 있다면 쉽게 테스트 가능하다. 기존 코드에서 액션과 계산, 데이터를 구분해서 코드를 구분하고, 주요 로직을 계산함수로 추출하면 주요 로직을 쉽..
쏟아지는 일 완벽하게 해내는 법 뉴욕타임스 베스트셀러 Getting Things Done의 2016년 최신 업그레이드판. 초판이 출간되자마자 이 책에서 소개한 일 정리법은 ‘GTD 방식’이라 불리며 전 세계 수많은 직장인들에게 큰 반향을 일으켰 www.aladin.co.kr 책 읽기가 너무 힘들었다. 같은 말을 반복하는 느낌이 강했다. 그 와중에 인상깊은 문장들이 있어서 꾸역꾸역 읽어나갔다. 완독한 것에 대해 스스로에게 매우 칭찬하고 싶다. 나는 지금 쏟아지는 일 속에 살고 있다. 그리고 그 일들에 휩쓸려 살아가고 있다. 심지어 오늘도. 회사일, 개인적인 일들이 맥락없이 쏟아지고 계속 집중을 스위칭하며 살아가고 있다. 이 책은 그 상황에서 나에게 많은 액션아이템을 제안했다. 올해 상반기에는 이 제안들을 ..
끊임없이 나에 대해서 관찰했다. 과연 내가 언제 기분 좋은 상태를 유지하는지, 언제 일을 잘하는지, 언제 우울해지는지 등등. 그리고 더 나은 내가 되려면 뭘 해야할지 고민했다. 최근에 그 고민에 잠정적인 결론을 얻어서 적어두려고 한다. 나를 분산시키는 모든것과 싸운다. 내가 몰입하는 시간을 최대한 늘린다. 결국 나란 인간은 외부 자극에 끊임없이 분산된다. A를 하다가도 B를 보면 그게 더 하고 싶다. 관리하지 않으면 끊임없이 외부 자극에 휘둘리고 분산된다. 그리고 그 분산은 효능감을 떨어뜨리고 나를 우울한 상태로 만든다. 이 분산에 적극적으로 대응하지 않으면 나는 좋지 않은 상태를 유지하게 된다. 심지어 휴가나 여행을 갔을 때도 그렇다. 이것 저것 다 하고 싶어서 조급한 마음에 이것 저것을 따라가기 시작..
돈(금원)과 관련된 기능은 중요하다. 문제가 발생했을 때, 금전적 손실을 일으킬 수 있다. 만약 작은 회사라면 금전적 손실이 회사 전체의 리스크가 될 수 있다. 돈과 관련된 기능을 다룸에 있어서 다른 여타 기능들 보다 더 면밀하게 살필 필요가 있다. 돈과 관련된 기능을 어떻게 다뤄야할 지 동료들과 회고한 내용을 좀 적어두려고 한다. 1. 이상 상황을 곧바로 탐지할 수 있는 장치가 있어야한다. 문제는 언제든 발생할 수 있다. 문제를 빨리 감지하는 것이 중요하다. 간단하게 비즈니스 메트릭을 구축하고 임계치가 벗어났을 때 알람을 주게 한다던지, 특정 에러상황에서 에러 알림이 오게 한다던지, 이상 탐지 장치를 꼭 구축해야한다. 2. 이상 상황의 문제를 빠르게 식별하고 차단 및 해결할 수 있는 장치가 있어야한다...
의도나 생각 없이 mysql collation을 general_ci을 쓰거나 unicode_ci를 쓰곤 했다. 이번에 unicode_ci로 통일하게 되었는데, collation 때문에 의도치 않은 상황을 겪었다. 그래서 collation에 대해서 살짝 파보았다. Character Set Character Set은 문자를 어떻게 표현할 지 정의한 집합이다. 세상에 존재하는 많은 문자들을 디지털로 표현하기 위해서 정의했다고 볼 수 있다. 이 시대에 우리가 주로하는 utf-8이 바로 Character Set 이다. utf-8은 세상의 대부분의 문자와 특수기호, 심지어 이모지를 1~4바이트로 표현할 수 있게 정의해두었다. mysql에서는 utf8을 3바이트로 표현하는 선택을 했다. (세상의 모든 언어가 21bi..
2023-02-12 업데이트 이제 저는 커피챗 플랫폼을 이용하지 않고, 무료 커피챗 신청을 받으려고 합니다. 고민있으신 분들은 편하게 신청해주세요. 익명으로 커리어 관련한 가벼운 상담을 할 수 있는 커피챗이라는 서비스를 알게 되었다. 현재 베타 서비스 중으로, 자신의 회사와 직무, 경력을 인증한 파트너에게 커피챗을 요청하고, zoom을 통해서 20~25분 동안 가볍게 이야기할 수 있는 서비스이다. 커피챗 한번에 가격은 14,900원이고, 파트너는 10000원을 받게 된다. 지금까지 나에게 4번의 요청이 왔고, 2번의 노쇼와 2번의 실제 대화가 있었다. 그 후기를 적어보았다. 2번의 노쇼 내가 가능한 시간대를 저녁대로 설정했다. 파트너로 등록하고 커리어 상담이 왔다. 카카오톡으로 일정에 대해서 리마인드 해..
기존에 s3에 있는 한글 이름을 가진 엑셀 파일을 변경하고 싶어서 맥에서 같은 이름의 엑셀 파일을 만들어서 다시 업로드했다. 그런데, 덮어써지지 않았다. 엥? 그래서 이래저래 삽질을 하다보니 유니코드에서 한글의 조합형(NFD)과 완성형(NFC)이 있다는 것을 알게 되었고, 맥은 조합형을 사용한 다는 것을 알게 되었다. 그래서 엑셀 파일을 구글 드라이브를 통해서 만들고 다시 s3에 업로드 했더니 잘 되었다. 말그대로 한글 조합형(NFD)는 한글을 초성중성종성을 분리하여 유니코드로 표현한 것이다. 예를 들어, '템' 이라고하는 글자가 있다면 'ㅌ', 'ㅔ', 'ㅁ'이라고 분리해서 유니코드로 표현한다. 완성형(NFC)는 완성된 하나의 글자를 유니코드로 표현한 것이다. 예를 들어, '템'이라고 하는 글자가 있다..
최근 소프트웨어를 만드는 개발자의 연봉 상승이 언론 기사를 통해서 주목받고 있다. 주변의 개발자 지인들도 그런 흐름에 마음이 싱숭생숭하여 이직을 준비한다는 이야기를 듣는다. 그리고 몇번의 이직을 경험해본 나에게 이렇게 묻는 경우가 종종 있다. "뭘 공부해야 할까?" 나는 이 질문 자체가 잘못되었다고 생각한다. 공부해서 이직을 하는 것이 아니라고 생각하기 때문이다. 그 이유를 설명하기 위해서는 내가 생각하는 이직의 정의를 먼저 이야기할 필요가 있다. 이직이란? 이직은 원래 다니고 있는 직장에서 비슷한 업무를 하고 있는 다른 직장으로 옮기는 것을 의미한다. 만약 업무가 바뀐다면 나는 이것을 이직이라기 보다는 전직이라고 말한다. 그리고 기존의 업무 경험이 없는 상태에서 직업을 얻는 것은 신입으로 구직을 했다고..
테스트 코드가 작성하는 것이 어렵다고 많이 이야기한다. 테스트 코드가 없는 상태로 성장한 프로젝트들, 그리고 외부 의존성(DB, 외부 API, 파일 쓰기 등)이 많은 프로젝트들의 코드가 보통 테스트가 어려운 경우가 많다. 과연 그때 우리는 어떤 선택을 해야할까? 추측하건데 보통은 그냥 작성하고 배포한 후, 직접 API를 호출해보거나 확인해볼 수 있는 UI를 통해서 테스트를 해볼것이다. 이런 사용자 테스트는 비용이 크다. 테스트할 여러가지 상황을 재현하기도 쉽지 않을 수 있고, 버그 발견 후 수정하고 다시 확인하는데도 오래 걸린다. 혹자는 실 사용자에게 테스트를 넘길 수도 있다. 테스트 없이 그냥 서비스를 배포하는 것이다. 이런 상황에서 예상되는 결과는 다음과 같다. 문제없이 기능이 배포 되었다. 문제가 ..
휴일에 버그를 발견했다. 한동안 존재하던 버그였다. 발견하자 마자 바로 고쳤다. 바로 공유할까 하다가 휴일 끝나고 공유해야지 라고 생각하고 휴일을 보냈다. 그리고 평일에 까먹었다. 다른 동료가 데이터를 보던 도중에 그 버그가 있었다는 것을 발견했다. 다음 부터는 문제가 있으면 바로 공유해달라는 피드백을 받았다. --- 개발자가 자의적으로 어떤 버그는 큰 영향이 없는 버그라고 판단하고 공유를 하지 않을 수도 있다. 그러나 데이터를 기반으로 의사결정하는 경우에 (공유받지 못한) 그 이벤트를 통해서 영향받은 데이터가 팀의 의사결정이 올바르지 않은 방향으로 가도록 할 수 있다. 버그가 있었고 그 버그가 데이터를 왜곡했고 팀은 왜곡된 데이터로 잘못된 의사결정을 할 수 있다는 뜻이다. 공유를 하지 않은 개발자의 판..
C사에서 어느날(2020-12-15) 링크드인으로 정성담긴 포지션 제안이 왔다. 많은 리쿠르터 분들이 연락을 주셨었지만 보통은 무시했는데, 글의 정성을 보고 한번 진행해봐야겠다고 생각했다. 전화 통화를 통해서 채용 과정에 대해서 설명을 들었다. 1. 코딩 테스트 2. 면접관과 1:1 코딩 테스트 2회 3. 면접관과 1:1 코딩테스트 1회, 아키텍팅 테스트 1회, 컬쳐핏 면접 다른 리쿠르터에게도 이 설명을 듣고 하기 싫어져서 안 했었지만, 이번에는 가볍게 한번 진행해보기로 했다. 모든 면접은 비대면으로 진행했고 총 한달이 소요되었다. 코딩 테스트 프로그래머스에서 진행했다. 난이도는 어렵지 않았다. 자바로 풀라고 해서 그게 좀 귀찮았다. 나의 코딩테스트 스타일에 대해서 간단히 소개하면, 최대한 빨리 간단한 ..
올해 나름 책을 많이 읽었다고 생각했는데, 완독한 책이 10권 밖에 안되서 아쉽다. 내년에는 20권을 목표로 고고! 사피엔스 - 유발 하라리 사피엔스 이제 우리는 무엇을 인간이라고 할 것인가지금으로부터 10만 년 전, 지구에는 호모 사피엔스뿐만 아니라 네안데르탈인, 호모 에렉투스 등 최소 6종의 인간 종이 살아 있었다. 이후 호모 사피엔스 book.naver.com 인간으로서 인간이라는 종을 메타 인지하고 앞으로의 인간과 나에 대해서 고민하게 되었던 책. 미라클 모닝 - 할 엘로드 미라클모닝 아마존 종합 베스트셀러 1위!전 세계 18개국 판권 수출출간 첫해에 아마존 역사상 가장 높은 별점을 받은 책출간 전부터 [르몽드]가 격찬한 “기다려지는 아침을 만들어주는 책”저자는 우리 모 book.naver.com..
문제 상황 직접 http 요청(curl)을 할 경우에는 응답에 CORS 관련 헤더가 적절하게 내려오는데, 하이브리드 앱 웹 뷰에서 그 API를 호출하면 CORS 오류가 발생 실제 요청을 수행하는 backend 서버 까지 여러 레이어가 있는 상황 (사용자 요청 --> NGINX --> GATEWAY --> BACKEND SERVER) 문제 접근 CORS 문제라고 판단하고 관련 헤더가 잘 세팅이 되는 지 확인 잘 되는 것 확인 후 로그 분석했지만 딱히 문제 없음 CORS에 집중해서 직접호출과 웹뷰에서 API 호출을 비교 특정 시스템 웹뷰에서 특정 문제가 있는지 확인 결국 못찾음... 실제 문제 CORS랑 전혀 상관없는 nginx의 request body 크기 제한 이슈 사이즈가 큰 파일을 request bo..
백앤드 개발자는 서비스의 비즈니스 관련 요구사항을 정리하고 코드로 풀어낸다. 작성한 서버 프로그램은 사용자의 요청을 수행한다. 요구사항은 끊임없이 변하고 서비스는 성장한다. 그에 따라서 코드의 양도 많아지고 복잡해진다. 복잡함 때문에 변화의 속도는 느려지고 개발자들은 고통받는다. 유능한 백앤드 개발자는 이 복잡함을 잘 다루는 개발자일 것이다. 복잡함은 여러 형태로 나타난다. 우선 여기저기 의존(참조, 결합)가 많은 코드들이 있을 수 있다. 흔히 말하는 결합도가 높은 코드이다. 그리고 같은 기능이 여기저기 구현되어 관리가 되지 않는 코드가 있을 수 있다. 그리고 용어의 일관성이 없어 코드를 읽기가 어려운 경우도 있다. 나도 이런 복잡함을 경험해왔고 지금도 경험 중인 백앤드 개발자이다. 도메인 주도 설계(D..
몇 년전 우울감이 가득한 날이면, 미드 시즌 3,4를 봤다. 특히 클레어의 남편이자, 세 남매의 아버지의 필을 보면 나는 기분이 좋아졌다. 약간 바보같기도 하지만 자기만의 취미도 확실하고 유머러스하며 가족들을 잘 챙기는 그를 보면 그의 역할을 내가 하고 싶다는 생각을 했다. 최근에는 미드 과 을 가끔 본다. 처럼 가끔은 한심하지만 가족처럼 내 주변에서 희노애락을 같이 느끼는 친구들이 있다면 인생이 외롭지 않을 것 같다고 생각했다. 은 비슷한 친구들이 직장에 있으면 참 좋겠다는 생각이 들게 했다. 막연하게 그런 관계가 이미 있거나 생길 것이라 여기며 살아오다가, 어느날 문득 그런 관계 자체가 판타지라는 생각이 들었다. 사람들은 그런 커뮤니티를 끊임없이 욕망하기 때문에 앞서 이야기한 컨텐츠들을 소비하고 있는..
지난 주 화요일에 정형외과에서 진료를 받고 수요일 (2020-08-05)에 첫번째 도수치료를 받았다. 병원은 회사 근처에 있고, 우리 회사 사람들에게 할인을 해주는 병원에서 하게 되었다. 진단 도수 치료선생님을 만나서 x-ray 사진을 같이 보면서 진단을 했다. 나는 현재 일자목, 일자허리이다. 코어 근육이 약하다. 그래서 허리도 계속 불편하고 연결되어 있는 어깨, 승모도 불편해진다고 했다. 코어 근육이 정확히 어떤 근육인지는 제대로 설명듣지 못했다. 원인 계속 척추기립근을 이용해서 허리를 세우려고 하면서 일자 허리가 되고 허리 통증이 생긴다. 걸을 때 8자로 걷는다. 그러면 아무리 오래 걸어도 코어 근육이 단련되지 않는 다고 한다. 구강호흡을 하는데 그렇게 되면 2차 호흡근을 사용하게 되어 근육이 더 ..
- Total
- Today
- Yesterday
- html
- 회고
- 컨테이너
- 한달살기
- spring boot
- javascript
- 객체지향
- ChatGPT
- AWSKRUG
- Bali
- 웹
- 실수노트
- S68
- hands-on
- 개발자
- 사누르
- container
- ES6
- 독후감
- Docker
- AWS
- 웹을 지탱하는 기술
- spring
- ecma6
- springboot
- rest
- 발리
- sanur
- 도커
- Clean code
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |