본문 바로가기

전체 글

(10)
Wanted Preonboarding - 4주차 마지막 과제는 개인과제다. 이미 이전 직장에서 마땅한 사수없이 혼자 개발부터 배포까지 진행을 해봤기에, 막막하거나 두려운 부분, 개발도중 막히는 부분 없이 진행했다. 특히, 이번 과정을 통해서 새로 써보게된 Sequelize ORM이나 Promise의 .all(), .race(), .allSettled() 같은 함수들, Postman의 Collection 부가기능들을 처음부터 천천히 다시 사용해보는 기회가 되었다. 다만 여전히 github를 어떻게 적극적으로 써야할지도 막막하다. 프로젝트 작업을 시작하기 전에 Issue를 설정하고, Project 기능들을 좀더 활용해봤어야 한다는 생각뿐이다. 그래도 Readme.md 파일 작업을 하면서 그동안 미뤄왔던, Markdown 작성을 연습해볼 수 있던 좋은 기회..
Wanted Preonboarding - 3주차(2) 이번 과제를 진행하면서 가장 큰 문제는 Geography 자료의 처리였다. 단순 위경도 정보를 Point,LineString,Polygon등 연산 가능한 자료형으로 WKT형식으로 DB에 레코드로 넣는 것부터 시작해서 아래와 같은 테스트용 구역지도를 만들었다. 이후 킥보드를 반납한 위치가 특정 구역에 포함되는지를 검사하고 활동 구역을 벗어난 경우에 벗어난 거리를 측정하는 과정을 ST_INTERSECT와 ST_DISTANCE_SPHERE와 같은 빌트인 함수를 이용해서 판단을 하였다. 그리고 이후 추가될 다양한 할인/벌금 정책을 위해 책임연쇄패턴을 적용했다. 흔하게 웹 프레임워크에서 사용되는 middleware나 pipeline과 유사한 디자인 패턴이다. 해당 정책을 구현하는 체인을 추가해주면 확장되는 간단한..
Wanted Preonboarding - 3주차(1) 이번 과제는 Batch task를 구현하는게 핵심이었다. 공공데이터 OpenAPI를 통해 임상시험 자료를 불러오고, 해당 자료에 대한 업데이트를 제공하는 서비스를 만들어야 하는데, 공공데이터 OpenAPI에서는 직접 업데이트 여부에 대한 알림을 주지 않기에 Polling방식의 Batch task를 설계해야 했다. Polling 방식 특성상 OpenAPI를 통해 불러온 자료가 실제로 업데이트 되어있는지 확인하려면 직접적인 데이터 비교가 유일한 방법이다. 다만 데이터를 날것 그대로 비교하는 경우, 시간적 비용이 천문학적으로 커지게되니, 파일과 데이터의 무결성 검사에 사용되는 MD5 해싱을 사용했다. 이를 통해 해시 값의 변경 여부에 따라 업데이트가 필요한지에 대해 결정하였다. Polling을 구현하는 방법은..
Wanted Preonboarding - 2주차(2) 이번 과제에 있어서 가장 큰 핵심은 데이터베이스 쿼리 튜닝이었다. 영광스럽게도 내가 그 역할을 맡았고, 과제로 제시된 거래 내역이 1억건을 넘어갈 때의 고려 에 대해서 지난 9개월간 이전 직장에서 일했던 경험을 바탕으로 진행해봤다. 1. subquery를 이용한 수동 execution plan subquery를 이용해 시스템의 자동으로 생성되는 execution plan이 아닌 의도한 대로 최적의 탐색 방법이 나오도록 했다. 거래내역의 특성상 온전히 나의 거래내역만 보여주면 되고, cardinallity 또한 의미있게 높을 뿐더러, FK index가 되어있어서 첫 where clause는 accountNumber에 할당 했다. 다음은 입금,출금으로, 50%의 cardinallity 기대값을 갖는 tran..
Wanted Preonboarding - 2주차(1) 서비스 도중에 의도치 않은 클라이언트의 종료로 인해 진행중이던 데이터가 소실되는 경우를 어떻게 처리하느냐가 이번 과제의 핵심이었다. 근본적으로는 Front-end에서의 처리를 포함하면 사실 방법은 많다. Back-end에서 제한하고서 생각했을때는 별로 방법이 없다. ssh처럼 인풋마다 네트워크를 통해 해당 내용을 전달하고자 한다면, http의 무거운 헤더로 인해 너무 비효율적이게 될 것이다. 결국 Header를 불필요하게 자주 보내지 않고 실제 사용자 데이터만을 간단하게 받을 방법이 필요한데, Long-polling이나 Websocket이 이에 적격이다. 둘다 기초는 Http에 두고 있는 만큼, 원래의 코드에 추가하기도 어렵지 않다. 사실 이 부분은 Http에 대한 의존성을 포기하면 상당히 쉽게 해결될 ..
내 세상을 계속 펼치기 코로나가 세계적으로 확산되면서 IT 문외한인 우리 아빠마저도 가상세계와 비트코인에 대한 관심이 상당히 높아졌다. 사실, 이런 가상세계는 이전부터 상당히 다양한 형태로 존재해 왔지만, 사람들은 이런 것들을 제대로 못 느끼고 있었던 것 같다. 단순히 메타버스와 같은 게임이나, 그래픽 공간외에도, 이렇게 글을 쓰는 블로그나 아바타 채팅같은 것들도 가상세계의 하나이고, 아예 컴퓨터라는 전기,전자공학의 산물이 등장하기 전에도, 영화와 책, 그림으로도 사람들은 자신이 상상하던 자기 자신만의 세계를 펼치고 있었다. 그리고 이제는 이런 자신의 세계를 펼치는 모든 행위를 거의 컴퓨터를 사용한다. 글도, 그림도, 음악도, 영화도, 모두 컴퓨터를 사용해서 만들어진다. 그리고 이런 시대에 편승하는지, 모두다! 누구나! 프로그..
위코드 x 원티드 Pre-onboarding에 참여하며 첫 직장이자, 이전 직장을 퇴사하기 까지 참으로 많이 고민했다. '사수 없이도 혼자서 천천히 공부하면서 하면 다 해낼수 있다' 는 마음가짐도 점점 시들어가고 있었고, 정상적인 개발 프로세스를 제대로 거치지 못한 결과물이 유지보수에 난항을 겪는 이유도 몸으로 깨달았다. git를 비롯한 그룹웨어 같은 협업에 도움을 주는 도구 없이, 오늘 뜬금없이 업데이트 게시하자고 하면 아무 탈 없이 게시가 가능하다고 생각하면서, 그러면 적어도 git는 같이 쓰면서 효율을 높이자는 말에, "나이가 많아 배울 정신이 없다"는 말로 일관하는 것에 참다가 참다가 연속된 3시간 수작업 merge에 완전히 번아웃이 왔었다. 그렇게 퇴사를 선언하고, 이제 어떤 회사를 목표로 할지 고민하고 있다가, 막상 내 모습을 보니, 단 둘이서 일..
내가 컴퓨터로 먹고 살겠다고 마음을 먹었던 것은... 사실 내가 처음으로 프로그래밍을 접했던 것은 스타크래프트 캠페인 에디터였다. 내가 초등학교 4학년쯤엔가 처음으로 호기심에 건드려봤는데, 그때는 뭐가 뭔지 모르고 그냥 아무렇게나 지형 브러시 칠하고, 그냥 자원만 즉시 지급하는 트리거를 넣는 정도였던거 같다. 그리고 갑자기 어디선가 본 "할머니를 우리집에 초대해요" 같은 주제였던 만화인지, 교과서의 삽화 따위였는지 모르는 것에서 말하는 인터넷 홈페이지 이야기를 보고 처음으로 html을 접했었다. 그게 초등학교 6학년이었던거 같고, 아마 그때 단순하게 기능적인 요소가 없는 html에 바로 실증을 느꼈는지, 그렇다고 js를 다루기에는 어려웠는지, 다시 스타크래프트 캠페인 에디터로 돌아왔다. 그때부터는 단순한 트리거가 아닌 유닛의 소유권을 넘기고, 일정 구역에 ..