시스템엔지니어와의 수-다

humblego42·2020년 7월 26일
0
post-thumbnail

이호준 멘토님이 야놀자 시스템 엔지니어인 김성한님과의 급모임을 주선해주셔서 시스템 엔지니어링에 대한 얘기를 가볍게 들을 수 있었다.
이 때 들은 키워드들은 아래와 같았다.

  • OSI 7 layer: 이미 학습함.
  • 로드밸런싱
    • 개념: 하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 여러 대의 서버가 분산처리하여 서버의 로드율 증가, 부하량, 속도저하 등을 고려하여 적절히 분산처리하여 해결해주는 서비스
    • 방법: 네트워크 상단에 로드밸런서가 존재하여 서버로 들어오는 패킷을 실제 서버로 균일하게 트래픽을 부하 분산시킨다. 만약, 실제서버 중 정상적으로 작동하지 않는 경우, 이를 감지해 정상적으로 작동하는 서버로 부하 분산시킨다. 참고
  • CDN(Contents Delivery Network)
    • 개념: 물리적으로 떨어져 있는 사용자의 '느린 응답속도/다운로딩 타임'을 극복하여 컨텐츠 제공자의 컨텐츠를 더 빠르게 제공하기 위한 기술이다.
    • 방법: 사용자가 원격지에 있는 서버(Origin Server)로 부터 Content를 다운로드 받을 때 가까이 있는 서버에서 받는 것보다 시간이 오래 걸리므로, 사용자와 가까운 곳에 위치한 Cache Server에 해당 Content를 저장(캐싱)하고 Content 요청시에 Cache Server가 응답을 주는 방식. 이를 통해 성능/가용성/보안/인텔리전스 이점을 제공한다. 참고
  • CI/CD(Continuous Integration / Continuous Delivery)
    • 개념: 애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법. 지속적인 통합, 서비스 제공, 배포가 핵심이다. 새로운 코드 통합으로 인해 개발 및 운영 팀에 발생하는 문제를 해결하기 위한 솔루션이다. 참고
  • 오토스케일링
    • 개념: 사용자가 정의한 주기(스케줄링)나 이벤트(모니터링 알람)에 따라 서버를 자동으로 생성하거나 삭제한다. 제공하는 서비스에 사용자가 몰리는 경우에는 원활한 서비스를 위해 서버를 늘리고, 다시 여유로운 상황이 되면 불필요한 서버를 자동으로 줄여 발생하는 요금을 낮출 수 있다.

위 개념들은 쿠버네티스를 학습하며 이미 얉게 접했던 내용이다. 하지만 이 개념들을 '인프라 레벨에서' 고민하고 가치를 만들어내고 있는 엔지니어를 통해 들으니 내용의 깊이가 달라서 새로웠다.

아래는 위 만남 이후에 작성한 후기이다.


'시스템 엔지니어와의 수다' 후기

아래 글은 야놀자 시스템 엔지니어인 김성한과 수다에서 느낀 내용을 적은 글입니다. 좋은 자리 마련해주신 42seoul 이호준 멘토님과 좋은 얘기 들려주신 김성한님께 감사드립니다.

금요일에 이호준 멘토님이 급 야놀자 시스템 엔지니어 김성한님과의 만남을 주선해주셔서, 시스템 엔지니어링에 대한 수다를 들을 수 있었습니다. 서버 엔지니어링이라는 제가 잘 몰랐던 영역을 조금이나마 엿볼 수 있었던 시간이라 즐거웠습니다.
세세한 내용은 yujo님이 정리해주셨으니, 저는 느낀 점을 공유드리고자 합니다. 혹시 부정확한 내용이 있으면 지적해주시면 감사히 배우겠습니다.

시스템 엔지니어는 시스템/인프라 영역에서 '비용효율화'와 '안정성'을 주로 고민한다.

저는 시스템 엔지니어가 어떤 고민을 하는지 궁금했습니다. 다음 예시상황을 상상해보면 시스템 엔지니어가 기업에서 어떤 가치를 만들어내고 어떤 고민을 하는지 느낌이 빡옵니다.

서비스에 필요한 웹/앱 등을 구현하는데 필요한 비용이 3억이라고 치면 운영하는데 월 30억 정도든다고 생각하면 된다고 합니다. 물론 서비스가 꽤나 성공적이어야 운영비가 이만큼 책정될 것입니다. 서비스가 위 운영비를 커버할만큼 일매출이 1.5억 정도 나온다고 가정해봅니다.
이 경우 백엔드자원을 효율적으로 쓸 수 있도록 셋팅하여 10%만 비용효율화를 이뤄내도 월 3억가량 운영비용이 절감됩니다. 또한 혹시나 업데이트 같은걸 잘못해서 하룻동안 장애가 나면 일매출 1.5억이 그대로 날아가므로, 안정성을 확보하는 것이 중요합니다.

이는 단순히 코드에 대한 지식만을 가지고 달성하기 힘든 가치입니다. 시스템/인프라 지식과 노하우-어떤 장비를 사용할지, 서버는 몇 대 놓을지, 서버간에 통신은 어떻게 할 것인지 등등-가 있어야 합니다. 시스템 엔지니어는 시스템/인프라 영역에서 위 가치들을 달성하기 위한 고민을 합니다. 더 나아가면 보안에 대한 고민까지합니다.

결국 개발자라면, 서비스가 작동하는데 쓰이는 기술들을 '알아야'한다. 자신이 핸들링하는 영역만 안다고 능사가 아니다.

김성한님과 이호준 멘토님의 얘기를 들으면서 개발자는 단순히 IT기술을 사용해서 서비스를 구현할줄만 아는 사람을 칭하는게 아니라는 생각이 들었습니다. 우리가 되고 싶은 단순 코더와 구별되는 개발자는 '효율성'과 '안정성'을 위해 필요한 방법을 선택할 줄 알고, 기술영역에서 문제가 생겼을 때 해결할 수 있는 능력이 있어야합니다.

이를 위해선 단순히 코드를 작성하는 걸 넘어서, 자신의 코드가 어떻게 작동하는지, 컴퓨터 자원을 어떻게 쓰게되는지, 어떤 영역에 어떤 영향을 주고 받는지 알아야합니다. 그리고 시스템/인프라 영역에서 어떤 과정을 거쳐 코드가 작동되는지도 알아야합니다. 문제가 생겼을 때 어떤 부분에서 이슈가 있을 수 있고 이를 확인하기 위해 누구한테 물어봐야하는지 알고, 물어봐서 문제를 해결할 수 있을 것입니다.

ex) 효율적이고 안정적인 서비스를 만들고 싶은 백엔드 엔지니어라면, 시스템/인프라 영역을 알아야 제약사항을 파악할 수 있을 것이다.
ex) 네트워크 장비가 고장나서 서비스가 멈췄는데 코드에 문제가 있는지만 체크하고 있으면..? 노답쓰.. 어쨎든 기술영역에서 문제가 생기면 개발자가 책임지고 해결해내야할 것이다.

이런 지식 없이 개발자 커리어를 시작하더라도 결국은 이런 지식이 필요한 순간이 온다고 합니다. 특히 철저히 분업이 되어있지 않은 개발자조직에 속하는 순간.. 피해갈 수 없으리라.. 결국 '문제해결'이 업이 되는 업계(개발, 컨설팅, 마케팅 등등)에서는 소위 말하는 T자형 인재가 필요한 것으로 보입니다.

profile
자기전에 뿌듯한 하루를 추구합니다. @42seoul @IBM C:LOUDERs

0개의 댓글