들어가며
오랜만에 집에 오는 자식을 위해 정성껏 식사를 준비하고, 자식의 가계에 조금이나마 보탬이 되고자 반찬을 투박하게 담으며, 눈 오는 날 안전히 돌아가길 바라는 마음으로 시야에서 보이지 않을 때까지 눈을 맞으며 배웅하는 당신의 모습이 유독 선명히 보였습니다. "조금이라도 챙겨줄 수 있을 때 챙겨주고 싶다"는 말을 반복하던 당신의 모습에서 자식들에게 쓸모없는 사람이 되면 어떻게 해야 할까 와 같은 두려움이 느껴지는 듯했습니다. 유용했던 당신의 젊음을 맞바꿔 타낸 졸업장을 당신 품에 안겨드리는 지금에서야 무용해지고 있다고 느낄지 모를 당신을 지켜야 할 차례가 되었음을 깨닫습니다.
이번 하반기는 유용한 존재로 남을 수 있도록 끊임없이 노력하는 당신을 닮은 형태로, 내가 속한 팀에서 나의 쓸모를 증명하기 위해 부단히 노력한 시기였습니다. 이 도전이 사랑하는 당신과 팀을 지킬 수 있는 노력이었길 바라는 마음으로 하반기의 날들을 기록합니다.
쓸모를 만들 수 있도록
'요즘의 나에게, ‘일하는 이유’는 무엇인가요?'
팀에서는 반기마다 다음과 같이 질문합니다. 우연히 <왜 일하는가>라는 책에서 소개된 60년 가까이 궁이나 사찰 건축을 총지휘하는 어느 도편수의 이야기를 통해 질문의 답을 정리할 수 있었습니다. 도편수는 다음과 같이 말합니다. "모든 나무에는 영혼이 깃들어 있습니다. 아무리 보잘것없는 나무라고 해도 말입니다. 나무를 베거나 다듬을 때면 반드시 그 영혼이 내게 건네는 말소리에 귀를 기울여야 합니다. 1000년 된 나무를 사용할 거라면 이후로도 1000년의 세월을 견딜 수 있을 만큼 가치 있는 일을 해야 합니다." 자신의 일이 어떤 가치를 만들 수 있는지 생각하는 도편수를 보며, 일을 한다는 것은 단순히 시간을 투자해 대가를 얻는 활동이 아닌 어떤 가치를 만드는 과정일 수 있구나 생각했습니다.
제게 있어 일하는 이유는 이렇습니다. 팀과 사회에 의미 있는 가치를 만들고, 그 과정에서 나 자신도 성장하여 팀과 사회에 쓸모를 더하는 사람이 되고 싶어 일합니다. "나를 구하는 유일한 길은 남을 구하려고 애쓰는 것이다." <그리스인 조르바>의 한 문장처럼, 팀, 그리고 사회에 쓸모를 더하는 사람이 되기 위해, 가치를 만들 수 있도록 일한다면 그것이 결국은 나를 구하는 길이라 믿습니다.
가치를 만드는 과정
육아크루의 팀원으로서 하반기에는 어떤 문제를 해결해 갔으며, 이 과정에서 어떤 가치를 만들었는지를 정리하려 합니다.
도메인 통합을 통한 SEO 개선
문제 정의
서비스 초창기 당시, MVP를 식스샵으로 운영했습니다. 구글에서 육아크루를 입력하면, 식스샵 도메인으로 설정되어 있는 도메인이 먼저 노출되었습니다. 육아크루 웹 버전의 도메인(yugacrewapp.com)과 식스샵 도메인(yugacrew.com) 두 사이트를 함께 운영하는 과정에서 같은 서비스끼리 키워드 경쟁이 일어나고 있었습니다. 식스샵 도메인과 육아크루 웹 도메인이 각각 나뉘어 있는 상태에서는 SEO 활성화에 걸림돌이 된다고 판단했습니다.
문제 해결
도메인 통합을 위해 먼저 리다이렉트 환경을 수정했습니다. yugacrew.com 도메인에 접근하면 식스샵 페이지가 노출되는 것이 아닌 육아크루 웹 버전이 노출되도록 환경을 구성했습니다. 그리고 기존에 운영 중인 육아크루 웹 버전 yugacrewapp.com 도메인에 들어가도 yugacrew.com 으로 리다이렉트 되도록 구성했습니다. 마지막으로 기존 운영 중인 식스샵 페이지는 shop.yugacrew.com 서브 도메인으로 변경했습니다.
결과
yugacrew.com의 도메인을 점유함으로써 기존 운영 중인 yugacrew.com의 백링크 44개를 확보할 수 있었고 이로 인해 SEO 점수를 60에서 80으로 증가시킬 수 있었습니다.
Headless CMS 도입을 통한 콘텐츠 수정 병목 해결
문제 정의
콘텐츠가 검색 노출이 잘 될 수 있도록 콘텐츠 내용을 빈번히 수정해야 했습니다. 마케터가 콘텐츠 내용을 수정하고 싶다면 개발자에게 수정 요청 사항을 전달해야 했습니다. 그럼 개발자는 DB에 접속해 수동으로 데이터를 수정해야 했습니다. 개발자는 콘텐츠 내용을 수정하는데 시간을 할애해야 했고, 마케터는 개발자의 작업을 대기해야 하는 병목 현상이 발생했습니다.
문제 해결
마케터가 직접 콘텐츠를 수정하고, DB에 쉽게 수정 사항을 반영할 수 있는 에디터 기능과 어드민 기능이 필요했습니다. 하지만 기능을 모두 직접 개발하기엔 큰 비용이 발생한다고 판단했습니다. 문제 해결을 위해 풀 커스터마이징이 가능한 오픈소스 Headless CMS 툴인 Strapi를 도입했습니다.
Strapi는 플러그인 생태계를 제공해서, 필요한 기능이 있다면 플러그인으로 기능을 가져다 사용할 수 있습니다. 콘텐츠 관리를 위해 CKEditor를 연결하고, 이미지 업로드를 위해 Strapi에서 S3, CloudFront를 연결하여 이미지 관리 환경을 구축했습니다. Strapi에서도 간단한 CRUD를 생성할 수 있지만, 인덱스를 추가하고 페이지네이션 구현을 위해 별도의 백엔드 게시글 조회 API를 생성하여 운영했습니다.
결과
콘텐츠 수정 업무를 마케터가 직접 처리할 수 있게 됨으로써 콘텐츠 수정에 병목이 생기지 않았고 개발자는 데이터 수정하는 데 필요한 시간을 아껴서 다른 업무에 할애할 수 있게 함으로써 팀의 생산성을 올렸습니다.
중앙화된 로깅 시스템 구축 및 장애 대응 최적화
문제 정의
AWS Elastic Beanstalk 환경을 활용하여 서버를 운영하고 있습니다. 서버의 로그 데이터를 확인하려면 AWS 콘솔에 접근해야만 확인할 수 있었습니다. 여러 대의 서버를 운영했기 때문에 로그를 빠르게 확인하기 어려웠습니다. 심지어 로그 데이터는 특정 일자가 지나면 제거되는 구조였기에 유저가 어떤 API를 언제 어떻게 호출하는지 파악할 수 없어서 유저의 행동 데이터를 확인하기 어려운 문제가 있었습니다.
문제 해결
문제 발생 후 인지단계까지 걸리는 시간인 MTTI를 줄이기 위해 로그를 중앙화된 저장소에 저장하고 분석하는 환경을 구축했습니다. AWS EB에서 Cloudwatch Logs로 로그를 적재하도록 설정했습니다. Cloudwatch Logs에서 Firehose 구독 필터를 생성해서, 특정 형태의 로그가 출력될 경우엔 로그를 S3로 적재하도록 구축했습니다. Firehose에 Lambda를 연결하여 데이터 형태를 가공했습니다. Firehose에서 S3에 저장되는 데이터의 크기를 줄이기 위해 로그 데이터를 Parquet 형식으로 저장하여 5MB 객체의 크기를 300KB로 줄여서 적재할 수 있도록 구성하여 1666.67%의 성능 향상을 이루었습니다. AWS Glue의 Crawler를 활용하여 S3에 적재된 parquet 데이터를 AWS Athena에서 조회할 수 있도록 구성했습니다.
결과
로그를 확인하기 위해 10분 이상 걸리던 시간이 Athena 쿼리를 통해 확인할 수 있게 됨으로써 로그 확인 시간이 약 5분으로 줄었습니다. 그리고 정확한 유저 행동 로그를 확인할 수 있게 되어 데이터 분석 및 디버깅 환경을 개선할 수 있었습니다.
Next.js와 CDN 연동
문제 정의
육아크루 웹 버전의 운영 서버 배포를 진행하는 중간에 웹사이트에 들어가면, 웹 페이지가 위 이미지처럼 깨지는 문제가 발생했습니다. 배포를 할 때마다 위와 같은 페이지가 나오면 서비스 사용성이 떨어진다는 문제가 있었습니다.
배포 도중, JS, CSS를 요청하는 과정에서 문제가 있었습니다. 서버를 배포하면, JS, CSS를 브라우저에 전달할 준비가 안되어있는 상태에서 브라우저에서 JS, CSS 파일을 전달해 달라고 요청을 합니다. 그럼 브라우저에서는 JS, CSS 파일을 전달해 달라고 요청했지만 전달받을 수 없어서 결국은 화면이 깨지는 문제가 발생했습니다.
문제 해결
문제 해결을 위해서 서버 배포 전, JS, CSS 파일을 S3 저장소에 업로드시켜 둡니다. 그 후 서버를 배포하면 S3에 저장된 파일을 브라우저에 전달하도록 환경을 구축했습니다. 이를 통해 NextJS 서버는 SSR과 이미지 최적화에 관련된 부문만 집중할 수 있게 됐고, 브라우저 랜더링 속도도 개선될 수 있었습니다.
결과
CDN을 사용함으로써 더 가까운 엣지 포인트에서 정적파일을 고객에게 더 빠르게 제공할 수 있습니다. 그리고 정적파일 압축(e.g. gzip, brotli)을 NEXT.JS 서버가 아닌, CDN에서 압축을 함으로써 컴퓨팅 파워를 아낄 수 있을 뿐만 아니라, CDN에서 제공하는 압축 알고리즘에 따라 더 적은 용량으로 고객에게 제공할 수 있습니다.
카카오 알림톡 CRM 자동화
문제 정의
육아크루에서는 카카오 알림톡을 활용해서 CRM을 진행하고 있습니다. 기존에는 특정 서비스를 활용하여 마케터가 직접 알림톡을 전송했습니다. 루틴하게 알림톡을 보내는 작업들이 점진적으로 많아지면서, 알림톡을 받는 유저를 선별하고 유저들에게 알림톡을 발송하는 리소스도 점차 늘어갔습니다. 또한 마케터가 부재하다면, 알림톡을 전송할 수 없는 문제도 함께 존재했습니다.
문제 해결
마케터가 루틴한 알림톡을 보내는 것을 모두 자동화할 수 있다면, 마케터는 콘텐츠를 생성하는 데 집중할 수 있다고 판단했습니다. 이를 위해 특정 시간이 되면 lambda에서 알림톡 발송 유저를 조회하고 NHN Cloud서비스를 통해 발송 대상 유저들에게 알림톡을 발송하며, 알림톡 발송 결과와 알림톡 발송을 통한 성과 분석을 할 수 있도록 Slack 메시지를 전달하는 시스템을 구성했습니다.
결과
알림톡 CRM 자동화 작업을 통해 마케터의 업무 리소스를 줄임으로써 마케팅 콘텐츠를 생성하는데 집중할 수 있는 환경을 구성할 수 있었습니다.
항상 희망을 추구하는 마음으로
올해 하반기는 연락이 두절된 채 반나절만에 영천의 어느 도로에서 발견된 이모부의 소식을 들으며 일의 의미를 다시 생각했습니다. 어린 시절, 이모부는 새벽마다 영천 시장에서 야채를 팔며 가족을 위해 쉼 없이 일하셨습니다. 무뚝뚝하고 호랑이 같던 모습에 인사를 건네도 아무 반응이 없으셔서 어릴 땐 무섭기도 했습니다. 세월이 흐르면서, 지금은 장사를 그만두신 후 치매로 병상에 계십니다. 요양병원에서 이모부를 뵙고 돌아오는 길, “나이가 들어서도 일을 꾸준히 해야 건강하다”는 어른들의 이야기가 마음에 남았습니다.
어른들의 말을 듣고, 일을 한다는 것은 어떤 의미를 갖는 것인가 생각했습니다. 건축가 안도 타다오와 르누아르, 그리고 꿈을 위해 어떤 도전을 하는 누군가의 삶을 통해 일의 의미에 대해 정리할 수 있었습니다.
개발자로서의 삶은 어쩌면 안도 타다오가 마주했던 동네 목수의 삶과 닮아 있다고 느꼈습니다. 문제를 마주하고 깊은 고민 끝에 문제의 답을 찾아내는 과정을 돌이켜보면 힘든 순간보다 즐거운 순간이 더 많았습니다. 항상 희망을 추구하는 마음으로 앞으로도 가치를 만드는 과정에서 즐거움을 찾고, 더 나아가 행복을 추구하며 살고 싶습니다.
이모부를 떠올리며 문득, 만약 이모부가 계속 일을 하셨더라면 치매를 막을 수 있지 않았을까 하는 생각도 스쳐 지나갑니다. 물론 확신할 수는 없지만, 일은 사람에게 단순한 생계 이상의 의미를 지니고 있다는 점은 분명한 것 같습니다. 앞으로도 쓸모를 더하는 사람이 되고자 노력했던 과정이 나에게는 행복이었는지 돌아보고 싶습니다.
마치며
당신의 모습이 자꾸만 마음에 맴돕니다. "조금이라도 챙겨줄 수 있을 때 챙겨주고 싶다"던 당신의 말처럼, 스스로가 무용해지고 있다는 두려움을 품고 있을지 모를 당신을 온전히 사랑하는 것이야말로 제가 할 수 있는 가장 중요한 일이란 생각이 듭니다. 졸업장을 당신의 품에 안기던 순간, 당신이 품고 있었던 두려움은 앞으로 제가 감싸 안아야 할 몫이 되었고, 그 두려움을 희망으로 바꾸는 일은 제가 살아가야 할 이유 중 하나가 되었습니다. 당신이 느꼈을지 모를 무용함에 대한 두려움도 이제는 제가 감싸 안고 싶습니다. 비록 당신의 젊음과 유용했던 시절은 저물어가는 듯 보일지라도, 그 모든 시간은 저를 이루고, 제 삶의 가치를 만들어 주었습니다.
앞으로의 제 삶은, 무용하다고 느껴질지 모를 누군가를 있는 그대로 사랑하고 응원하는 과정으로 채워가고 싶습니다. 당신이 사랑을 남겨준 것처럼, 누군가의 삶에 의미 있는 사랑을 전할 수 있는 사람이 되고자 노력하겠습니다. 그 사랑이 누군가에게는 따스한 위로가 되고, 제가 걸어가는 길을 더욱 의미 있게 만들어 주리라 믿습니다.
"저는 남들보다 햇살 아래에서 행복을 더 만끽할 수 있는 그런 능력이 있는 것 같아요."
교양 수업에서 우연히 들었던 어느 밴드 보컬의 소개 문구를 곱씹어보며, 학교를 졸업하는 날이 온다면 스스로를 어떻게 소개할 수 있을까 생각했습니다. 그리고 졸업장을 받은 지금에서야 스스로를 소개할 수 있는 문구가 생각났습니다.
"저는 누군가에겐 아무 쓸모없어 보이고 사소해서 쉽게 눈에 띄지 않지만, 언제나 그 자리에 묵묵히 존재하는 무용(無用) 한 것 혹은 그런 사람을 사랑하는 능력이 있는 것 같아요." 이 문장이 저를 가장 잘 표현하는 문구로 남길 바라며, 그 마음을 잃지 않는 삶을 살아가겠습니다.
그리고 늦었지만, 이제는 당신이 두려움이란 삶의 무게를 내려놓을 수 있도록 당신의 쓸모를 넘어 당신 자체로도 충분히 소중하며, 항상 당신을 사랑하고 있다는 사실을 전하며 이 글을 마칩니다.
참고 링크
'일상 정리 > 회고' 카테고리의 다른 글
[회고] 2024년 상반기 - 등대가 되었던 사람 (1) | 2024.06.30 |
---|---|
[회고] 2023년 하반기 - 미련한 사람이 우물을 판다 (11) | 2024.01.01 |
[회고] 2023년 상반기 - 친절한 자세를 흩뜨리지 않도록 (3) | 2023.07.02 |
[회고] 2022년 하반기 - 다정함을 닮을 수 있다면 (5) | 2023.01.01 |
[회고] 2022년 상반기 - 당신을 향한 기착(寄着) (2) | 2022.07.03 |