본문 바로가기
읽고쓰고

[Naver D2] 백엔드 개발자의 진로

by 별토끼. 2017. 1. 22.
반응형

이 글은 백엔드 개발자의 진로를 읽고 개인적으로 참고하기 위해 정리한 글 입니다.

백엔드 개발자의 진로

일의 범위

  • 웹 어플리케이션 개발
  • 데이터 분석을 위한 엔지니어링
  • 분산파일 시스템이나 DBMS와 같은 제품 생성

일의 기회

  • 폭넓은 기술을 접할 수 있는 역할
  • System Engineer, Front End 등의 인접한 분야의 개발자와 소통할 기회
  • 한 분야에 대한 전문성을 키울 수 있는 기회
    • (EX: 서비스 통계 모듈 개발 ---> 대용량 데이터 다루는 엔지니어)

보람과 고충

보람

  • 시스템을 안정적이고 효율적으로 운영할 때 보람
  • 내면적인 부분까지 완성도 추구하는 사람이 적합

고충

  • 24시간 실행되는 서버 프로그램

향후 전망

다양한 도구와 프레임워크 개발 상황에 대하여

  • 과제 늘어가는 속도 > 생산성 증가 속도
  • 기존 기술을 쓰면서 깊이 있는 고민을 한다면 새로운 도구에 빠른 적응과 응용이 가능
  • RDB, TCP/IP, OS, 통계 등 바탕으로 발전해왔기 때문에 여러 분야와 연결되어 발전하기 좋음.

머신러닝이나 빅데이터 기술 발달에 대하여

  • 백엔드 개발에서 데이터 분석, 모델링 업무에 참여하는 경우도 더 늘어날 것
  • 분석/모델링 뒷받침하는 개발
    • 로그성 데이터를 어떻게 활용할지에 대한 고민
    • 대용량 데이터를 다른 저장소로 옮기는 일 등
  • 즉, 대용량 서비스를 개발하기 때문에 AI/빅데이터와 시대의 과제에 맞닿아 있음.

백엔드 개발에 필요한 지식

중요한 지식 및 기본적인 지식

  • 웹 생태계의 스펙
    • HTML, HTTP(1.1, HTTP/2)
  • 기본 SDK, 라이브러리/프레임워크 이해와 활용
  • 클라이언트를 위한 API설계
  • 서버/컴포넌트/객체 간의 역할 분담, 의존성, 통신 방법 설계
  • 저장소 활용
    • DBMS 설계
    • Cache 적용 (Blobal/Local cache 적용 범위, 라이프 싸이클, 솔루션 선택)
    • 파일 저장 정책 및 솔루션 선택 활용
  • 검색 엔진 연동 방식 설정
  • 빌드 도구
    • Maven/Gradle
  • 배포 전략
  • 성능 테스트/프로파일링/튜닝
    • JVM 레벨의 튜닝(GC옵션 등)
      • 웹 서버(Nginx, Tomcat)등의 설정/튜닝
    • OS 설정의 주요 값 확인
  • 인접 기술에 대한 이해
    • DBMS, Front End 등
  • 서버 개발자에만 해당하지 않는 항목
    • 테스트 코드 작성, 리팩토링 기법
    • 버전 관리 전략
      • branch 정책 등

혼자 다 깊이 알아야 한다는 의미는 아님. 팀을 이룬 개발자들의 지식이 합쳐져서 구현 방식과 정책이 결정.

데이터베이스

한 서비스에도 다양한 저장소를 활용. 여전히 RDB가 가장 우선시.

  • 쿼리의 호출 횟수나 실행 계획이 비효율적이지 않은지 확인하는 습관 필요
  • 느린 쿼리를 모니터링하고 DBA와 협업하여 성능 개선 작업 필요
  • join 지양
    • SQL단순할수록 다른 저장소에 캐시하거나 분산 저장 쉬워짐
  • Stored prodecure 지양
    • 사용시 DB 병목 가능성이 커짐
  • 트래픽 분산 문제

개발툴

새로운 도구가 나왔을 때 적응할 수 있는 학습력/적응력/판단력이 본질

  • 레벨0: 이미 쓰고 있는 개발도구의 사용법을 알려주거나 가이드 문서를 줘도 잘 못 씀
  • 레벨1: 알려주거나 같은 팀에서 만든 가이드 문서에 있는 만큼만 쓸 수 있음
  • 레벨2
    • 개발도구의 공식 레퍼런스를 보고 사용법을 스스로 익힐 수 있음
    • 자신이 경험한 사용법을 문서화해서 팀 내에 전파할 수 있음
  • 레벨3
    • 여러 개발도구를 비교 분석해서 상황에 적합한 도구를 선택할 수 있음
    • 공식 레퍼런스 문서에서 부족한 부분을 수정해서 기여할 수 있음
  • 레벨4
    • 개발도구의 문제를 소스 코드를 수정해서 Fork/패치해서 사용할 수 있음

신입사원의 경우 최소 레벨2 필요.

병렬처리(공부필요)

Servlet기반의 Java웹서버들은 기본적으로 사용자의 요청을 병렬적으로 처리. 따라서, 객체가 멀티스레드에서 공유되는 것인지, 아닌지 의식하는 일 중요.

  • Tread-safe한 변수만 두면 된다는 단순 규칙만으로 문제 예방 가능.
  • JAVA의 경우 Executors, ThreadPoolExecutor에 있는 많은 옵션들이 정교한 제어를 하는데 도움이 된다.

보안

아래 공격에 대처하는 방법을 알고 있어야 한다.

  • XSS
  • CSRF
  • SQL Injection

테스트

자료구조/알고리즘

실무에서 직접 구현한다는 것보다, 구현된 솔루션을 잘 선택하고 활용하기 위해서는 그 바탕이 되는 지식이 중요.

JDK의 Collection Framework의 소스 볼 때부터, 대용량 데이터 어떻게 저장하고 탐색할지 결정할 때도 자료구조가 매우 중요.

개발 프레임워크

트렌드

JVM생태계 경우, Spring/Netty 기반의 프레임워크 꾸준히 발전

반응형

댓글