2024-01-18
올 초부터 회사 매출을 일으키기 위해 결제 시스템을 맡았다. 인앱결제와 웹 결제를 맡게 되었는데 웹 결제는 생각보다 할 만했지만, 인앱결제는 정말 어렵고 힘들었다. 기본적으로 RN 위에 webview를 이용하여 서비스가 구현되어 있는데 인앱결제는 RN과 직접적으로 소통을 하면서 구현해야 해서 어려웠다 더군다나 네이티브 앱이 아니기 때문에 인앱결제를 하기 위해 검증 및 처리해야 할 부분들이 많아 인앱결제도 대행사가 있길래 React-Native-Iap 의 도움을 받아 구현하였다
시험 기간에는 매출이 폭발적으로 발생하기 때문에 정말 24시간 내내 노트북을 들고 다니며 인앱결제에 문제가 없는지 틈틈이 확인했다. 역시나 한 번에 완벽하게 되질 않았는데 가끔 중복결제가 발생하여 환불 요청이 들어오는데 애플의 경우는 환불을 직접 해줄 수가 없어 어려웠고 중복결제가 되는 원인을 찾는 게 너무 힘들었다.
시험 기간에 매출이 폭발적으로 늘어 매출이 수 천만원에 달했을 때 뿌듯함이 느껴졌다.
상반기에 조직개편이 이루어져 앱을 만드는 모바일 팀에서 신사업 팀 B2C 팀으로 이동하게 되었다. 처음으로 웹페이지를 만드는데 생각보다 모바일 쪽과 많이 달라 당황한 적이 많았다. 모바일 팀에 있을 때는 모바일 환경에서만 생각하고 만들면 되었지만, 웹 팀으로 넘어오고 나서는 웹과 반응형도 상당히 신경을 많이 써야 했다 거기다 여기서는 Nextjs13을 사용하고 있기 때문에 기존의 12 버전과는 많이 달라졌다. 특히 서버 컴포넌트와 클라이언트 컴포넌트 개념과 어떻게 하면 더 서버 컴포넌트를 잘 활용할 수 있을까의 대한 고민인 컸다.
해당 서비스가 소규모를 넘어 빠르게 성장하는 추세라 이제는 아키텍처가 필요하다는 생각이 들었다. 어떤 아키텍처들이 있을까 여기저기 자료를 찾던 중 도메인 주도 개발 DDD 패턴이 눈에 들어왔고 이 부분에 대해 자세히 찾아보았다. 말 그대로 도메인을 주도로 개발을 시작하는 것이고 여러 개념들이 있지만 핵심은 비즈니스 로직은 최대한 도메인에 가깝게 구현을 한다는 것이다. 하지만 이런 대부분의 아키텍처 들은 객체지향에 맞춰져 있고 또 백엔드 관점에 맞게 설계 및 구현이 되어 있어 프론트엔드에서 또 함수형 프로그래밍을 사용하는 곳에서 어떻게 구현을 할지 막막했다.
처음에는 어떻게 하면 DDD 패턴을 최대한 비슷하게 구현할 수 있을까? 라는 고민을 시작으로 useCase, 엔티티, 바운더리 컨텍스트를 어떻게 Next에서 잘 적용 할 수 있을까에 대해 많이 고민하였지만 애초에 이 아키텍처 자체가 프론트 관점 보다는 데이터베이스를 활용하는 백엔드 관점에 더 가깝기 때문에 똑같이 구현하는것은 거의 불가능에 가깝다는 생각이들었다.
어떻게 해야 하나 어떤 아키텍처를 써야 하나 다시 방황을 하던 중 문뜩 내가 왜 아키텍처에 관심 갖고 도입을 하려고 하는지에 대한 이유를 다시 한번 생각해 보게 되었다. 가장 큰 목적은 View와 비즈니스 로직을 분리하여 유지보수성이 좋고 확장성 있게 구현을 하고 싶은 마음이 가장 컸다.
그래서 어떤 아키텍처들을 완전히 따라 하는 것이 아닌 참고하여 나만의 방법을 만들고 팀원들과 소통하고 의논하여 나름대로 이리저리 시도해 보며 합의점을 찾아갔다. 가장 힘들었던 점이 상태관리였는데 상태관리를 어떻게 분리하여 관리를 할 수 있을까에 대한 고민이 많았다. 상태관리는 View와 직접적인 부분이 많아서 고민과 의견들이 가장 많았다.
현재 회사에서 사용하고 있는 상태관리 라이브러리 들은 react-qeury와 redux-toolkit을 사용하고 있다. 그래서 해당 도메인 안에 query라는 폴더를 만들고 customHook형식으로 만들어 react-query를 사용하였다. 또한 QueryKey를 적극 활용하여 비즈니스 로직과 서버 컴포넌트에서 사용 하였다.
다음으로는 redux였는데 이 부분은 dispacthers라는 파일을 따로 만들어 사용하였다. 이곳에서 상태가 변화는 함수를 만들어서 필요한 곳에 사용을 하였는데 이렇게 사용한 이유는 비즈니스 로직에서 상태 변경 함수를 호출할 때 어떤 상태관리를 사용하는지 모르는 거였다 즉 해당 함수를 호출하였을 때 상태 값만 제대로 변경이 되면 된다는 것이다. redux를 사용하든 recoil을 사용하든 비즈니스 로직에서는 몰라도 되는 것이었다 이렇게 되면 나중에 다른 상태관리로 변경을 하다던가 상태관리 로직을 수정 할 일이 있으면 이 dispachers
파일만 수정하면 되는 부분이 좋았다
아키텍처 부분을 공부하면서 객체지향을 많이 접하게 되었다 그중 많은 부분의 예제들이 자바 코드로 되어 있다 보니 이 예제 코드를 읽고 싶어 자바 공부를 조금 하게 되었는데 함수형과는 또 다른 매력이 있었다 객체지향의 개념을 조금 더 깊게 이해해 보고 싶어서 조영호 님의 객체지향의 사실과 오해라는 책을 읽었으며 책 중에서 "어떤 객체도 섬이 아니다." 객체 공동체 안에 살고 있는 성실한 객체 시민은 자신에게 주어진 역할과 책임을 다하는 동시에 시스템의 더 큰 목적을 이루기 위해 다른 객체와도 적극적으로 협력한다.
라는 문구가 인상 깊었다
서로 메시지를 주고받으며 협력한다 라는 문장이 공감되고 재밌었는데 평소 고민을 자주 했던 응집성을 높이고 결합도를 낮추는 고민을 객체지향을 공부하며 조금 더 쉽게 이해를 할 수 있었다 그리고 의존성에 대해 조금 더 관심을 갖게 되고 어떻게 하면 의존성을 잘 관리 할 수 있을까에 대한 고민이 들었는데 여기서 인터페이스의 활용과 DIP를 어떻게 잘 녹여낼 수 있을까 고민이 들었다 그러다 의존성 자동 주입이 가능한 스프링을 만나게 되었다
호기심에 스프링까지 공부하게 되었는데 이때부터 스프링과 자바가 신기하고 재밌어지기 시작했다 사실 원래부터 백엔드 쪽에 관심이 있긴 했지만 이 계기로 백엔드의 관심이 프론트엔드에 대한 관심을 완전히 넘어버렸다 이때부터 본격적으로 열심히 공부하게 되었다
10월부터 제대로 열품타를 사용하여 공부 시간을 체크했다 주당 평균 25-28시간가량 공부를 하였는데 너무 재밌어서 시간 가는 줄 모르고 공부했다 10, 11월은 대부분 자바 기본문법과 영한 님의 스프링 강의를 보며 시간을 보냈고 12월부터 본격적으로 개인 프로젝트를 만들며 시간을 보냈다 막상 강의를 들었지만 어디서부터 어떻게 해야 할까 시작부터 턱 막혔지만 약간의 탄력을 받게되니 술술진행되었다
데이터베이스 설계부터 어떻게 도메인을 나눌 것인지 설계하는 부분에서 많은 시간이 들어갔다 그리고 코드를 작성할 때 class를 활용하여 객체지향적으로 코드를 짜보니 재밌었다 또 꼭 한번 해보고 싶었던 테스트 코드를 작성하면서 개발해보니 신기했다 테스트 코드의 장점 중 자신감이 생긴다는 말이 있던데 정말 개발할 때와 리팩토링때 자신감이 생겼다 물론 테스트 코드가 100%를 커버해 주지는 않지만 빌드하기전 또는 로컬로 테스트 하기 전에 미리 테스트 코드를 한번 돌려보는 것이 정말 많이 도움이 된다
새로운 도전을 해보고 싶었고 자바와 스프링 그리고 서버를 정말 제대로 한번 공부해 보고 싶어서 백엔드로 전향을 하기로 결심을 하였고 지금도 열심히 공부 중이다
정말 운이 좋게도 이번에 우아콘 2023에 당첨되어 참가하게 되었다 참가하기 하루 전부터 설레여서 온종일 기분 좋은 하루를 보냈다 이런 곳이 처음이라 그런지 떨리고 뭐랄까 내가 진짜 개발자가 됐구나를 2년이 지났지만 다시한번 크게 느끼는 하루였다
정말 대단하고 신기했다 원하는 음식을 먹고 싶을때 해당 메뉴에 들어가서 리스트를 보고 버튼 클릭을 몇번 하게 되면 20-30분 뒤면 집 앞에 맛있는 음식이 도착되어있다 단순하게 배달로 시작한 이 회사가 이제는 로봇을 만들어 자율주행을 꿈꾸는 회사가 되어있다는 사실에 다시 한번 놀랍고 대단하다 기회가 되면 이런 조직에서 꼭 한번 일해보고 싶다
10월부터 너무 무리했던 탓일까 12월 한달 동안 계속 몸이 좋지 않았다 처음에는 간단한 목감기로 시작했다가 열이나기 시작하고 감기에서 독감으로 번졌고 결국 폐렴까지 이어졌다. 의원급 병원을 자주 가다가 병원에서 대학병원에 가보라고 하여 처음으로 대학병원 응급실에 가서 진료를 받고 결과가 나오기까지 너무 무서웠다. 다행이 폐렴이 크게 심각하지 않아 약을 먹고 일주일 후 다시 진료를 받았는데 좋아졌다고 하여 안심이 되었다. 정말 몸이 아프니 아무것도 할 수가 없었다 몸도 마음도 너무 힘든 12월이었다 2024년에는 건강에 조금 더 신경을 써야겠다
재작년부터 이북 리더기를 통해 공부하기를 시작하였는 사용하면서 큰 불편함은 없었지만 약간의 아쉬운 점들이 조금 있었는데 이번에 내가 아쉽다고 생각했던 부분들이 전부 업데이트되어 새로운 모델이 나왔다 기본적으로 흑백의 화질이 더 좋아졌다 최대 화질인 300ppi이고 거기다 컬러에다가 성능 또한 빨라져 간단한 웹서핑까지 가능했다 거기다 필기를 많이 하는 나에게 필기감까지 향상되어 안 살이유가 없어 바로 구매했고 여전히 아주 잘 쓰고 있다
꾸준히 키보드를 구매하게 된다 이번에는 누피사의 헤일로 75 라는 제품이다 뭐랄까 생각보다 묵직함에 안전감을 주고 타건음 또한 가볍지 않으면서 안전감 있는 손맛이 좋아 구매하게 되었다
새로운 의자를 장만했다 기존에 사용하던 의자가 낡고 오래되어 하나 바꿔야지 하고 생각을 하고 있던 찰나에 백화점 구경 왔다가 우연이 이 의자에 앉아 봤는데 다른 의자들 보다 확실히 편해서 구매하게 되었다 고가의 의자라 많이 고민하고 망설였지만 의자에 앉아 있는 시간이 잠자는 시간보다 많기 때문에 과감하게 투자를 결정했다
올 한해도 정말 빠르고 바쁘게 지나갔다. 작년 회고록을 쓸 때일 년 동안 무엇을 했는지 기억이 잘 나지 않았고 기록하는 습관을 가지고 싶어 23년도부터는 일기를 쓰기 시작했다. 일 년 동안 무엇을 했는지 돌아보기 편했고 매일 무슨 생각을 가지고 하루를 보냈는지 기록하니 확실히 좋았다. 아 이때는 이런 고민이 있었구나 돌아보게 되고 그 당시 해결 방법을 찾지 못했는데 시간을 갖고 다시 보니 그때는 이렇게 하면 어땠을까 또 다음부터 이런 상황에서는 이렇게 해야겠다는 등 도움이 많이 되었다
올해는 블로그를 조금 더 열심히 써봐야겠다. 그리고 기술글과 별개로 생산성 또는 다른 이야기에 관해서도 글을 조금 써보도록 해야겠다. 예전부터 생산성에 관해 관심이 많아서 앱도 생산성 앱도 만들었는데 조금 더 공부하고 알아봐서 다시 생산성 앱에 도전해 봐야겠다.
올해에서 가장 중요한 목표는 역시 백엔드로써 커리어를 쌓는게 가장 큰 목표다. 다시 도전하자!