백엔드 개발자의 업무 가이드

백엔드 개발자의 주요 업무와 역할, 그리고 효율적인 개발 프로세스에 대해 알아봅니다

백엔드 개발자의 업무

백엔드 개발자는 소프트웨어 개발에서 핵심적인 역할을 담당합니다. 주로 다음과 같은 업무를 수행합니다:

1

개발 과제 할당

과제를 할당받거나 직접 떼어가는 단계
2

과제 분석

기술적 구현 방법과 자원 소요를 검토하는 단계
3

개발

실제 코드를 작성하는 단계
4

테스트

작성한 코드를 검증하는 단계
5

QA(Quality Assurance)

품질 보증을 거치는 단계
6

배포(Deployment)

실제 서비스 환경에 적용하는 단계

상세 업무 설명

1. 개발 과제 할당

과제를 할당받거나 과제를 떼어간다. 조직이 크면 대부분 도메인에 따라 할당받는 식이지만, 조직이 작으면 직접 어떤 과제를 (일을) 하겠다고 떼어가는 경우도 있다.

조직 규모에 따른 차이

대기업: 도메인별 전문가 체계, 체계적인 과제 할당 중소기업: 다재다능한 역할, 직접적인 과제 선택 스타트업: 전체적인 아키텍처 설계부터 구현까지

2. 과제 분석

과제는 개발 관점으로 주어지는 것이 아니다. 비즈니스 관점에서 주어진다. 그래서 과제가 어떻게 기술적으로 구현되어야 하는지 검토하는 일은 개발자가 직접 해야 하는 일이다.

분석의 중요성

잘못된 분석은 기술 부채와 자원 손실로 이어질 수 있습니다. 초기 분석이 프로젝트의 성패를 결정합니다.

규모가 크고 잘 정비된 조직의 경우, 과제의 분석까지 어느정도 되어 개발자에게 할당되는 경우가 있다. 그런 일은 흔치는 않고, 대부분은 구체적이지 않은 요구사항으로 과제가 정의된다.

정의된 과제를 분석하는 일은 아주 중요하다. 개발자만 알 수 있는, 현행 서비스 관점에서 고려해야 하는 한계도 있을 것이며, 어떠한 기술 스택을 사용할지 등의 결정으로 앞으로의 기술 부채가 얼마나 커질지, 들어가는 자원이 얼마나 커질지를 결정하게 된다.

이 부분은 개발자 출신 관리자(혹은 기획자)가 모던 아키텍처에 대해서도 잘 알고 있으면 계획을 해주거나, 계획을 도와줄 수 있을 것이다. 그런 좋은 상황이 아니면, 잘못된 선택으로 인해 많은 자원 손실을 겪을 수도 있고, 원치 않는 관례적인 비효율적인 아키텍처를 사용해야만 하는 상황이 있을 수도 있다.

3. 개발과 테스트의 반복

초기 분석이 끝나면, 분석과 개발과 테스트의 반복이다.

typescript
// 개발 과정 예시
interface DevelopmentProcess {
  analyze: () => Requirements;
  implement: (requirements: Requirements) => Code;
  test: (code: Code) => TestResults;
  refine: (results: TestResults) => void;
}

const process: DevelopmentProcess = {
  analyze: () => ({
    /* 요구사항 분석 */
  }),
  implement: (req) => {
    /* 코드 구현 */
  },
  test: (code) => {
    /* 테스트 수행 */
  },
  refine: (results) => {
    /* 결과에 따라 개선 */
  },
};

실제 구현을 하는 도중이나, 테스트를 해보면서 분석이 잘못되었다고 느꼈을 수도 있다. 그러면 다시 분석을 개선하고 구현을 재진행한 뒤 다시 테스트한다.

4. QA와 배포

테스트를 마친 뒤 배포하기 전에는, QA를 거치는 경우가 있다. (작은 조직은 QA 담당자가 따로 없는 경우가 많다. 이런 경우 개발자가 직접 QA를 하기도 한다. 테스트에서 점검하지 못한 부분이 있으면 엣지케이스 등 문제가 될 수 있는 부분들을 미리 점검한다.)

QA 역할
  • 작은 조직: 개발자가 직접 QA 수행 - 중간 조직: 전담 QA 엔지니어 - 큰 조직: QA 팀과 자동화 테스트

QA를 마치고 나면 배포를 한다.

배포 관련 고려사항

다른 주제도 그렇지만 배포만 해도 얘기할 거리가 한트럭이다. 왜냐면, 배포에서 발생할 수 있는 문제가 많아서 이에 대해 여러 주제가 생겼기 때문이다.

Blue-Green DeploymentCanary ReleaseRolling UpdateA/B Testing

주요 배포 고려사항 상세

  1. 어떻게 하면 무중단으로 배포할지? - Zero Downtime Deployment
  2. 어떻게 하면 이전 버전으로 쉽게 돌아갈지? - Rollback Strategy
  3. 어떻게 하면 환경 차이 영향을 최소화할지? - Containerization
  4. 어떻게 하면 스케일아웃을 쉽게 할지? - MSA, FaaS, Kubernetes
  5. 어떻게 하면 배포시 코드 통합을 쉽게 할지? - Continuous Integration
  6. 어떻게 하면 코드변경시 배포를 쉽게 할지? - Continuous Deployment
  7. 어떻게 하면 배포 모니터링을 할지? - Monitoring
  8. 어떻게 하면 배포 로깅을 할지? - Logging
  9. 어떻게 하면 배포 보안을 할지? - Security
  10. 어떻게 하면 배포 테스트를 할지? - Testing