수습 2개월차 막바지
10월 4일 입사 후에 벌써 2개월차이다. 그 사이에 1차 수습 평가 발표를 했고, 다음 주 중으로 2차 수습 평가 발표를 앞두고 있다.
우리 팀에서는 화상 미팅 서버를 담당하고 있는데, 생각보다 아키텍처가 복잡하다. 화상 미팅을 제공하려면, 우선 WebRTC 시그널링을 담당하는 서버와, 다양한 네트워크에 존재하는 각 클라이언트와 미디어 서버가 서로 연결될 수 있도록 돕는 STUN 서버나 TURN 서버, 또 클라이언트들의 스트림을 믹싱해서 서로에게 제공해주는 미디어 서버(MCU) 등이 필요하다.
여기에 미팅이 진행되는 그룹 단위인 룸과 각 룸의 참여 유저에 대한 정보를 담을 DBMS, 프론트엔드와 직접 통신하면서 이 데이터를 읽고 쓰면서 미팅의 시작부터 종료까지를 관리하는 게이트웨어 역할의 RestAPI 서버, 참여자들의 채팅 데이터를 교환하는 채팅 서버, 발표자가 공유한 자료를 각 참여자에게 제공하는 자료 공유 서버 등이 추가적으로 붙게 된다.
이런 전체 서비스는 쿠버네티스를 통해 배포되고, 각 서버는 분리된 컨테이너에서 실행되면서 요구 조건에 따라 적절하게 오케스트레이션 된다.
이렇게 전체 생태계가 오픈소스 프로젝트와 다양한 전(?)현직 개발자를 거쳐 구성되고 유지보수되어 왔기 때문에 생각보다 복잡한 편이다. 지난 2개월을 돌아보면 무언가 특별하게 한 것은 없고 여기저기 이것저것 열심히 구경한 기억만 떠오른다.
아, 스프링은, 거의 안쓰는군요
우리 팀에서는 내게 익숙한 스프링이 거의 사용되지 않는다. 다른 조직에서 개발하다가 넘어왔다는 자료 공유 서버 정도가 스프링 MVC로 되어있고, 나머지는 대부분 NodeJS 환경에서 ExpressJS로 짜여진 어플리케이션이다. 그래도 첫 한 달 정도는 이 자료 공유 서버에 변경된 요구사항에 따라 추가 기능을 구현하는 업무를 주로 주셔서 다행 이었는데, 요즘은 이 작업이 마무리되고 Express를 해야하는 상황이 와서 진땀을 빼고 있다.
모든 게 다 어색하다. JPA도 겨우 하는데, ORM으로 Sequelize를 써야된다. NestJS 같은 래퍼 프레임워크를 쓰는 것도 아니어서 IoC 같은 것도 안된다. index.ts에서 Server 인스턴스를 만들어 init을 작업을 하는데, 여기 안에서 모든 서비스들의 인스턴스가 생성되고, 라우터의 생성자 인자로 주입시켜준다. 그 라우터를 특정 URL에 매핑해주는 작업까지 여기서 한다.
지금은 기존 코드를 참고해서 그럴듯하게 흉내내고 있는 수준인 것 같은데, 얼른 자바스크립트나 Express, Sequelize에 익숙해져야할 것 같다. ExpressJS 자체는 예전에 MERN 스택으로 프로젝트를 했기 때문에 어느 정도 익숙하지만, NestJS와 같이 요즘 이쪽 진영의 트렌디한 추가 기술도 파악해봐야 할 것 같다.
코드 괜찮네요, 이제 테스트 코드 짜볼래요?
스프링으로 된 서버든, Express로 된 서버든 꼭 구현 내용 외에 테스트 코드까지 코드리뷰 때 꼼꼼히 확인하신다. 처음에는 당황하면서도, 이전에 JUnit 쓰는 방법을 대충 봐둔 적이 있어서 이럭저럭 테스트 코드를 짰는데, 지금은 오히려 테스트에 진심이다.
얼마 전에 열심히 짠 테스트 코드가 계속 통과를 못했던 일이 있었는데, 알고 보니 비즈니스 로직의 if문에 부등호 방향이 잘못되어 있었던 것이 문제였다. 형식적으로 짰던 테스트 코드가 정말로 실질적인 도움이 되고 있었던 것이다. 이때부터는 기능 구현 만큼이나 몰입해서 테스트 코드를 작성하려고 노력하고 있다.
테스트 코드 짜는게 조금 더 익숙해지면 TDD, BDD도 실제 업무에 적용해보려고 한다. 위의 사례를 겪어보니까 테스트 코드를 먼저 짜고 기능 구현을 했다면 애초에 저런 문제가 없었을 것이라는 생각이 들었기 때문이다. 숙련만 어느 수준 이상으로 되면, 오히려 요구사항이 복잡하고 영향 범위가 클수록 TDD가 효율적일 것이라는 예감이 든다.
공부할 게 너무 많다: 리액티브 프로그래밍, 카프카, 쿠버네티스
배우고 익히고 싶은게 너무 많다. 지금처럼 그때 그때 찾아보면서 일을 처리해나가는 것도 좋지만, 신입인데도 예상하지 못한 큰 사이즈의 과제들을 많이 던져주셔서 (오히려 감사하다) 지금 현 상태로는 한계가 생길 것이라는 생각이 든다. 업무 외 시간을 잘 써서 미리 공부하고 적응해두는 것이 좋을 것 같은데, 생각보다 퇴근하고 컴퓨터 키는게 정말 쉽지 않다.
어떻게든 해봐야지. 일단 오늘은 Reactor를 파봤다.