본문 바로가기

[회고] 2024년 상반기 - 등대가 되었던 사람

 

들어가며 

평생을 미련하게 살아온 당신을 생각합니다. 고등학교에 가지 못하고 벽돌을 날랐던 탓인지 당신의 왼쪽 어깨는 주저앉았고, 미화원으로서 거리를 청소하기 위해 긴 시간을 무릎 닳도록 걸은 탓인지 당신은 다리를 절뚝여야 했습니다. 방 안 가득 퍼져 있는 코를 찌르는 당신의 파스향을 맡을 때에도 당신의 고단했던 하루를 크게 신경 쓰지 않았던 것 같습니다.

 

어느 늦은 저녁 당신으로부터 걸려온 전화를 받았습니다. 집 근처 벤치에 앉아있다는 간단한 상황만을 공유한 채 당신은 전화를 끊었습니다. 설마 하는 생각에 벤치 앞에 갔을 땐, 길을 걷다가 무릎에 힘이 들어가지 않아서 걷지 못하고 주저앉아버린 당신의 모습을 볼 수 있었습니다. 도움 없이는 걷지 못하는 당신에게 도움이 되고자 손을 건넸습니다. 당신의 손을 잡아본지 얼마 만인가 생각하다가 어느 순간 딱딱했던 손등 주름이 더 거칠게만 느껴졌습니다. 쉽게 돈 버는 것을 자랑으로 여기는 세상에서 힘든 내색 없이 퇴근길이면 제철 과일을 사들고 왔던, 성실과 노력으로 살아온 당신의 모습이 한동안 잊히지 않았습니다. 

 

살다 보면 등대 같이 존재만으로 방향을 알려주는 사람이 있습니다. 사랑하는 사람을 지키기 위해 성실하게 노력했던 당신이 마치 제겐 등대와 같았습니다. 봄이 어디 있는지 짚신이 닳도록 돌아다녔건만, 돌아와 보니 봄은 우리 집 매화나무 가지에 걸려 있었다는 어느 중국의 시처럼. 가장 존경스러운 사람은 지금 내 옆에 있다는 것을 뒤늦게 깨닫습니다. 망망대해 속에서 존재만으로도 삶의 방향을 알려주는 등대 같은 당신을 생각하며, 당신의 성실함을 조금이라도 닮을 수 있는 시간을 보냈는지 돌아보기 위해 상반기 회고글을 씁니다. 수많은 악전고투가 있더라도 당신처럼 사랑하는 이들을 지킬 수 있는 시간을 보냈는지 정리하려 합니다.  

 

 

 


 

 

 

 

어떻게 선택할 것인가

사람은 매일 약 150번의 선택을 한다고 합니다. 우리는 좋은 선택을 하기도 하고, 때로는 나쁜 선택을 하기도 합니다. 선택을 할 당시에는 가장 좋은 선택을 했다고 생각했지만 나중에 돌아봤을 땐 최악의 수일 때도 있고, 반대로 어쩔 수 없이 한 선택이 나중엔 최고의 선택이 될 때도 있습니다. 앞으로도 많은 선택지가 주어질 텐데, 어떤 기준을 갖고 선택할 것인가 고민해야 한다는 이동진 영화평론가의 강연을 들으면서 상반기에는 육아크루 서비스를 개발하면서 문제 해결을 하기 위해 개발자로서 어떤 선택을 했는지 돌아보고 싶었습니다.

 

 

 

 


 

 

 

 

SEO 최적화 구축하기

올해 초에는 육아크루의 웹사이트 SEO 최적화를 위한 환경을 구축했습니다. 

 

앱 서비스인 육아크루를 널리 알릴 수 있도록 육아크루의 웹 서비스를 운영하고 있습니다. 웹 서비스를 운영하면서 가장 신경 썼던 부분은 웹사이트의 검색 최적화였습니다. 웹 서비스의 검색 최적화가 잘 이뤄진다면 유저가 앱 서비스에도 자연스럽게 유입될 수 있다고 생각했습니다. 이런 이유로 팀에서는 어떻게 하면 SEO를 개선할 수 있을까 고민했습니다.

 

 

 

 

 

 

 

SEO Checker 사이트를 활용해서 웹사이트의 SEO을 점검했을 때 Server의 점수가 0%로 나오는 것을 확인했습니다. Task list of SEO Improvements를 살펴보니 Use 301 redirects to drive traffic to URLS with the same domain and sub domain 문제가 있다고 나와 있었습니다.

 

 

문제를 확인한 결과 웹 서비스를 운영하고 있는 서버에서 yugacrewapp.comwww.yugacrewapp.com으로 리다이렉트가 안 되는 문제 때문에 서버의 점수가 0%라는 것을 확인했습니다. 문제를 해결하려면 http, https, www 유무와 상관없이 yugacrewapp.com으로 접근하면 https://www.yugacrewapp.com으로 무조건 리다이렉트 되는 구조를 만들어야 했습니다.

 

서비스 배포를 위해 cloudfront를 사용하고 있는데, 문제를 해결하려면 Redirection 처리를 위한 별도의 cloudfront와 s3 환경을 구축해야 했습니다. 환경 구축을 통해 웹사이트는 다음과 같이 접근할 수 있었습니다. 

 

 

 

http://yugacrewapp.com
https://yugacrewapp.com
http://www.yugacrewapp.com
https://www.yugacrewapp.com

 

 

 

 

 

http, https, www의 유무와 상관없이 yugacrewapp.com를 입력하면 https://www.yugacrewapp.com으로 접근할 수 있도록 환경을 구축할 수 있었습니다.

 

 

 

 

 

 

 

 

 

그 결과 서버의 SEO를 0에서 60%로 개선할 수 있었습니다. 하지만 왜 40%의 점수는 올리지 못했는가를 살펴봤을 때 아래와 같은 문제가 발생하고 있었습니다.

 

 

 

 

 

 

 

 

 

 

HTTP header와 Performance 측면에서 더 개선할 포인트가 있었고, HTTP header에 나온 문제를 먼저 해결해야겠다고 판단했습니다. HTTP header의 문제를 해결하려면 첫 번째, 웹 서버의 버전을 숨겨야 했고, 두 번째, X-Powered-By 헤더를 제거해야 했습니다. 웹 서버 버전과 X-Powered-By 헤더가 그대로 전달된다면 보안 취약점이 발생할 수 있었습니다. 그래서 웹 서버 설정을 조정하여 서버 버전을 숨김 처리했고 X-Powered-By 헤더도 응답값에서 제거하는 작업을 진행했습니다. 

 

 

 

 



 

이렇게 설정한 결과 Server의 점수는 60에서 91%가 되도록 SEO 최적화를 처리할 수 있었습니다. 리다이렉션, 헤더 수정이라는 선택을 한 결과 더 많은 고객들에게 육아크루 서비스를 알릴 수 있게 되었고, 결과적으론 SEO 점수를 개선함으로써 비즈니스 임팩트를 낼 수 있었다고 생각합니다. 앞으로도 SEO 점수를 더 개선하고자 합니다. (SEO 점수를 개선하기 위해 어떤 작업을 했는지의 내용은 추후 블로그 글을 통해 정리하려 합니다.)

 

 

 

 


 

 

 

FCM Topic 활용 방안 개선기

SEO 최적화 작업을 마무리하고서는 FCM Topic을 활용해서 푸시를 보내기 위한 환경 구축을 시작했습니다. 육아크루에서는 유저가 게시글을 작성하는 경우 같은 동네의 크루가 글을 작성했다는 내용을 푸시로 전달합니다. 예를 들어 '서울시 영등포구 도림동'에 살고 있는 유저가 게시글을 작성할 경우, 영등포구에 살고 있는 유저들에게 도림동에 살고 있는 유저가 게시글을 작성했다고 푸시를 보냅니다. 푸시 알림을 통해 유저는 동네 친구가 글을 썼다는 것을 빠르게 확인할 수 있게 되고, 그럼 결국 유저들이 동네 육아 친구를 찾는데 도움이 될 수 있을 것이라 판단했습니다. 

 

기능 구현을 하면서, 푸시 알림을 전송하려면 유저의 정보를 조회해야 하는데 그 과정에서 부하가 발생했습니다. 예를 들어 육아크루를 이용하고 있는 영등포구에 살고 있는 유저가 1만 명이면, 영등포구에 살고 있는 유저가 게시글을 작성할 때마다 1만 명의 유저 중 푸시 허용 여부를 true로 설정한 유저의 FCM Token값을 조회합니다. 만약 유저들이 게시글을 자주 작성하게 된다면 유저의 FCM Token을 여러 번 조회해야 했고 그 과정에서 부하가 발생했습니다.

 

 

 

서버에서 주제 관리  |  Firebase 클라우드 메시징

Google I/O 2023에서 Firebase의 주요 소식을 확인하세요. 자세히 알아보기 의견 보내기 서버에서 주제 관리 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Firebase

firebase.google.com

 

 

문제 해결을 위해 FCM의 Topic 개념을 활용해서 푸시를 전송하도록 설정하여 DB의 부하를 줄이는 선택을 했습니다. FCM Topic에는 1000개의 FCM Token을 구독시킬 수 있습니다. 만약 하나의 Topic에 1000개 이상의 Token이 구독처리 되었다면, 1001번째 순서로 Topic을 구독시키려면 다른 Topic을 생성한 뒤 생성된 Topic으로 구독처리를 시켜야 했습니다. 이런 Topic의 특징을 활용하여 푸시 전송 환경을 구축했습니다.

 

예를 들어 서울시 영등포구 도림동이면, '서울시', '영등포구', '도림동' Topic을 생성해서 생성된 Topic으로 푸시를 보내는 환경을 구축했습니다. 이를 통해 영등포구에 살고 있는 유저들에게 푸시를 보낼 경우, 매번 영등포구에 살고 있는 유저를 전체 조회하지 않아도, 영등포구 Topic하나만 조회해서 푸시를 보내면 동일하게 푸시를 전송할 수 있었습니다. 심지어 전체 유저에게 푸시를 보낼 때도 전체 유저의 FCM Token 정보를 조회하지 않아도 Topic만으로도 푸시를 전송할 수 있도록 구성함으로써 푸시를 전송할 때 들어가는 DB 부하를 줄일 수 있었습니다. (Topic을 구독하고, 구독 취소하는 과정에서 여러 API를 수정해야 했고, 비동기 아키텍처도 구성해야 했기에, 어떻게 Topic을 활용해서 푸시 서비스를 개발했는지는 별도 게시글을 작성해 보겠습니다.)

 

추가로, 푸시를 전송했을 때, 몇 명의 유저가 푸시를 전달받았으며, 몇 명의 유저가 푸시를 클릭했는지의 지표를 정확하게 알아야 푸시 알림 기능이 리텐션에 얼마나 기여하는가 확인할 수 있다고 판단했습니다. 그래서 Topic을 활용하여 푸시를 전송하는 환경 뿐 아니라 유저 행동 데이터를 적재하는 환경까지 함께 구축했습니다. 

 

푸시 기능을 고도화한 덕분에 유저들이 육아크루 서비스에서 육아 친구를 보다 빠르게 찾을 수 있도록 도움이 될 수 있는 push 기능을 계속해서 추가할 수 있었습니다. 앞으로도 육아크루 서비스를 사용하는 유저들이 자신의 동네에 살고 있는 엄마를 보다 빠르게 찾을 수 있도록 푸시 알림 서비스를 고도화하려 합니다.

 

 

 

 


 

 

 

 

 

 

Transaction 개선기

푸시 서비스를 고도화하는 과정에서 갑자기 서버에 장애가 발생했습니다. 원인을 빠르게 찾지 못하다가 서버를 재시동했을 때 서버가 정상 동작하는 것을 확인할 수 있었습니다. 이 문제가 왜 발생하는지 확인하는 과정에서 커넥션 풀 누수 문제가 발생했다는 것을 확인했습니다. 커넥션 풀 누수 문제를 겪으면서, 트랜잭션 관리 방식을 변경해야겠다고 판단하여 작업을 시작했습니다. 그 과정에서 커넥션 풀 누수는 왜 일어났으며, 어떻게 문제의 원인을 파악했는지, 문제가 재발하지 않도록 하려면 어떻게 해야 하는지, 문제를 해결하기 위해 더 나은 방안은 없는지 등을 고민하며 문제를 해결했습니다.

 

문제를 조금이라도 더 완벽하게 해결할 수 있는 방법은 없을까? 탐구하면서 transactional outbox 패턴에 대해 알 수 있었습니다. 팀에 outbox 패턴을 적용하기 위해 열심히 고민하여 아키텍처를 구성했습니다. 아키텍처 설계가 마무리될 때쯤, 다른 팀의 시니어 개발자와 이야기하는 과정에서 우연히 지금까지 구성한 아키텍처를 공유할 수 있는 기회가 생겼고, 아키텍처를 본 개발자는 저에게 이렇게 질문했습니다. 

 

  1. 서비스를 운영하면서 트랜잭션 성공하고 이벤트 발행이 실패하는 경우가 얼마나 발생했는가? 만약 실패하는 경우가 적다면, outbox 패턴을 개발하는 게 의미가 있는가?
  2. 이벤트 발행이 실패했을 때, 이벤트 발행이 실패했다는 것을 확인할 수 있다면 이벤트를 수동으로 처리하는 것이 outbox 패턴을 개발하는 비용보다 훨씬 비용이 적게 드는 것이 아닐까?

 

이 두 가지 질문의 답을 내는 과정에서 outbox 패턴은 좋은 문제 해결 방식일 수 있지만, 우리 팀에 적용하기에는 시기상조라는 것을 깨달았습니다. 

 

 

 

[Project] 프로젝트 삽질기59 (feat transactional outbox)

들어가며NestJS와 PostgreSQL, TypeORM을 활용하여 프로덕트를 만들고 있습니다. 저번 글에서 Transactional 데코레이터를 활용하면서 이벤트가 발행되지 않았다는 이유로 트랜잭션이 rollback 된다면 어떻

overcome-the-limits.tistory.com

 

 

나름의 생각을 위의 글로 작성하면서 만약 이 패턴을 팀에 도입했더라면 패턴을 구현하는데만 많은 리소스가 들어갈 수 있었겠구나 생각했습니다. 만약 지금처럼 아키텍처를 깊게 고민하는 순간이 오면 정말 이 개발 방식을 팀에 도입하는 것이 맞는 것인가 다시 한번 고민해야겠다고 생각했습니다. 

 

 

 


 

 

 

 

어드민 서비스 구축

육아크루 서비스를 운영하는 과정에서 악성유저가 육아맘, 육아대디인척하고 서비스에 들어와서 다른 유저들에게 피해를 주는 경우가 발생했습니다. 문제 해결을 위해 악성 유저의 접근을 제한하고, 유저들에게 커뮤니티의 신뢰도를 높일 수 있도록 2차 인증 서비스를 개발하려 했습니다. 유저가 2차 인증을 하기 위해서는 인증 사진을 육아크루 서버로 전달해야 합니다. 인증 사진에는 유저의 개인 정보가 담겨 있기 때문에 사진이 저장되는 저장소를 외부에서 접근할 땐 권한이 있는 유저만 사진을 살펴볼 수 있도록 구성해야 했습니다.

 

유저의 2차 인증을 검토하려면, 어드민 서비스가 필요했습니다. 백엔드 개발자로서 어드민 서비스 아키텍처를 모두 구성함과 동시에 어드민 UI까지 함께 개발해야만 했습니다. 최소한의 인력으로 어드민 기능을 빠르게 그리고 안전하게 개발하려면 어떻게 해야 할지 고민했습니다.

 

어드민 기능을 개발할 때 다음과 같은 부분을 고려해야 했습니다.

1. 어드민 서비스에 로그인할 수 있는 팀원이라고 해서 유저의 개인정보를 모두 살펴볼 수 있는 것이 아니라 권한이 있는 유저만 개인 정보에 접근할 수 있어야 한다.

2. MFA를 활용하는 시스템을 구축하여 어드민 서비스에 안전하게 로그인할 수 있는 환경을 구축해야 한다.

3. 권한이 있는 유저가 어드민 서비스에 접근할 때 언제 접근했는지, 접근해서 어떤 기능을 사용했는지 등의 자세한 접근 기록을 보존해야 한다.

4. 어드민 서버를 운용하는 과정에서 인프라 비용을 최소한으로 사용해야 한다.

 

 

어드민 서비스를 빠르게 구축하기 위해 Retool이라는 로우코드 서비스를 활용하여 어드민 기능을 개발했습니다. Retool을 활용함으로써 쉽고 빠르게 어드민 UI를 구성할 수 있을 것이라 판단했습니다. 그리고 Cognito를 활용함으로써 OAuth2.0 방식으로 안전하게 로그인할 수 있도록 환경을 구성했습니다. 그리고 Cognito를 활용하면 MFA 설정을 쉽고 빠르게 구축할 수 있고, 어드민 유저의 접근 기록을 자동으로 저장할 수 있다는 점에서 큰 이점이 있었습니다. 심지어 AWS 인프라 안에서 권한 관리를 효율적으로 처리할 수 있다는 것도 큰 장점이었습니다. 그리고 인프라 비용을 최소한으로 사용하고자 어드민 페이지에 들어가서 API가 호출될 때만 서버가 동작하도록 서버리스 방식으로 어드민 기능을 모두 구축했습니다. 유저의 개인 정보가 담겨 있는 사진은 외부에서 권한이 있는 유저만 접근할 수 있는 S3 저장소에 안전하게 저장했고, S3에 저장된 사진을 조회하는 과정에서 권한이 있는 유저만 사진을 조회할 수 있도록 환경을 구축했습니다. 

 

위와 같이 어드민 서비스를 구축한 결과 팀 안에서도 권한이 있는 유저만 유저의 개인정보를 살펴볼 수 있도록 환경을 구축할 수 있었습니다. 

 

 

 

 


 

 

 

 

 

핵클, 앰플리튜드 활용 방안 개선기

최근에는 팀에서 데이터 드리븐하게 의사결정을 할 수 있도록 핵클, 앰플리튜드에 데이터를 적재하는 환경을 구축하고 있습니다. 데이터를 적재하려면 프론트, 백엔드 코드에서 핵클, 앰플리튜드에 이벤트를 전달해야 했습니다.

 

이벤트 전달 코드를 작성하면서 프론트, 백엔드에서 전달한 이벤트가 핵클, 앰플리튜드에 잘 전달되는지 항상 테스트를 해야 했습니다. 만약 비즈니스 로직의 변경 때문에 핵클, 앰플리튜드에 이벤트가 제대로 전달되지 않는다면 데이터의 정합성이 맞지 않아서 데이터를 보고 의사결정을 하는 과정에서 문제가 발생할 수 있었습니다. 그래서 코드가 변경되더라도 핵클, 앰플리튜드에 이벤트를 전달하는 코드에는 문제가 없는지 바로 확인할 수 있도록 단위 테스트 코드를 모두 작성했습니다. 이벤트를 전달하는 메서드가 로직 안에서 정상 호출되는지, 이벤트를 전달할 때는 어떤 값을 전달하는지의 행위와 상태를 모두 검증했습니다. 이렇게 테스트 코드를 작성함으로써 비즈니스 로직 코드에 변경이 발생하더라도 이벤트 전달 코드에는 문제가 발생하지 않는지를 빠르게 확인할 수 있는 환경을 구축할 수 있었습니다. 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

육아크루 서비스를 개발하면서, 6개월이란 시간 동안 위에 작성된 부분을 제외하고서도, 여러 문제들을 해결하고 있습니다. 문제를 해결하는 과정에서 앞으로도 선택의 순간이 올 때면 아래와 같은 두 가지 기준을 고려하고 싶습니다.

 

1. 어떤 선택을 했을 때 비즈니스 임팩트를 더 낼 수 있는가.
2. 어떤 선택을 했을 때 오버 엔지니어링 하지 않을 수 있는가.

 

 

앞으로도 비즈니스에 도움이 될 수 있고, 오버 엔지니어링 하지 않는 그 어느 선에서 여러 선택을 하고자 합니다. 하반기 회고글에서도 문제 해결을 위해 어떤 선택을 했는지 글로 정리하여, 팀을 위해 현명한 선택을 했는지 돌아보고 싶습니다. 가끔 작성한 글을 읽고 도움을 되었다는 감사한 연락을 받곤 합니다. 이번에도 이 짧은 기록이 누군가에게 도움이 될 수 있었으면 좋겠습니다. 나 또한 누군가에게 삶의 방향을 알려주는 등대가 될 수 있음을 기억하며 꾸준히 글을 적겠습니다.

 

 

 

 

 

 


 

 

 

 

 

 

 

 

무모함과 용기를 지닌 사람

누군가 제게 "다이노즈 팀에서 일하는 이유가 있는가?" 물었습니다. 나름대로 물음에 대한 답변을 했지만, 답을 한 이후에도 왜 다이노즈 팀에서 일하고 있는지 생각했습니다. 쉽사리 물음에 대한 답이 떠오르지 않을 때쯤 '시대예보: 핵개인의 시대'라는 책을 읽으면서 인사이트를 얻을 수 있었습니다. 

 

직장인에게 소속감과 명분은 사실 돈보다 더 근본적인 동기부여입니다. 자신의 일이 사회에 공헌하고 있다는 대의명분이 빈약하고, 그 안에서 자신이 성장한다는 서사가 희미할 때, 숫자의 무한 비교에 매달리게 되는 것입니다. 창업자, 리더, 입사 동기 등 이들의 모든 연결을 묶고 푸는 관계의 열쇠는 충성심이 아닌 자부심이어야 합니다. 회사의 사회적 가치에 대한 자부심, 또는 어떤 결과를 함께 도출해내고 있다는 구체적 협력자로서의 자부심, 그런 것들이 서로를 대하는 중요한 준거라는 것입니다. 

서로가 진심을 다하고 그 성과를 존중하면 먼 길을 함께 갈 수 있습니다. 자기 인생의 능동적 결정권을 서로 존중해 주었을 때 이 시대의 개인들은 자기 삶과 사회 모두에 책임을 다하는 핵개인으로 거듭납니다. 

 

 

글을 읽으면서, 지금도 팀이 겪고 있는 여러 문제를 해결하기 위해 노력하는 팀원들이 떠올랐습니다. 성인이 되기 전, 이 글을 읽으면서 막연하게나마 어른이 된다면 이런 사람들과 함께 일하고 싶다고 생각했습니다. 

 

가는 길이 험난하더라도, 인생엔 항상 장애물 투성이라도, 내 힘으로 부족한 것을 알지만 무모함과 용기를 지닌 사람. 어떤 사람은 장애물을 보고 체념하고 장애물을 보면 피하거나 돌아가는데, 어떤 사람은 그 태산과 같은 장애물과 싸우기 위해 전투태세를 취하곤 한다. 물론 철옹성과 같은 그 '장애물'은 일일단신으로 맞닥뜨리는 사람은 '무모하다'. 허나, '뜨거운 심장' 심장을 타고 흐르고 있는 그 '따스함'으로 세계를 아름답게 할 마음을 지닌 사람. 때론 옳지 못한 '불의'를 그 '뜨거움'으로 활활 태워버릴 정신을 지닌 사람. 가슴속, 응어리 뜨거운 열정을 가진 사람. 

 

 

언젠가 무모함과 용기를 지닌 사람과 함께 일할 수 있으려면 내가 먼저 무모함과 용기를 지닌 채, 태산과 같은 장애물과 싸울 수 있는 사람이 되어야 한다고 생각했습니다. 그럼 언젠가는 장애물에 함께 맞서 싸울 수 있는 동료를 만날 수 있으리라 생각했습니다. 어른이 된다면 만나고 싶었던 사람들을 다이노즈 팀에서 만날 수 있었습니다.

 

 

 

 

 

 


작은 스타트업이기 때문에, 내가 문제를 해결하지 못하면 팀은 멈출 수밖에 없다는 것을 알고 있습니다. 그런 이유 때문인지는 몰라도 팀원들은 각자의 자리에서 생존을 위해 치열하게 달리고 있습니다. 개인적으론 여러 장애물들과 싸우는 과정에서 성장하고 있다는 것을 느낄 수 있었고, 내가 하고 있는 이 일이 누군가에게 도움이 되고 있다는 사실을 깨달을 때면 동기부여를 얻을 수 있었습니다. 어쩌면 화려하진 않아도 필요한 일을 하고 있는 팀원들을 보면서, 각자의 자리에서 팀의 장애물을 극복하는 팀원들을 보면서 '자부심'을 느낄 수 있었습니다. 

 

만약 누군가 제게 "다이노즈 팀에서 일하는 이유가 있는가?" 묻는다면, '자부심'의 관점에서 답을 하고 싶습니다. 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

마치며

도전하는 삶을 살면서 진심으로 응원하고 싶은 사람들이 생겼습니다. 개인의 잘난 모습만을 드러내는 사람보다는 팀을 먼저 생각하는 사람. 고마웠던 이에게 진심으로 감사함을 표현하는 사람. 원하고 적성에 맞고 흥미에 맞는 일을 찾아서 지루함을 견디고 꾸준함으로 성과를 내는 사람. 사랑하는 사람을 지키기 위해 끝까지 노력한 사람. 그리고 마지막으로 꿈을 이루기 위해 간절하게 도전하는 사람. 이런 사람을 볼 때면 진심으로 응원하면서도 때론 부러운 마음이 들기도 합니다. 그리고 내가 누군가를 응원하는 것처럼 나 또한 내가 응원하고 싶은 사람의 모습을 하고 있는가 생각합니다. 

 

2024년 하반기에는 팀을 위해 나는 무엇을 할 수 있는가 치열하게 고민하고, 팀의 발전을 위해 빠르게 행동하는 삶을 살고 싶습니다.

 

 

 

 

 

팀의 발전을 위해 나는 무엇을 할 수 있을까 생각합니다. 일단 확실한 건, 자기 자신을 챙길 수 없는 사람을 보호할 수 있는 사람이 되기 위해, 자부심을 느낄 수 있는 팀을 지킬 수 있는 사람이 되기 위해 조금 더 불편하게 있고 싶습니다. 문제를 해결하려면 여러 스터디가 필요하고, 성장을 해야만 개발자로서 문제를 더 잘 해결할 수 있다고 믿습니다. 그래서 앞으로도 문제를 하나라도 더 해결할 수 있는 사람이 될 수 있도록 성장해야겠다고 다짐합니다. 아무리 정신없는 상황 속에서도, 퇴근길이면 당신을 위해 제철 과일을 사들고 갈 수 있는 사람이 되었으면 하는 바람으로 글을 마칩니다. 긴 글 읽어주셔서 감사합니다. 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

참고 링크

 

Redirect Checker | Check your Statuscode 301 vs 302

Features This Redirect Checker supports several features like: · Select different User Agents like    · Desktop-Browsers (Chrome, Internet Explorer, Safari, Firefox,...)    · Mobile Devices (IPad, Iphone, Android, Windows Phone, Kindle, Nokia...

www.redirect-checker.org

 

SEO Checker | Test your website for free with Seobility

Instantly review your website for free with the SEO checker from Seobility and get tips for a better search engine optimization and higher rankings.

www.seobility.net