인프랩 채용 공고

안녕하세요.
인프랩의 향로입니다.

저희 인프랩 개발팀은 현재 백엔드, 프론트엔드, 모바일 앱, 데브옵스 파트로 나뉘어져 있습니다.

각각의 개발 파트가 어떻게 일 하는지, 어떤 사람과 함께 하고 싶어하는지 등을 소개드리려 합니다.

세 번째로 모바일 앱 개발 파트를 소개드리겠습니다.

인프랩팀이 새롭게 모바일 앱 개발 파트를 구성하게 되었습니다.
코딩 교육 특성상 대부분의 사용자분들께서 PC 웹 브라우저를 주력으로 사용하시다보니 웹 서비스에 집중을 하게 되었습니다.

그동안은 웹 프론트엔드 개발자분들이 처음 앱을 출시하고, 웹 서비스를 메인으로 하면서 하면서 앱을 운영해왔는데요.
그러다보니 앱에 대한 여러 불편 사항을 제때 해결하지 못했습니다.

  • [[서비스] 모바일 앱 각 스토어에서 공개 중지 안내](https://www.infleaReact Native.com/notices/845132)

그래서 인프런의 앱 서비스를 새롭게 개편하기로 결정하고, 이에 맞춰 React Native 기반의 모바일 앱 개발을 전담할 개발팀을 구성하게 되었습니다.

앞서 언급했듯이 인프랩 팀에는 그동안 모바일 앱 전담팀이 없었습니다. 그러다보니 제로에서 시작하는 개발팀에 대한 걱정과 우려로 다음과 같은 궁금증이 생깁니다.

  • 코드리뷰는 하고 있는걸까? 서비스 기능 개발하기에 바빠서 각개전투 하는건 아닐까?
  • 테스트 코드를 작성하고 있을까?
  • 리팩토링 / 생산성 향상 등에 관심이 있을까?
  • 성장을 위한 피드백 문화가 있을까?
  • 구성원의 성장을 위해 회사에서는 어떤 지원을 해줄까?

개발자의 성장에 있어 가장 중요한건 개인의 노력인데요.

그렇다면 회사에서 해줄 수 있는 것은 무엇일까요?

제 생각에는 그 사람이 성장할 수 있는 좋은 재료와 환경을 제공해주는 것이 아닐까 싶습니다.

인프랩의 모바일 앱 (React Native) 개발 파트를 소개드리려고 합니다.

이런 환경이라면 좋은 개발자로 성장할 수 있지 않을까 생각해보는 시간이 되셨으면 합니다.

직군 소개


현재 인프랩 모바일 앱 개발 파트는 총 2명의 개발자로 이루어져있습니다.

  • 모바일 앱 개발자는 프로덕트 조직인 셀 (Cell) 과 프론트엔드 파트 (Part) 에 속합니다.
  • 셀 (Cell) 에서는 PM, 디자이너와 함께 모여 일하며 셀에서 맡은 제품을 개선하고 문제를 해결하고 있습니다.
  • 프론트엔드 파트 (Part) 에서는 매주 정기적으로 모여 각 셀에서 발생했던 장애에 대한 공유나 좀 더 일을 잘하기 위한 방법, 기술적인 공유 등을 하는 시간을 가지고 있습니다.
  • 스프린트 회고, 프로젝트 회고, 분기 회고, 반기 회고 등 다양한 회고를 기반으로 항상 더 나은 방식으로 문제를 해결하기 위한 개선을 진행합니다.

인프랩의 모바일 (React Native) 개발자는 다양한 기기/브라우저에 맞춰 사용자를 위한 클라이언트 애플리케이션 개발을 담당합니다.

intro

(출처: https://www.instagram.com/p/CQXLFvODOfF/)

  • TypeScript, React Native 를 기반으로 Android / iOS 애플리케이션을 개발하고 배포합니다.
  • 상황에 맞게 적절한 형태로 IOS, Android 네이티브 구현과 웹앱 구현을 나눠 진행합니다.
  • 모바일 영상 플레이어, OAuth 를 비롯한 각 서비스에 필요한 기능들을 구현, 개선 합니다.
    • 요즘은 특히 모바일 영상 플레이어와 영상 보호 기술 (DRM) 에 대한 고민이 많이 있습니다.
  • 시스템 전반의 성능 최적화를 위해 API 호출 최소화 / 렌더링 최적화 / 빌드 & 번들링 최적화 등을 상시로 진행합니다.
  • DataDog APM, Firebase 등을 통해 사용자 디바이스에서 발생하는 에러에 대해서 추적하고 해결합니다.
  • Figma를 통해 디자이너와 함께 사용자를 위한 UI/UX 개선을 고민하고 적용합니다.
  • Swagger, Codegen 기반으로 백엔드 개발팀과 함께 데이터에 대해 협업합니다.
  • 웹 프론트엔드 개발파트와 함께 사용할 공통의 라이브러리 등을 개발/개선 합니다.

기술 스택


모바일 앱 개발파트에서는 다음과 같은 기술 스택을 사용하고 있습니다.

  • TypeScript
  • React & React Native
  • Native Video Player
  • React Query, Zustand
  • Jest & Cypress
  • Firebase
  • Git, Github
  • MS CodePush, Github Actions

업무 방식


스타트업 특유의 빠른 제품 릴리즈서비스 안정성 이라는 2마리 토끼를 최소한의 인원으로 잡기 위해 적절히 업무 균형을 유지하고 있습니다.

  • Confluence / Jira를 도입하여 문서화를 적극적으로 진행하고 있습니다.
    • 설치형을 사용하지 않고, Cloud 버전을 사용해 관리 리소스를 최소화 하고 있습니다.

3

  • 정기적인 스프린트를 통해 업무 공유와 회고를 주기적으로 진행합니다.

    • 본인이 속한 Cell (스쿼드) 에서는 2주 단위의 스프린트를, 개발 조직 전체는 주 1회 모여 개발 작업들을 공유합니다.
    • 스프린트 방식 자체에 대해서도 주기적으로 회고를 진행합니다.
    • 어떤 방식이 가장 효율적이고 성과를 낼 수 있을지 정기적으로 고민하고 논의합니다.
  • 이슈 관리 도구인 JIRA 기반으로 업무를 진행합니다.

  • Git Flow를 변형한 저희만의 Git Flow에 맞춰 Branch 를 생성하고 Rebase / Merge 등을 진행합니다.

    • 작업된 코드는 PR (Pull Request) 을 요청하고 코드리뷰를 진행하여 반영하고 있습니다.

4

  • 모든 PR (Pull Request) 은 정적 분석 도구인 소나큐브(SonarQube) 와 연동하여 코드 퀄리티를 보장합니다.

5

6

  • 모든 배포는 Jenkins와 Github Actions 를 통해 dev / master 브랜치 push 시에 자동으로 배포가 진행됩니다.
  • DataDog APM과 Firebase를 통해 에서 발생하는 에러를 추적하고 해결합니다.

7

  • 상시로 시스템 부하를 낮추기 위해, 로컬 캐시를 통한 백엔드 API 호출 최소화 / 브라우저 렌더링 최적화 / 번들링 최적화 등을 진행합니다.

  • 6개월에 한번씩 제품 개발 파트 전체 회고를 진행합니다.

    • 진행했던 과제에 대한 소개와 아쉬운점/개선점등을 이야기합니다.
    • 다음 반기에 진행할 과제들을 정리합니다.
    • 이를 통해 제품 릴리즈에 몰두하느라 방향성을 잃는 일이 없도록 중심을 잡고 있습니다.

10

마무리


React Native 에 관한 유명한 컨텐츠라고 하면 Airbnb의 React Native 이야기와 리디-라프텔 팀의 React Native 이야기가 있습니다.

React Native으로 시작하여 네이티브 앱으로 전환한 Airbnb
네이티브로 시작하여 React Native으로 전환한 리디-라프텔

두 팀 모두 좋은 서비스를 만들었지만, 서로 다른 시작과 선택을 하게 된 것인데요.
이 과정에서 두 팀의 개발자분들은 정말 많은 성장을 할 수 있었을 것이라 생각합니다.

React Native이라는 기술의 발전이 저희 서비스의 발전 보다 더 빨라서 React Native을 계속해서 공부하고 개선해야될 수도 있습니다.
반대로 저희 서비스의 발전이 기술 보다 더 빨라 새로운 기술로의 전환이나 네이티브로 전환해야할 수도 있습니다.

“어떤 기술이 가장 좋다” 보다는 어떤 상황에 맞는 가장 적합한 기술과 아키텍처가 있다고들 합니다.
타사가 네이티브로 전환하기로 했다면 그건 무엇 때문일까?
타사가 React Native을 선택했다면 그건 무엇 때문일까?
우리는 React Native의 한계를 극복할 수 있지 않을까?
등등 여러가지 생각과 고민들을 직접 경험하면서 해결해나갈 수 있는 시간이 될 것이라 생각합니다.

인프런 서비스는 매년 2배이상의 폭발적인 성장을 하고 있습니다.
앞으로도 계속 이런 성장세를 유지한다면, 비즈니스의 발목을 잡지 않으면서 기술적 한계를 계속해서 격파해나가는 경험이 개발자에겐 큰 성장의 재료가 될 것이라 생각합니다.

그리고 각 단계별로 어떠한 기술적 결정이 내려질때 어떤 과정으로, 어떤 기준으로 이런 기술적 결정들이 내려지는지 바로 옆에서 경험하실 수 있습니다.

인프랩 개발팀은 아직 완성된 팀이 아닙니다.
그래서 모든 팀원이 성장에 대한 갈망을 가지고 있습니다.
조직에서는 이를 위해 정기적으로 시니어들의 기술적 공유를 흡수하는 시간을 갖고 있습니다.

이 글을 읽고 저희 팀에 관심이 생기셨다면, 인프랩 채용 공고 를 확인해주세요.