# 주니어 개발자로 성장하기 위해 필요한 핵심 역량

안녕하세요. 국모다it의 Paul입니다.

오늘은 지난번에 내용에 이어서 '진짜' 주니어 개발자가 되기 위해서는 어떤 역량이 필요한지 이야기해 보도록 할게요. 우선 아래의 이미지를 봐주시고 글을 읽어 가면 좋을 거 같습니다.

![Image](https://upload.cafenono.com/image/slashpagePost/20240825/165735_U35yD9VjdMckzwIXBk?q=80&s=1280x180&t=outside&f=webp)

주니어 개발자로서의 성공적인 성장은 개발 선배가 해결한 프로젝트를 구축하고, 실무 문제를 해결하거나 개선할 수 있는 능력을 갖추는 것에서 시작됩니다. 

이를 위해서는 두 가지 핵심 역량이 필요합니다. 프로그래밍 역량과 엔지니어링 역량입니다.

## 1. 프로그래밍 역량 🛠️

프로그래밍 역량은 주니어 개발자의 기본이 되는 요소로, 이 역량을 습득하기 위해서는 다음과 같은 고민이 필요합니다.

### 프로그래머로 성장하기 위한 고민

- 협업 가능한 프로그래머가 되려면 어떤 철학을 가져야 할까?

- 버그를 최소화하는 코딩 방법은?

- 단순 구현을 넘어 효율적인 알고리즘을 적용하려면?

- 품질 좋은 프로그래밍을 하려면?

### 더 나은 프로그래머로 성장하기 위한 고민

- 규모가 커져도 논리적 허점이 생기지 않게 프로그래밍하려면?

- 성능 유지 및 향상을 위한 프로그래밍 방법은?

- 협업에 도움을 주는 최적화된 프로그래밍 방법은?
- 

### 프로그래밍 역량 개발을 위한 키워드

- 코딩: 코드 가독성, 안전한 코드, 디버깅

- 패턴: 아키텍처 패턴, 디자인 패턴, 관형어 패턴

- 컴퓨터 과학 및 기본기

    - 자료구조, 알고리즘, 컴퓨터 구조

    - 운영체제: 운영체제에서의 문제 해결 노하우를 이해

    - 네트워크, 데이터베이스: 기초 지식 이해 및 실무 적용

### `커리어 매니저의 개인적인 추천!`

> 프로그래밍 역량에 관한 키워드를 쉽게 적었습니다. 하지만 키워드 하나하나가 쉽게 얻을 수 있는 것이 아닙니다. 키워드 하나가 적게는 6개월에서 몇 년 동안 익혀야 합니다. 추가로 실전에서 해당 문제에 직면하고 해결해야 비로소 얻어지는 역량입니다.

개인적으로 역량 개발 방법을 추천해 드리겠습니다.
가능하다면 이론과 실무 역량을 따로 습득하는 것이 아니라, 실무에서 직면한 문제를 이론 배경과 원리까지 고민하면서 동시에 역량을 쌓는 것을 추천해 드립니다. 

게임 속 목적을 위해 어두운 맵을 돌아다니면서 맵을 밝혀나가듯이, 프로그래밍 역량을 쌓아나가길 추천해 드립니다.

프로그래밍 역량과 관계된 블로그를 소개합니다.
[https://hl1itj.tistory.com/136?category=327240](https://hl1itj.tistory.com/136?category=327240) 

[소프트웨어 개발자 되기는 왜 어려운가?](https://hl1itj.tistory.com/136?category=327240)

## 2. 엔지니어링 역량 🔧

엔지니어링 역량은 큰 코드베이스를 관리하고, 조직 환경에서 유지보수와 개선을 담당하는 데 필수적입니다. 이 역량을 습득하기 위해서는 다음과 같은 고민이 필요합니다.

### 코드 컨벤션에 관한 고민

- 조직이 커져도 일관된 코딩 스타일을 유지하려면?

- 형식보다는 본질에 집중하려면?

### 코드 리뷰에 관한 고민

- 코드 베이스를 일관되게 관리하려면?

- 가독성 있고 안전한 코드를 어떻게 미리 확인할 수 있을까?

### 브랜치 전략에 관한 고민

- 거대한 코드베이스를 여러 명이 관리하려면?

- 불편함 없이 개발하려면?
- 

### 문서화에 관한 고민

- 코드와 API에 대한 내용을 팀원이 이해가 쉽게 이해시키려면 어떻게 해야 하지?

- 코드와 API에 관한 질문을 줄이기 위해서는 어떻게 해야 하지?

- 새로운 인력을 팀에 안착시키는 비용을 줄이려면 어떻게 해야 하지?
- 
- 
- 

### 테스트와 배포 시스템에 관한 고민

- 단위 테스트는 어떻게 해야 하지?

- 규모가 커질 때 대규모 테스트는 어떻게 해야 하지?
- 

- 시스템의 복잡도에 대응하기 위해 어떻게 테스트해야 하지?
- 

- 리팩터링, 대규모 재설계 상황에서 실수를 빠르게 잡기 위해서는 어떻게 테스트해야 하지?
- 

- 변화하는 기술, 시장 상황, 고객 취향에 더 빠르게 대응하기 위해 어떻게 테스트해야 하지?
- 

### 엔지니어링 역량 개발을 위한 키워드

- 코드 컨벤션: 문서화, 소스 파일 관리, 포매팅, 명명 등
- 

- 테스트: 단위 테스트, 통합 테스트
- 

- 형상 관리 및 빌드: 브랜치 전략, 버전 관리
- 

- 배포: 안전한 배포, 장애 대응, 운영

- 코드 베이스 유지보수

    - 코드 베이스 이해 : 변수, 데이터, 실행 흐름, 데이터 흐름 이해

    - 의존관계 이해 : 응집도, 결합도, 기술부채와 리팩터링

### `커리어 매니저의 추천!`

> 엔지니어링 역량은 AI가 대체할 수 없다고 생각합니다. 
조직이 처해있는 상황과 이해관계자의 상황에 따라 의사결정이 다르기 때문입니다. 

예를 들어 의존성에 관한 문제가 있을 때 기술 부채로 남겨둘지 리팩토링을 통해 의존성 문제를 해결할지는 조직의 상황에 따라 다릅니다.

시간에 따라 기업의 규모와 범위가 성장할 때 엔지니어링 역량이 기하급수적으로 요구됩니다. 
엔지니어링 역량을 개발할 기회가 있을 때 꼭 개발하였으면 좋겠습니다.

---

엔지니어링 역량과 관계된 블로그를 소개해 드립니다. 읽어보시면 도움이 됩니다.

대표 블로그 : [별로 안 궁금했지만 막상 들어보니 은근 궁금했던 개발 이야기](https://techblog.woowahan.com/6042/)

[별로 안 궁금했지만 막상 들어보니 은근 궁금했던 개발 이야기 | 우아한형제들 기술블로그](https://techblog.woowahan.com/6042/)

[
](https://techblog.woowahan.com/6042/)

## 마무리

> 주니어 개발자로 성장하기 위한 프로그래밍, 엔지니어링 역량을 소개해 드렸습니다. 소개해 드린 역량의 키워드는 어렵고, 무겁고, 개발할 때까지 시간이 오래 걸립니다. 

모든 역량을 다 갖추어야 주니어 개발자라고 생각하기보다는, 소개한 역량을 갸발하는 과정 중에 주니어 개발자가 된다고 생각합니다. 

이러한 역량을 개발하다 보면 ‘누군가 풀지 않은 문제에 도전할 때’가 올 것으로 생각합니다. 이때가 ‘시니어 개발자로 진입하는 시기가 아닐까’ 생각합니다.

마지막으로 부족한 부분이 있거나 더 나은 생각이 있으면 피드백 부탁드립니다.

국모다는 여러분들의 취업을 위한 성장을 돕기 위해 노력을 하고 있습니다

이 글이 도움이 되었다면 이모지를 하나 눌러 주세요~

위 글은 국모다it에서 활동하고 계신 커리어 성장 매니저 님의 글을 요약하여 작성하였습니다.

#국비교육 #코딩학원 #부트캠프 추천 #부트캠프 모음 #개발자교육 #취업연계 #취

For the site tree, see the [root Markdown](https://gukmodait.com/.md).
