Devin.KR

국비 출신 개발자가 갖출 지식

국비 출신 개발자가 갖출 지식을 살펴보고 자신의 경험에 맞는 다음 행동을 정합니다.

수료 프로젝트에서 설명하기 어려운 동작을 찾아 필요한 지식과 연결합니다. 공통 이론은 실행과 데이터의 원리를, 실무 기본기는 변경과 운영의 신뢰성을 다루며 직무별 확장은 목표에 따라 선택합니다. 각 책은 해당 영역의 실습을 돕는 연결 자료이며 전공 과목 전체를 대체하지는 않습니다.

모든 개발자가 갖출 지식

프로그래밍 언어와 실행 의미

전공 과목

  • 프로그래밍기초
  • 객체지향프로그래밍
  • 프로그래밍언어론

왜 필요한가

문법을 아는 것에서 더 나아가 값과 객체가 어떻게 전달되고 실패가 어디로 전파되는지 이해합니다. 같은 기능도 언어의 실행 규칙에 따라 오류와 자원 사용이 달라집니다.

실무에서 필요한 최소선

  • 값의 복사와 참조 공유를 작은 코드로 비교합니다.
  • 동등성 비교와 해시의 관계를 확인합니다.
  • 예외가 호출자를 거쳐 전파되는 경로를 추적합니다.
  • 파일과 연결을 사용한 뒤 해제하는 코드를 작성합니다.

더 깊이 공부할 때

  • 타입 검사와 실행 시점 오류를 구분합니다.
  • 클로저가 변수를 포착하는 방식과 객체 수명을 관찰합니다.
  • 비동기 작업의 완료와 취소가 전달되는 방식을 비교합니다.

자가 점검

  • 함수에 전달한 객체를 바꾸면 호출자의 값도 달라지는 이유를 설명할 수 있습니까?
  • 동등하다고 판단한 객체의 해시가 다르면 어떤 문제가 생기는지 설명할 수 있습니까?
  • 예외 발생 시에도 파일이 닫히는지 확인할 수 있습니까?

자료구조·알고리즘

전공 과목

  • 자료구조
  • 알고리즘

왜 필요한가

데이터를 저장하고 찾는 방식이 입력 규모에 따라 성능을 좌우합니다. 풀이의 정답뿐 아니라 선택 근거와 적용 조건을 설명합니다.

실무에서 필요한 최소선

  • 배열·해시·스택·큐의 접근 방식과 비용을 비교합니다.
  • 입력 크기에 따른 반복 횟수를 세어 시간 복잡도를 설명합니다.
  • 정렬된 입력에서 이진 탐색의 경계 조건을 테스트합니다.
  • 트리와 그래프를 순회하고 방문 여부를 관리합니다.

더 깊이 공부할 때

  • 동적 계획법에서 상태와 이전 결과의 재사용을 정의합니다.
  • 해시 충돌과 최악의 경우를 평균적인 동작과 구분합니다.
  • 알고리즘의 정확성을 불변식으로 설명합니다.

자가 점검

  • 중복 값을 제거할 때 배열과 집합 중 무엇을 선택하는지 설명할 수 있습니까?
  • 중첩 반복문이 입력 증가에 따라 얼마나 많은 작업을 하는지 설명할 수 있습니까?
  • 순환하는 그래프를 탐색할 때 종료 조건을 설명할 수 있습니까?

컴퓨터구조와 메모리

전공 과목

  • 컴퓨터개론
  • 디지털논리회로
  • 컴퓨터구조

왜 필요한가

실행 시간은 코드의 길이보다 CPU·메모리·입출력의 동작과 관련이 있습니다. 하드웨어 관점은 성능 병목을 측정하고 해석하는 근거가 됩니다.

실무에서 필요한 최소선

  • CPU·주기억장치·저장장치의 역할을 구분합니다.
  • 이진수와 정수 표현의 범위를 확인합니다.
  • 명령어 실행과 메모리 접근의 관계를 그림으로 설명합니다.
  • 연속된 데이터와 흩어진 데이터의 접근 시간을 비교합니다.

더 깊이 공부할 때

  • 캐시 지역성과 데이터 배치를 연결합니다.
  • 부동소수점의 표현 오차를 계산 예제로 확인합니다.
  • 원자적 연산과 메모리 가시성의 관계를 학습합니다.

자가 점검

  • 메모리가 부족한 상황과 디스크가 느린 상황을 구분할 수 있습니까?
  • 정수 범위를 넘는 입력의 결과를 확인할 수 있습니까?
  • 같은 연산이라도 데이터 배치에 따라 시간이 달라지는 이유를 설명할 수 있습니까?

운영체제와 동시 실행

전공 과목

  • 운영체제
  • 시스템프로그래밍

왜 필요한가

서버의 실행 상태와 공유 자원의 충돌을 이해하는 데 필요합니다. 기능이 정상 동작하더라도 동시 요청과 자원 부족 상황에서는 별도의 검증이 필요합니다.

실무에서 필요한 최소선

  • 프로세스·스레드·파일 핸들의 상태를 관찰합니다.
  • 스택과 힙의 역할을 실행 코드와 연결합니다.
  • 공유 값을 동시에 수정하는 경쟁 상태를 재현합니다.
  • 잠금 범위와 자원 해제 시점을 정합니다.

더 깊이 공부할 때

  • 가상메모리와 페이지 교체를 학습합니다.
  • 교착 상태의 조건과 회피 방법을 비교합니다.
  • 블로킹 입출력과 이벤트 기반 처리를 비교합니다.

자가 점검

  • 스레드가 많아지면 항상 처리가 빨라지는지 근거를 설명할 수 있습니까?
  • 동시에 값을 증가시켰는데 결과가 예상과 다른 이유를 설명할 수 있습니까?
  • 프로세스가 종료되어도 파일에 기록된 데이터가 남는 이유를 설명할 수 있습니까?

네트워크와 웹 통신

전공 과목

  • 컴퓨터네트워크
  • 웹프로그래밍

왜 필요한가

요청이 실패한 위치를 구분하면 불필요한 재시도를 줄일 수 있습니다. 브라우저부터 서버까지의 경로를 프로토콜과 관측 결과로 설명합니다.

실무에서 필요한 최소선

  • DNS·IP·TCP·TLS·HTTP의 역할을 요청 순서와 연결합니다.
  • 개발자 도구에서 요청 헤더와 응답 상태를 확인합니다.
  • 연결 실패·시간 초과·서버 오류를 구분합니다.
  • 쿠키와 세션의 전달 조건을 확인합니다.

더 깊이 공부할 때

  • TCP의 재전송과 흐름 제어를 학습합니다.
  • 프록시와 캐시를 거친 요청의 경로를 추적합니다.
  • 중복 요청에 안전한 API와 재시도 조건을 설계합니다.

자가 점검

  • 주소를 입력한 뒤 응답이 오기까지의 흐름을 설명할 수 있습니까?
  • HTTP 응답이 없는 상황과 오류 응답이 있는 상황을 구분할 수 있습니까?
  • 요청을 다시 보내면 데이터가 중복 생성될 수 있는지 판단할 수 있습니까?

데이터베이스와 일관성

전공 과목

  • 데이터베이스
  • 데이터베이스응용

왜 필요한가

저장 기능은 데이터 관계와 동시 변경의 규칙까지 포함합니다. 화면에서 보이는 결과와 저장된 사실이 어긋나지 않도록 모델과 트랜잭션을 함께 검토합니다.

실무에서 필요한 최소선

  • 기본키·외래키·고유 제약으로 데이터 규칙을 표현합니다.
  • 조인 전후의 행 수와 집계 결과를 비교합니다.
  • 관련 변경을 트랜잭션으로 묶고 실패 시 롤백을 확인합니다.
  • 실행계획으로 조회 방식과 인덱스 사용을 확인합니다.

더 깊이 공부할 때

  • 정규화와 비정규화의 이익과 유지 비용을 비교합니다.
  • 격리 수준에 따른 동시 수정 결과를 재현합니다.
  • 인덱스의 조회 이익과 쓰기 비용을 함께 측정합니다.

자가 점검

  • 조인 뒤 합계가 커진 이유를 키의 중복으로 설명할 수 있습니까?
  • 결제 저장은 성공하고 재고 변경은 실패한 상황을 어떻게 처리할지 설명할 수 있습니까?
  • 인덱스를 추가했는데 조회가 개선되지 않은 이유를 확인할 수 있습니까?

이산수학·확률통계

전공 과목

  • 이산수학
  • 확률과통계

왜 필요한가

논리는 조건식과 알고리즘을 정확하게 표현하는 도구입니다. 통계는 데이터와 측정 결과의 불확실성을 해석하는 데 필요합니다.

실무에서 필요한 최소선

  • 집합 연산과 논리식을 필터 조건으로 표현합니다.
  • 함수·관계·그래프로 데이터의 연결을 모델링합니다.
  • 평균·중앙값·분포를 작은 데이터로 비교합니다.
  • 표본과 모집단을 구분하고 결과의 적용 범위를 기록합니다.

더 깊이 공부할 때

  • 귀납법과 불변식으로 반복 처리의 정확성을 설명합니다.
  • 조건부 확률과 독립의 차이를 예제로 확인합니다.
  • 신뢰구간과 검정의 가정 및 해석 한계를 학습합니다.

자가 점검

  • 부정과 논리곱이 섞인 조건식을 같은 의미의 식으로 바꿀 수 있습니까?
  • 평균 응답 시간이 같아도 사용자 경험이 달라질 수 있는 이유를 설명할 수 있습니까?
  • 함께 증가하는 지표만으로 원인과 결과를 단정할 수 없는 이유를 설명할 수 있습니까?

실무 기본기

Git·협업

전공 과목

  • 소프트웨어공학
  • 캡스톤디자인

왜 필요한가

변경 기록은 팀이 의도를 검토하고 오류를 추적하는 근거가 됩니다. 협업에서는 코드를 합치는 작업과 함께 요구사항과 책임 범위를 맞춥니다.

실무에서 필요한 최소선

  • 기능별로 변경을 나누고 이유가 드러나는 기록을 남깁니다.
  • 변경 전후 차이를 읽고 관련 없는 파일을 제외합니다.
  • 실습 저장소에서 충돌을 해결하고 동작을 확인합니다.
  • 리뷰 요청에 배경·검증 방법·남은 제한을 작성합니다.

더 깊이 공부할 때

  • 변경 기록을 따라 오류가 도입된 위치를 찾습니다.
  • 공유 기록을 수정하는 작업과 되돌림 기록을 추가하는 작업을 구분합니다.
  • 팀의 브랜치 규칙과 배포 흐름을 문서화합니다.

자가 점검

  • 충돌 표시를 지운 뒤에도 기능 검증이 필요한 이유를 설명할 수 있습니까?
  • 리뷰어가 변경 이유와 확인 방법을 알 수 있게 작성할 수 있습니까?
  • 잘못된 변경을 다른 사람의 작업을 보존하며 되돌릴 수 있습니까?

리눅스·셸과 실행 환경

전공 과목

  • 시스템프로그래밍
  • 운영체제

왜 필요한가

코드가 같은데 실행 결과가 다르면 경로·권한·환경변수를 확인합니다. 셸 사용은 반복 작업을 재현하고 서버 상태를 읽는 기본 수단입니다.

실무에서 필요한 최소선

  • 작업 디렉터리와 절대·상대 경로를 구분합니다.
  • 파일 소유자·권한과 실행 계정을 확인합니다.
  • 표준 출력·오류 출력·종료 상태를 구분합니다.
  • 파이프와 인용 규칙을 적용해 파일을 검색합니다.

더 깊이 공부할 때

  • 신호 처리와 종료 시 자원 정리를 실습합니다.
  • 실패 시 멈추고 결과를 기록하는 셸 작업을 작성합니다.
  • 서비스 실행 환경과 대화형 셸 환경의 차이를 비교합니다.

자가 점검

  • 터미널에서는 되지만 서비스로는 실패하는 원인을 좁힐 수 있습니까?
  • 공백이 있는 경로를 안전하게 전달할 수 있습니까?
  • 로그에 비밀값을 남기지 않고 환경 설정을 확인할 수 있습니까?

테스트와 검증

전공 과목

  • 소프트웨어공학
  • 소프트웨어테스팅

왜 필요한가

자동 테스트는 변경 뒤에도 요구한 동작이 유지되는지 확인합니다. 테스트의 개수보다 실패를 발견할 수 있는 조건과 기대 결과가 중요합니다.

실무에서 필요한 최소선

  • 업무 규칙의 정상·경계·실패 입력을 정합니다.
  • 외부 시스템을 분리한 테스트와 연결을 확인하는 테스트를 구분합니다.
  • 실패하는 테스트로 버그를 재현한 뒤 수정합니다.
  • 시간·무작위 값·공유 상태 때문에 흔들리는 테스트를 정리합니다.

더 깊이 공부할 때

  • 동시 실행과 중복 요청을 검증합니다.
  • 속성 기반 테스트와 입력 생성의 쓰임을 비교합니다.
  • 부하 실험에서 처리량과 지연 분포를 함께 확인합니다.

자가 점검

  • 구현 코드를 그대로 옮긴 기대값이 오류를 놓칠 수 있는 이유를 설명할 수 있습니까?
  • 외부 연결을 대신하는 객체만으로 확인할 수 없는 부분을 설명할 수 있습니까?
  • 발견한 버그가 재발하면 실패하는 테스트를 작성할 수 있습니까?

설계·리팩터링

전공 과목

  • 객체지향프로그래밍
  • 소프트웨어공학

왜 필요한가

변경 이유가 다른 기능을 분리하면 수정 범위를 예측하기 쉽습니다. 설계는 이름 붙은 패턴을 많이 쓰기보다 현재 요구사항과 변경 비용을 근거로 선택합니다.

실무에서 필요한 최소선

  • 입력 처리·업무 규칙·저장 책임을 구분합니다.
  • 숨은 공유 상태와 외부 의존성을 드러냅니다.
  • 동작을 확인하는 테스트를 유지하며 구조를 바꿉니다.
  • 중복을 합칠 때 의미와 변경 이유가 같은지 확인합니다.

더 깊이 공부할 때

  • 의존성 방향과 경계를 프로젝트 그림으로 표현합니다.
  • 도메인 규칙이 여러 계층에 흩어지는 문제를 검토합니다.
  • 추상화의 이익과 이해 비용을 변경 사례로 비교합니다.

자가 점검

  • 기능 변경에 따라 함께 바뀌는 파일의 이유를 설명할 수 있습니까?
  • 리팩터링 전후의 동작이 같다는 근거를 제시할 수 있습니까?
  • 새 인터페이스가 필요한 이유를 실제 변경 사례로 설명할 수 있습니까?

보안 기본과 개인정보

전공 과목

  • 정보보안
  • 웹프로그래밍

왜 필요한가

사용자가 보낸 값과 권한을 신뢰하기 전에 서버에서 검증합니다. 개발자는 기능 구현과 함께 데이터 노출과 오용 가능성을 검토합니다.

실무에서 필요한 최소선

  • 인증과 인가를 구분하고 타인 데이터 접근을 차단합니다.
  • 매개변수화된 질의와 출력 맥락에 맞는 처리를 적용합니다.
  • 비밀값을 소스와 로그에서 분리합니다.
  • 개인정보의 수집 목적과 보관 범위를 정리합니다.

더 깊이 공부할 때

  • CSRF·XSS·SQL 삽입의 발생 조건을 비교합니다.
  • 의존성 취약점 공지의 영향 범위를 확인합니다.
  • 위협 모델을 작성하고 보호 대상과 신뢰 경계를 표시합니다.

자가 점검

  • 로그인한 사용자도 타인의 자료에 접근하지 못하게 검증할 수 있습니까?
  • 사용자 입력을 저장할 때와 화면에 표시할 때 필요한 처리를 구분할 수 있습니까?
  • 키가 유출된 뒤 파일에서 지우는 것만으로 충분하지 않은 이유를 설명할 수 있습니까?

배포·운영·관측

전공 과목

  • 소프트웨어공학
  • 분산시스템

왜 필요한가

배포 성공 여부는 프로세스 실행뿐 아니라 실제 요청과 데이터 흐름으로 확인합니다. 로그·지표·추적 정보는 장애 원인을 좁히고 복구 판단을 돕습니다.

실무에서 필요한 최소선

  • 설정과 빌드 산출물을 구분하고 재현 가능한 실행 절차를 작성합니다.
  • 로그에 요청 맥락을 남기되 개인정보와 비밀값을 제외합니다.
  • 지연·오류·자원 사용을 함께 관찰합니다.
  • 실습 환경에서 이전 버전 복구와 백업 복원을 확인합니다.

더 깊이 공부할 때

  • 헬스 체크와 요청 처리 준비 상태를 구분합니다.
  • 스키마 변경과 여러 버전의 공존을 고려합니다.
  • 사용자 영향과 대응 행동을 기준으로 알림 조건을 정합니다.

자가 점검

  • 프로세스가 실행 중인데 서비스가 실패하는 사례를 설명할 수 있습니까?
  • 배포 뒤 오류가 늘었는지 이전 상태와 비교할 수 있습니까?
  • 백업 파일의 존재와 복구 가능성이 다른 이유를 설명할 수 있습니까?

공식 문서 읽기·기술 글쓰기

전공 과목

  • 컴퓨터개론
  • 소프트웨어공학
  • 캡스톤디자인

왜 필요한가

문서는 해결 방법의 적용 조건과 기술 선택의 근거를 전달합니다. 영문 공식 문서를 읽을 때도 전체 번역보다 현재 문제에 필요한 정의와 제한을 확인합니다.

실무에서 필요한 최소선

  • 사용 중인 버전의 공식 문서에서 해당 기능을 찾습니다.
  • 예제의 입력·출력·전제 조건을 실행으로 확인합니다.
  • 오류 보고에 재현 절차와 기대 결과·실제 결과를 작성합니다.
  • README에 설치·실행·검증 방법과 제한을 기록합니다.

더 깊이 공부할 때

  • 변경 공지와 폐기 예정 기능을 읽고 영향을 정리합니다.
  • 설계 결정에 대안과 선택 근거를 남깁니다.
  • 영문 용어를 원문과 함께 기록하고 문맥별 의미를 비교합니다.

자가 점검

  • 검색 결과의 예제가 현재 버전에도 적용되는지 확인할 수 있습니까?
  • 공식 문서의 주의 사항을 자신의 코드에 연결할 수 있습니까?
  • 처음 보는 사람이 문제를 재현할 수 있는 설명을 작성할 수 있습니까?

AI 도구와 함께 일하기

전공 과목

  • 소프트웨어공학
  • 인공지능

왜 필요한가

AI가 만든 코드도 요구사항과 실행 결과로 검토합니다. 맡기는 범위와 검증 기준을 명확히 하면 도구를 쓰면서 자신의 판단 근거도 유지할 수 있습니다.

실무에서 필요한 최소선

  • 입력과 기대 동작·제약을 구체적으로 전달합니다.
  • 생성된 변경을 읽고 실제 API 존재 여부를 확인합니다.
  • 비밀값과 제공 권한이 없는 데이터를 입력에서 제외합니다.
  • 테스트와 실행 결과로 답변의 오류를 확인합니다.

더 깊이 공부할 때

  • 작업 권한과 파일 접근 범위를 제한합니다.
  • 검증용 사례와 평가 기준으로 도구의 결과를 비교합니다.
  • 실패한 생성 결과와 수정 근거를 기록해 반복 작업을 개선합니다.

자가 점검

  • 생성된 코드가 맞다는 근거를 도구의 설명 외에 제시할 수 있습니까?
  • 명령 실행과 외부 전송을 허용하기 전에 영향을 검토할 수 있습니까?
  • AI 도움 없이도 핵심 코드의 동작과 실패 조건을 설명할 수 있습니까?

직무별 추가 지식

웹·제품 개발의 직무별 확장

전공 과목

  • 웹프로그래밍
  • 사용자인터페이스
  • 소프트웨어공학

왜 필요한가

화면·서버·제품 기획은 같은 요구사항을 서로 다른 관점에서 검증합니다. 관심 직무의 로드맵에서 담당 범위와 결과물 기준을 확인합니다.

실무에서 필요한 최소선

  • 화면에서는 키보드 접근과 로딩·오류 상태를 확인합니다.
  • 서버에서는 API 계약과 중복 요청 처리를 정합니다.
  • 제품에서는 사용자 문제와 성공 지표를 정의합니다.

더 깊이 공부할 때

  • 렌더링 성능과 접근성을 실제 사용 흐름에서 측정합니다.
  • 도메인 경계와 API 변경 호환성을 검토합니다.
  • 지표의 변화와 사용자 피드백을 함께 해석합니다.

자가 점검

  • 키보드만으로 핵심 기능을 사용할 수 있는지 확인할 수 있습니까?
  • API 응답이 바뀌면 화면에 어떤 영향이 생기는지 설명할 수 있습니까?
  • 기능을 만든 이유와 사용자가 얻는 이익을 검증할 수 있습니까?

시스템·네트워크·클라우드의 직무별 확장

전공 과목

  • 컴퓨터네트워크
  • 분산시스템
  • 정보보안

왜 필요한가

인프라 직무는 자원의 구성뿐 아니라 연결·권한·장애를 함께 다룹니다. 웹 배포 경험에서 출발해 서비스가 의존하는 환경을 실습망에서 검증합니다.

실무에서 필요한 최소선

  • 주소·경로·방화벽 규칙을 연결 그림으로 정리합니다.
  • 서비스 계정에 필요한 범위의 권한을 부여합니다.
  • 자원 제한과 장애 시 복구 절차를 실습합니다.

더 깊이 공부할 때

  • 중복 구성의 장애 전환과 데이터 일관성을 검증합니다.
  • 설정을 코드로 관리하고 변경 차이를 검토합니다.
  • 격리된 환경에서 공격 경로와 방어 효과를 분석합니다.

자가 점검

  • 연결이 막힌 위치를 계층별로 좁힐 수 있습니까?
  • 권한을 추가하기 전에 실패 원인과 필요한 권한을 확인할 수 있습니까?
  • 장애 전환 뒤에도 데이터가 맞는지 검증할 수 있습니까?

데이터·AI의 직무별 확장

전공 과목

  • 선형대수
  • 확률과통계
  • 인공지능
  • 데이터베이스

왜 필요한가

분석과 모델은 데이터의 품질과 평가 방법에 따라 결과가 달라집니다. 도구 사용에 더해 데이터의 출처·가정·한계를 설명합니다.

실무에서 필요한 최소선

  • 결측·중복·관측 단위를 확인합니다.
  • 학습용 데이터와 평가용 데이터를 목적에 맞게 분리합니다.
  • 비교 기준을 정하고 오차와 실패 사례를 기록합니다.

더 깊이 공부할 때

  • 선형대수와 최적화를 모델의 연산에 연결합니다.
  • 데이터 누수와 분포 변화의 영향을 확인합니다.
  • AI 작업 흐름의 도구 호출과 결과 검증을 설계합니다.

자가 점검

  • 평가 데이터의 정보가 학습에 섞인 상황을 찾을 수 있습니까?
  • 좋은 평균 성능 뒤에 가려진 실패 사례를 설명할 수 있습니까?
  • 같은 입력으로 분석과 평가를 재현할 수 있습니까?

임베디드·로봇의 직무별 확장

전공 과목

  • 디지털논리회로
  • 컴퓨터구조
  • 임베디드시스템
  • 로봇프로그래밍

왜 필요한가

센서와 구동기를 다루는 프로그램은 시간 제약과 물리 환경의 영향을 받습니다. 웹 개발 지식에 하드웨어 인터페이스와 제어·안전 검증을 더합니다.

실무에서 필요한 최소선

  • 센서 입력의 범위와 단위를 확인합니다.
  • 입출력 주기와 처리 지연을 측정합니다.
  • 장치 오류 시 정지 동작을 시뮬레이션에서 확인합니다.

더 깊이 공부할 때

  • 인터럽트와 실시간 작업의 우선순위를 학습합니다.
  • 좌표 변환과 제어의 기초를 선형대수와 연결합니다.
  • 통신 지연과 센서 잡음에 따른 동작을 검증합니다.

자가 점검

  • 오래된 센서 값을 사용하면 어떤 문제가 생기는지 설명할 수 있습니까?
  • 연산이 늦어졌을 때 제어에 미치는 영향을 설명할 수 있습니까?
  • 실제 장치를 움직이기 전에 격리된 실험으로 위험을 확인할 수 있습니까?