🩷 01-1 개발자는 대체 뭐하는 사람인가요?
개발자 : 컴퓨터가 이해할 수 있는 언어로 무에서 유를 창조하고 누군가 이해할 수 있도록 작성하는 일을 수행
개발자의 직군은 사용하는 프로그래밍 언어, 개발 툴로 나뉘게 된다.
🩵 웹 개발자
- 웹사이트 개발하는 개발자
🤍 웹 퍼블리셔 / UI 개발자
- 웹사이트에서 보이는 부분을 담당하는 개발자
- 해외에서는 UI 개발자라고 부름
- 주로 사용하는 언어 : HTML, CSS, JavaScript (주로 사용 X)
- 웹사이트의 외적 요소를 코드로 구현하는 역할
🤍 프론트엔드 개발자
- 프로그래밍 요소를 개발하는 개발자
- 사용자에게 보여줄 웹사이트 화면을 만듬
- 웹사이트의 다양한 기능이 실행되도록 프로그래밍함
- 클라이언트 개발자라고도 부름
- 공부해야할 언어 : HTML, CSS, JavaScript
🤍 백엔드 개발자
- 웹사이트에서 눈에 보이지 않는 요소 개발
- 서버개발자라고도 부름
- 데이터베이스에 저장되는 정보 입출력, 데이터 분석과 가공, 로그인 등 보안요소 등 개발
- 사용언어 : JavaScript, 파이썬, PHP, 자바 등 다양한 언어 사용
- 백엔드 프로그램을 만들 수 있게 도와주는 프레임워크 있음
🤍 풀스택 개발자
- 프론트엔드와 백엔드 관련 지식 모두 갖추어 개발할 수 있는 개발자
- 소기업이나 스타트업에서 필요로 하는 개발자
- 혼자 웹 서비스 전체를 개발할 수 있는 사람을 의미함
🩵 모바일 개발자
- 스마트폰에서 동작하는 어플리케이션 개발
- 앱 개발자라고도 함
🤍 안드로이드 개발자
- 안드로이드 기반의 모바일 앱을 개발
- 2017년 이후부터는 코틀린 주로 사용
🤍 ios 개발자
- 아이폰과 아이패드의 모바일 앱을 개발
- 스위프트 사용
🩵 게임 개발자
- 게임의 전체적인 구조를 설계해서 게임이라는 결과물을 만드는 직군
- 게임 진행을 위한 알고리즘, 물리 엔진 구현, 3D 그래픽 렌더링, 서버 관리 등 게임의 모든 구성 요소 다룰 수 있어야함
- 프로그래밍, 컴퓨터, 수학 등 여러 분야에 걸쳐 깊은 지식과 높은 숙련도 요구
- C++, C#을 주로 사용
🩵 응용 소프트웨어 개발자
- PC용 프로그램을 개발하는 사람 지칭
- 윈도우 프로그램 : C++, C# 사용
- 맥 프로그램 : 스위프트
- 운영체제, 컴퓨터 구조, 소프트웨어 공학에 관한 지식 필요
🩵 임베디드 개발자
- 하드웨어 작동을 프로그래밍하는 직군
- 임베디드 시스템
- 기계 또는 기타 제어가 필요한 시스템을 제어하는 컴퓨터 시스템
- 임베디드 소프트웨어 개발자
- 하드웨어 체제 개발, 작동시킬 소프트웨어 개발하는 일을 하는 직군
- C언어, C++, 어셈블리어 사용
🩵 정보 보안 전문가
- 데이터 도난이나 손상을 차단하고 컴퓨터 시스템을 보호하는 일을 하는 직군
- 프로그래밍, 네트워크, 컴퓨터 구조, 운영체제 등 컴퓨터 공학 전반에 걸친 지식 필요
🩵 AI 개발자
- 인간의 사고와 학습같은 지적 능력을 컴퓨터를 통해 구현하는 직군
- 머신러닝 개발, 딥러닝 개발로 구분할 수 있음
🩷 01-2 코딩과 프로그래밍, 앱과 프로그램
개발 : 개발자가 하는 일, 프로그래밍 또는 코딩이라고도 부름
🩵 코딩
소스코드 : 컴퓨터에 어떤 명령을 내리기 위해 컴퓨터가 이해할 수 있는 언어로 작성한 정보
코딩 : 소스코드를 작성하는작업
코더 : 컴퓨터가 처리할 수 있는 명령어로 코드(부호)를 작성하는 사람을 지칭
설계문 : 작업을 어떻게 수행할 것인지 알려주는 코드
명령문 : 컴퓨터에 각종 지시를 내리는 코드
주석 : 각 코드가 어떤 내용인지 개발자가 쉽게 알아볼 수 있도록 설명해 주는 코드
🩵 프로그래밍
프로그래머 : 개발할 프로그램에 어떤 기능을 추가하고, 어떤 방식으로 구현할지 미리 계획할 수 있어야 함
순서도 : 일을 처리하는 과정을 순서대로 도식화 한 것
알고리즘 : 어떤 순서로 할지, 발생할 수 있는 상황은 무엇이고 그에 따라 어떤 행동을 할지, 어떤 과정을 몇 번 반복할지 등을 설계하는 것
프로그래밍 : 알고리즘을 프로그래밍 언어로 작성하는 과정
소스코드 : 프로그래밍하여 만들어진 결과물
🩵 개발
개발 : 코딩이나 프로그래밍 외에 좀 더 많은 요소가 결합되어 있음.
6가지의 단계로 개발자의 업무를 정리하자면
- 요구 사항 분석
- 시스템 명세
- 구조 설계
- 구현
- 테스트
- 유지 보수
로 되어 있다.
개발자의 업무를 자세히 살펴 보자면,
- 프로그램 코딩하며 소프트웨어를 만듬
- 서비스가 제대로 작동하는지 모니터링
- 기존 소프트웨어의 문제점이나 비효율적인 부분들을 찾아 개선
- 데이터베이스 체계를 구축하는 것
- 개발 과정을 자동화하고 설계를 문서로 정리하는 것
이 외에도 더 있으며, 이 업무 모두 소프트웨어 개발에 있어 중요한 부분이다.
🩵 소프트웨어 vs 프로그램 vs 애플리케이션
🤍 소프트웨어와 프로그램
하드웨어 : 컴퓨터 본체, CPU, 메모리 등 눈에 보이고 만져지는 부분
소프트웨어 : 프로그램, 라이브러리, 데이터 등으로 눈에 보이지 않는 부분
데이터 : 정보
라이브러리 : 어떤 일을 수행하기 위해 필요한 기능을 일정 단위로 묶은 것
프로그램 : 모든 과정을 수행할 수 있도록 만든 것
소프트웨어 : 프로그램, 데이터, 라이브러리 뿐만 아니라 모든 것을 아우르는 것
🤍 애플리케이션
애플리케이션 : 응용 프로그램, 어플 또는앱이라고 흔히 부름
시스템 프로그램 : 운영체제를 구성하는 소프트웨어. 원활히 사용할 수 있는 환경 제공
응용 프로그램 : 각각 목적에 따라 직접 실행하여 활용할 수 있는 프로그램
🩷 01-3 프로그래밍 언어도 외국어인가요?
🩵 프로그래밍 언어
프로그래밍 언어 : 사람과 컴퓨터 사이에 정교하고 풍성한 소통 수단을 위해 만들어진 것
🩵 프로그래밍 언어가 다양한 이유
- 다양한 요청과 수요에 따라 계속해서 새로운 프로그래밍 언어가 만들어짐
- 과거에 비해 편리하면서도 오류 발생이 적고 더 강력한 기능을 갖추게 됨
🩵 고수준 언어와 저수준 언어
기계어 : 0과 1만으로 이루어진 언어
고수준 언어 : 사람의 언어 (자연어) 에 가까운 언어
저수준 언어 : 기계의 언어 (0과 1) 에 가까운 언어
어셈블리어 : 하나의 명령에 한 가지 동작밖에 할 수 없는 아주 단순한 언어
🤍 컴파일 언어
- 프로그램을 마친 뒤 코드 전체를 미리 기계어로 번역 (컴파일) 한 다음 실행 파일을 생성해서 실행하는 언어
- 컴파일이라는 과정 때문에 전체 개발 시간 늘어남
- 오류로부터 비교적 안전하고 프로그램 실행 속도 빠름
🤍 인터프리터 언어
- 작성된 코드를 한 줄 한 줄 통역하면서 실행되는 언어
- 신속하고 유연한 개발 과정이 필요한 소프트웨어에 사용됨
🤍 IDE
통합 개발 환경 : 개발자들이 잘못된 코드를 작성하지 않도록 도와주는 프로그램 (Integrated Development Environment)
코드를 편리하게 실행할 수 있을 뿐만 아니라 각 기능을 쉽게 테스트하고 오류가 나는 원인을 친절하게 알려주어 개발을 빠르게 할 수 있도록 도와줌
- 이클립스
- 자바 프로그래밍에 많이 사용되는 도구
- 비영리 재단에서 교육용으로 만들어 무료로 사용가능
- 인텔리제이
- 이클립스와 비슷한 용도로 사용되며, 더 강력한 기능을 가지고 있음
- 모든 기능 사용하려면 유료 정기 구독권 따로 구매해야 함
- 파이참
- 젯브레인스에서 개발한 소프트웨어
- 파이썬 개발에 특화된 IDE
- 안드로이드 스튜디오
- 안드로이드 개발용 IDE
- 엑스코드
- 애플이 개발한 IDE
- 맥에서만 사용 가능
- 스위프트를 사용하여 아이폰 앱이나 맥용 프로그램을 만드는데 사용됨
- 비주얼 스튜디오
- 마이크로소프트에서 제작한 IDE
- 윈도우 프로그램부터 온라인 서비스 등 다양한 소프트웨어 개발에 사용됨
- 비주얼 스튜디오 코드
- 마이크로소프트에서 제작한 IDE
- 광범위한 종류의 개발에 사용되는 도구
- 가벼운 코드 편집 위주의 기능만 포함하기 때문에 정확하게 말하면 코드 에디터로 구분됨
- 원하는 플러그인을 추가해서 용도에 맞는 IDE로 구성할 수 있음
🩷 01-4 디버깅 중인데, 빌드 해 보고 이상 없으면 릴리스할게요
🩵 디버깅
디버그 : 주로 오류 수정 프로그램과 그 작업을 통칭하는 단어
디버깅 : 오류를 찾아 제거하는 행동, 개발에 많은 부분을 차지하고 있기 때문에 놓쳐서는 안될 중요한 작업
🩵 빌드
빌드 : 소스 코드를 비롯한 모든 프로그램 구성 요소를 모아 실행할 수 있는 파일 또는 파일 묶음을 만드는 과정
🩵 빌드 번호와 버전 번호
🤍 빌드 번호
빌드 번호 : 출시되기 전 프로그램 버전
디버그 빌드 : 제품 개발하는 동안 오류나 기능을 테스트하기 위해 빌드하는 것
릴리스 빌드 : 모든 개발이 끝난 후 배포하기 직전에 점검하는 베타 버전
🤍 버전 번호
버전 번호 : 제품을 출시할 때 제품마다 매기는 번호
- 이미 출시한 버전을 변경하려면 새로운 버전을 만들어 배포해야함
🩵 배포
배포 : 빌드를 마친 실행 가능한 파일을사용자가 접근할 수 있는 환경에 배치하는 것
🩵유지보수
유지보수 : 프로그램 개발 뒤 이어지는 버그 대응 및 기능 업데이트 등의 후속 작업
🩵 리팩토링
리팩토링 : 코드를 개선해서 읽기 쉽고 효율적인 좋은 코드로 만드는 작업
결과는 바꾸지 않으면서 코드를 더 아름답게 리모델링하는 것을 말함
🩵 코드 리뷰
코드리뷰 : 각각 맡은 부분을 프로그래밍하여 만든 후 동료 개발자들과 함께 코드를 확인하고 의견을 주고받는 것
코드리뷰의 이점
- 작성자가 발견하지 못한오류를 동료가 발견하여 사전에 문제를 방지할 수 있음
- 노련한 선임 개발자는 신입 개발자가 짠 코드에서 미숙한 부분을 찾아 지도해 주고, 신입 개발자는 선임 개발자가 짠 코드를 통해 실전 지식을 습득할 수 있음
- 띄어쓰기 방식이나 함수와 변수에 사용하는 용어를 통일해서 소스 코드를 좋은 가독성과 일관된 스타일로 유지 가능
코딩 컨벤션
변수의 이름을 짓는 법, 코드 줄을 맞추는 법과 같이 팀 또는 회사에서 정한 코딩 스타일 규약
🩵 문서화
주석 : 코드 중간에 달아놓은 설명
주석
코드에 영향을 미치지 않고 코드 설명을 위한 메모
문서화 : 소프트웨어를 사용할 사람들, 이를 수정, 개선하는 등 작업을 이어 나갈 사람들을 위한 설명서