목록전체 글 (138)
DOing
2021년 회고 보러가기 https://doing7.tistory.com/152 1. LINER 일주년 첫 입사날에 설레어했던 것이 엊그제같은데 어느새 1년 3개월이라는 시간이 지나게되었다. 그 시간동안 LINER에서 잊을 수 없는, 재미있는 시간들을 보냈다. 워낙 배운게 많아서 조금 정리해보려고 한다. # 어떻게 지식을 빠르게 습득하고 적용해야하는가를 배웠다. Java-Spring-MySQL-AWS 정도밖에 모르던 내가 Kotlin-Ktor-ElasticSearch-MongoDB-Bigquery-Pub/Sub-GCP 기술적으로 여러 경험을 해볼 수 있었다. 뿐만아니라 FCM 푸시, 이메일, Stripe 결제, iOS 인앱 결제같은 기능들을 처음 구현해보고 배울 수 있었다. 기술 자체들에 대해서도 많이 ..
"엄격한 스키마", RDB의 장점이자 단점으로 꼽히는 특징이다. 이 특징으로 인해 안정적으로 서비스를 할 수 있다는 장점을 얻을 수 있다. 하지만 한 분기에도 수십개의 기능을 만들어내고 또 그 중 대부분을 다시 롤백해야하는 스타트업에서는 데이터베이스의 스키마를 변경할때마다, 트래픽을 제일 적은 시간에 수행해야하고, 그럼에도 일정 시간동안 장애를 감내야하는 상황은 크리티컬하게 다가왔다. 모든 스타트업이 그렇다는 것은 아니지만, 적어도 내가 현재 재직하고 있는 회사에서는 그랬었다. 이러한 문제 상황을 해결하고자 데이터 마이그레이션을 도와줄 수 있는 툴을 조사했었다. Prod과 비슷한 테스트 환경을 만들어 모의 테스트를 하고, 이를 바탕으로 다른 백엔드 엔지니어들에게 공유하고, 설득하여 도입했었다. 현재는 무..
사내에서는 메인 데이터베이스는 MySQL, 사용목적에 맞게 Redis, Elastic Search, Bigquery 다양한 데이터베이스를 쓰고 있다. 하지만, 새로운 요구사항의 데이터의 적재가 필요한 상황을 맞이하게 되었다. 일단 운영하고 있는 데이터베이스에 때려 넣을까 솔직히 고민했지만, 생각하면 생각할수록 요구사항에 맞는 데이터베이스가 없었고, 새로운 데이터베이스인 MongoDB를 도입하게 되었다. 오늘은 그 썰을 풀어볼까 한다. 당시 요구사항은 다음과 같았다. • 방대한 양의 비정형 데이터를 적재해야하는 상황 (feat.팔로잉 기반 피드 아키텍처 설계하기) • 정합성은 조금 떨어지더라도, 고가용성을 지원해야한다. • 데이터 포맷이 향후 달라질 가능성이 있어서 유연한 스키마 구조를 가질 수 있다. •..
MongoDB에서 실행계획을 선택하는 방법 주요 로직 • RDBMS 와 비교했을 때 MongoDB는 각 컬렉션에 대한 통계 정보가 거의 없다. • MongoDB는 규칙 기반의 옵티마이저 (rule-based optimizer) • 규칙기반 옵티마이저는 RDBMS에서 허점이 많아서 거의 사용하지 않는 최적화 방법 • MongoDB는 실행 계획 후보를 모두 동시에 실행(쿼리의 일부분만)해보는 형태로 단점을 보완 예시 1) 한 쿼리에 대해 실행계획 후보가 3개 2) 3개를 동시에 쿼리 실행 3) 3개 중에서 어느 하나라도 먼저 실행이 완료되거나 101건의 도큐먼트를 먼저 검색하는 경우 멈추게 된다. • 101건이 많다고 생각되면 기본값을 변경할 수 있다. 하지만 바꾸려면 collFration과 works 옵션..
Logroate Logrotate는 특정 log 파일이 한 파일로 계속해서 크기가 커지는 문제를 해결하기 위해서, 분산 저장시에 사용한다. 하나의 log 파일에 log가 지속적으로 쌓이게 되면,log 확인이 필요한 경우 하나의 파일이 너무 방대해 확인이 어려워 지고, 디스크 용량 또한 낭비된다. Logrotate는 Linux에서 log 관리를 위해 사용하는데, OS 설치시 기본적으로 설치되어 있다. Option rotate [숫자] : log파일이 5개 이상 되면 삭제ex) rotate 5 maxage [숫자] : log파일이 30일 이상 되면 삭제ex) maxage 30 size : 지정된 용량보다 클 경우 rotate 실행ex) size +100k create [권한][유저] [그룹] : rotate..
100만 구독자, 100k 팔로워를 가지고 있는 인플루언서, 연예인도 아니지만 수많은 구독자를 가지고있는 일반인들을 요즘에는 흔하게 찾아볼 수 있다. 그리고 이런 계정을 팔로워하면, 당연히 내 피드에 떠야한다고 생각했다. 당연하다. 하지만 내가 직접 구현하려고 하니 뭐 하나 당연한게 없었다. 사내에서 "팔로잉 - 팔로잉 기반 피드"프로젝트에 백엔드 엔지니어로써 참여했었다. DB 설계, API 설계, 기능 개발, 배포이후 모니터링 전반적인 작업들을 담당했었다. 이번 포스팅에서는 팔로잉의 아키텍처 설계단계에서 고민했었던 지점들에 대해서 이야기해보려고한다. [ IN 연산으로 처리하기 ] 팔로잉 기반 아키텍처 구조를 생각할때 제일 간단하게 생각해낼 수 있는 방법일 것이다. 내가 따르고 있는 친구들의 게시글을 조..
현재 다니고 있는 회사에서는 함수형 프로그래밍을 코드 전반에서 적극적으로 사용하고 있다. 사내에서 사용하고 있는 언어가 Kotlin이다보니, Kotlin 을 더 잘 사용할 수 있는 방법에 대해 고민하다가 함수형 프로그래밍에 대해서 스터디를 진행했었다. 스터디를 진행하면서 적용해볼 수 있겠다 싶은 내용들은 실제로 프로덕션 코드에 녹이면서 나름대로 함수형 프로그래밍을 적극적으로 활용하고 있다라고 생각했다. 어느날, 함수형 프로그래밍을 공부할까 고민하시던 같은 팀의 프론트 엔지니어 분이 “함수형 프로그래밍이 뭐에요? 도입하면 장점이 뭐에요?”라고 여쭤보셨다. 순간 말문이 막히는 것을 느껴졌고, 내가 함수형 프로그래밍을 사용하고 있다고 생각했지만, 그 장점이 무엇인지 대체 왜 써야하는건지에 대한 답을 명확히 설..
아는 것과 가르치는 것은 다르다는 말은 많이 들어보았을 것이다. 직장에서 일하게되면서 개발자 뿐만아니라 비개발자들과도 소통해야하는 상황을 마주할 일이 많았다. 그럴 때마다 느끼는 것은 안다는 것과 설명하는 것은 다른 것이구나. 내가 이해하는 것을 넘어서 쉬운말로 풀어서 남을 이해시키는 것이 훨씬 어려운 부분이구나. 그리고 남을 이해시키려고 하다보면, 아 사실은 내가 정확히 아는 것이 아니고 익숙해져버려서 안다고 착각했었구나 라고 생각하는 순간들이 있었다. 그래서 나는 IT 입문자를 위한 책을 보는 것을 꽤나 좋아한다. 술술 넘어가서 기분 좋은 것도 있고, 쉽게 읽다가도 은근 얻어가는 것들이 있기 때문이다. 이 책역시 그런 부류의 책이였다. [ 책 소개 & 추천 독자 ] 얇다. 그림도 많다. 비유들도 많다..