백엔드 개발자 (Backend Developer) 얼마나 알아야 하나?

백엔드 개발자 (Backend Developer) 얼마나 알아야 하나?

백엔드 개발자로 꽤 많은 시간이 흘렀지만, 자신을 되돌아 보는 시간이 많이 없었습니다.

그러나, 최근에 채용 면접 준비하면서 개발을 해왔던 나 자신을 돌아보게 되면서 

백엔드 개발자의 판단하려면 어떤 기준이여야 하는지 고민하게 되었습니다.



우리가 하는 일을 하려면 얼마나 알아야 하는거지?



백엔드 개발이 요구하는 기술 과 배경 지식 

생각보다 백엔드 개발은 정말 많은 부분의 기술과 배경 지식이 필요하다는 것입니다.

물론 이 상황은 다양한 언어와 환경과 생태계 역할에 따라서 상이하지만,  

현재 환경을 중심으로 나열하면, 아래와 같습니다.

  • 내가 하려는 일의 도메인 지식
    • 비즈니스 및 업무 도메인 모델
  • 기본적인 컴퓨터 과학에 필요한 전공 지식
    • 컴퓨터 공학, 알고리즘 
    • 수학적 사고 능력과 객체 지향적 사고
  • 인터넷과 네트워크, 서버/클라이언트, 통신 프로토콜에 대한 이해 
    • HTML, HTTP(1.1, HTTP/2), HTTPS, API, Socket
  • 언어별 SDK, 레퍼런스가 많은 라이브러리/프레임워크 대한 이해
  • 다양한 시간에 따른 처리 시스템
    • 스케쥴러 및 배치 시스템
  • 리눅스 및 기본 운영체제에 활용
    • 커맨드라인(CLI) 명령어 활용 및 OS 별 주요 설정 확인
  • 다양한 개발 도구에 대한 활용
    • 통합 개발 환경 도구(IDE), 형상 관리 도구(Git), 개발 테스트 및 문서도구(Postman, Swagger)
  • 클라이언트를 위한 인터페이스 설계
    • RESTful Design
  • 프론트엔드 및 인프라스트럭처 등의 인접 기술에 대한 이해 
    • 프론트엔드 및 BFF 구성에 대한 이해
    • 클라우드 및 인프라스트럭처 이해와 활용
      • AWS, Azure 제품군
  • 데이터 활용
    • 데이터베이스 설계 및 활용
      • DB 모델링 및 정규화
      • ACID 및 인덱스 전략과 튜닝
    • 캐시 및 Nosql 전략
      • 저장 목적에 따른 솔루션 선택과 활용
    • 검색 데이터 적재 및 데이터 분석
  • 빌드 도구
    • Ant, Maven, Gradle
  • 지속적 통합과 배포 전략
    • 형상 관리 전략
    • CI & CD
    • Docker, K8s
  • 성능 테스트와 모니터링 그리고 성능 최적화
    • 다양한 트래픽과 응답시간에 대한 수치화 및 스케일링 전략
    • 웹서버(ALB, Nginx, tomcat) 이해와 개선
  • 보안
    • 다양한 보안공격에 대한 시큐어 코딩과 취약점 패치 및 관리
  • 모니터링 및 장애 대응 인식
    • 성능 모니터링 플랫폼(APM), 알림 시스템(Mail, Webhook)
  • 테스트 코드 및 리팩토링
    • 신뢰성을 위한 테스트 코드 작성과 코드 커버리지
    • 코드 리뷰와 리팩토링
  • 기술 동향 및 디자인 패턴과 아키텍처
    • 현대화된 기술 선택과 도입
    • 마이크로서비스, 도메인 주도 설계
    • 이벤트 기반의 아키텍처

모든 백엔드 개발자가 나열된 내용을 전부 완벽하게 구사하는 것은 아니지만, 대용량 트래픽을 처리하는 시스템을 담당하는 백엔드 조직 또는 팀이라면 위에 나열된 요소의 각기 처해있는 상황에 따라서 중요도 는 다를 수 있으나, 그 조직 또는 팀에서 구성원과의 지식이 합쳐지거나 솔루션을 통해서 해결합니다.

개발자는 이러한 다양한 배경 지식과 요소들은 통해서, 지속적으로 현대화 되기를 원하고, 이는 개발 생태계에도 빠르게 변화하며, 이를 따라가지 못한다면, 오래된 시스템이 되는 건 너무나 쉽습니다.

이는 수요와 공급과도 귀결되며, 도태된 시스템 또는 조직의 지식은 결국 개발자로써 그 가치가 떨어지거나, 멈출 수 있다는 것입니다.

개발자들 사이에서는 이런 말이 흔하게 나오기도 합니다.


개발자는 정말로 평생 배워야 한다


한편으로는 이 배움의 중심이 너무 새로운 것에만 집중하거나, 언어나, 기술 키워드에 매몰되거나, 내가 하고 있는 일을 벗어난 영역에 대한 집중을 하거나 합니다.

물론 솔루션이나, 소프트웨어 지원 시스템, 프레임워크 개발 등의 핵심 시스템을 개발 하는 경우도 있지만, 이는 기본적인 백엔드 개발자가 개발할 범위는 아니라고 생각합니다.

또한 특정 언어나, 사상에만 의존해서 개발한다면, 시대에 파도에 휩쓸릴 수 있기 때문입니다.
그러나 이 경우에도 수요나 공급에 따라서, 동작 원리를 이해하고, 활용하거나, 취사 선택할 수 있는 지식을 갖추는 게 더 중요합니다.

현대에 백엔드 개발자는 대체로 알고리즘을 직접 구현하거나, 적용하거나, 서버를 직접 물리적으로 조립하지 않습니다.

이는 많은 시간 검증하고, 성숙되고, 누적된 오픈소스 생태계와 라이브러리, 다양한 관례와 용례가 합쳐진 시대이며, 이제는 누구든 손쉽게 나만의 서버를 만들고, 이를 확장 할 수 있습니다. 

그리고 다양한 도구나 플랫폼을 활용한다면, 엄청난 생산성과 품질 향상을 얻을 수 있습니다.

마치며


내 환경과 상황에 맞는 기술을 깊이 있게 이해하고, 적재적소에 선택&활용하는가 입니다.


결국 모든 나열된 기술에 대해서 꾸준히 배우고, 공부하여, 이해하는데 중점을 두어야 합니다.
모든 것을 내가 개발하거나, 내재화 하는 것은 생각보다 현실과 동떨어질 수 있기 때문입니다. 

개발에서 말하는 다형성 (Polymorphism) 처럼 시대를 관통하는 주제에 집중한다면, 현실문제를 더 빠르게 해결하고, 성장하는 백엔드 개발자가 될 수 있다고 믿고 있습니다.





댓글

이 블로그의 인기 게시물

안드로이드(Android 5.0) Lollipop Webview issue

넥서스유저의 Galaxy S6 Edge 리뷰