01. 라이브러리
● 라이브러리 (Library)
- 개발에 필요한 여러 재료들을 제공해 주는 역할
- ex. 머신러닝 TensorFlow 라이브러리, 웹 개발 jQuery 라이브러리
- 라이브러리는 개발할 떄 빈번하게 재사용되는 기능들을 모듈화 하여 모아 놓은 것
- 라이브러리는 전체 프로그램이 아닌 특정 부분 기능만을 수행하도록 제작되었기 때문에 프로그램 개발 시 쉽게 삽입해서 사용 가능
● 라이브러리 종류
- 표준 라이브러리
-- 프로그래밍 언어에 내장되어 있는 라이브러리
-- 별도의 설치 없이도 이용 가능
-- 표준 라이브러리는 프로그래밍 언어 차원에서 공식적으로 제공하는 라이브러리인 만큼, 해당 언어를 사용하는 핵심 기능들을 포함하고 있음
-- ex. 자바 java.lang / java.util / java.io 패키지, C 언어 stdio.h / math.h, 파이썬 math / sys / random / datetime
- 외부 라이브러리
-- 개발자들이 필요에 따라 만들어 놓은 라이브러리
-- 파일을 다운로드해 설치하여 사용
-- 개발자는 특정 기능을 라이브러리로 만들어야 할 때 직접 만들어 사용하기도 하고, 인터넷에 공유되어 있는 라이브러리를 가져가 쓰기도 함
-- ex. 자바스크립트 jQuery / Chart.js, 파이썬 NumPy / TensorFlow
● 라이브러리 사용하는 이유
- 코드의 재사용
- 유지 보수의 편의성
- 소스를 제공하지 않기 때문에 중요 기술 유출 방지
- 개발 기간 단축
- 코드 품질 향상
● 라이브러리 사용
- 라이브러리에 따라 사용하는 방식이 다르므로, 사용하고자 하는 라이브러리의 공식 사이트를 방문해 사용법을 익히는 것이 중요
- 대부분의 경우, 라이브러리의 공식 사이트에서 다운로드 파일과 설치 방법, 사용 가이드 등을 제공함
02. API
● API (Application Programming Interface)
- 표준화된 문법과 의사소통 방법을 사용하여 독립적인 시스템 간의 데이터 교환 및 상호 작용이 가능하게 하는 기술
- 기존에 잘 만들어진 API 를 사용하면 빠르고 효율적으로 작업 가능
● API 특징
- 구현 방식을 알 필요가 없음
- 설명서가 친절
- 서버에서 만든다
● API 사용 이유
- 개발 비용 단축
- 보안 강화 및 마케팅 효과
● API 형태
- private API
-- 기업 내의 시스템에서만 사용할 수 있고 외부로는 공개 X
- public API
-- 누구나 사용할 수 있게 공개
- partner API
-- 사용 계약을 맺은 파트너만 사용 가능
03. 동기 / 비동기
● 동기 (Synchronous)
- 응답을 기다리는 것
- 작업을 순서대로 처리하는 방법
- 진행 중인 작업을 처리하다가 다른 작업을 요청하면 진행중인 작업을 중단하고 요청한 작업의 응답이 올 때까지 계속 기다리면서 작업을 하나씩 처리해 나가는 방식
● 비동기 (Asynchronous)
- 응답을 기다리지 않는 것
- 작업을 병렬적 (여러 개를 번갈아서) 으로 처리
- 작업을 처리하다가 다른 작업을 요청한 후에 응답을 기다리지 않고 원래 하던 작업이나 요청한 작업을 제외한 또 다른 작업을 처리함
- 요청한 작업은 콜백 (요청한 작업의 처리가 완료된 후 실행) 방식으로 응답이 오게 되고 현재 진행 중인 작업이 없을 떄 처리함
● 블록 (block)
- 현재 진행중인 작업에서 다른 작업을 요청하면 응답에 대한 완료가 될 때까지 아무것도 할 수 없게 만드는 것
● 논블록 (non-block)
- 요청한 응답이 완료될 때까지 기다리지 않음
● 동기 + 블록
- 동기는 응답이 올 때까지 기다리는 것이고, 블록은 작업이 완료될 때가지 아무것도 할 수 없게 막는 것
● 동기 + 논블록
- 거의 사용되지 않음
● 비동기 + 블록
- 거의 사용되지 않음
● 비동기 + 논블록
- 두 가지 일이 독립적일 때 사용함
04. 인코딩 / 디코딩
● 인코딩 (Encoding)
- 코드화, 암호화라는 뜻
- 문자를 컴퓨터가 이해할 수 있는 0 과 1 로 변환하는 과정
● 디코딩 (Decoding)
- 해독이라는 뜻
- 코드화된 데이터를 사람이 인지할 수 있는 문자 형태로 변환하는 과정
● 문자 인코딩 / 디코딩
- 인코딩 / 디코딩 방식은 데이터가 문자인지, 문자열인지에 따라 달라짐
- 문자 표현을 위한 최초의 코드는 ASCII
- 유니코드를 사용한 인코딩 방식에는 UTF-8, UTF-16, UCS-2
● 문자열 인코딩 / 디코딩
- 문자열은 변환 시 작업이 한번 더 들어가게 됨
-- 정보의 크기를 효율적으로 관리하기 위해 인코딩 된 문자에 새로운 규칙을 적용해 한번 더 인코딩하는 것
- ex. URL, HTML, Base64 인코딩 방식
● URL 인코딩 / 디코딩
- URL 은 웹 페이지의 주소
- URL 은 대개 영어 알파벳과 숫자로 이루어져 있음
-- 그 이유는 URL 이 ASCII 로 분류된 문자로만 이루어져 있어야 인터넷상에서 전송되기 때문
- 한글, 러시아어 등 ASCII 코드에 해당하지 않는 문자가 URL 안에 들어 있으면 인코딩 되어야만 정보가 전송됨
● HTML 인코딩 / 디코딩
- HTML 문서 내용을 깨진 글자 없이 잘 보이게 하기 위해서도 인코딩 작업이 필요
- HTML 인코딩은 <meta> 태그에서 설정 가능
● Base64 인코딩 / 디코딩
- Base64 는 이진수로 이루어진 데이터를 텍스트 형태로 변형하는 방식
- 텍스트 형태만 처리 가능한 채널들이 존재하기 때문에 Base64 같은 방식이 필요함
05. 코딩 컨벤션
● 코딩 컨벤션 (Coding Convention)
- 코딩의 가독성을 높이고 여러 명의 개발자가 협업할 때 일관된 코드 스타일을 유지하기 위해 미리 정해 높은 코딩 스타일 규칙
- 특정 기업마다 권고하는 코딩 컨벤션이 존재함
- 프로그래밍 언어 자체에서 권고하는 코딩 컨벤션이 존재함
● 코딩 컨벤션 규칙
- 명명 규칙
-- 변수명을 어떤 형태로 작성할 것인지 정한 규칙
-- 카멜 표기법 (camelCase)
-- 스네이크 표기법 (snake_case)
-- 파스칼 표기법 (PascalCase)
-- 헝가리언 표기법 (Hungarian Notation) : 첫 번째 단어는 반드시 데이터 타입에 해당하는 약어를 사용
- 상수 규칙
-- 모두 대문자로 처리
- 들여 쓰기 규칙
-- 탭 사용하여 가독성 높임
- 최대 글자수 규칙
06. 프레임워크
● 프레임워크 (Framework)
- 소프트웨어 개발에 필수적이고 표준적인 부분을 재사용하도록 제공하는 반제품 성격의 개발 도구
- 프레임워크를 이용하면 앱이나 솔루션을 빠르고 편리하게 개발 가능
- 이때 반드시 프레임워크의 사용 규칙을 따라야 함
● 프레임워크 특징
- 모듈화 (modularity)
-- 프레임워크는 구현을 인터페이스 뒤에 감추는 캡슐화를 통해서 모듈화를 강화함
- 재사용성 (reusability)
-- 프레임워크가 제공하는 인터페이스는 여러 앱에서 반복적으로 사용할 수 있는 일반적인 컴포넌트를 정의하게 함으로써 재사용성을 높여줌
- 확장성 (extensibility)
-- 프레임워크는 다양성 (polymorphism) 을 통해 앱이 프레임워크의 인터페이스를 확장할 수 있게 함
- 제어의 역흐름 (inversion of control)
-- 개발 제어권을 개발자가 아니라 프레임워크가 가지는 것
-- 개발자는 프레임워크가 정한 규칙에 따라 코딩하고, 프레임워크는 개발자가 작성한 코드를 호출함
-- 제어의 역흐름 덕분에 개발자는 구현하고자 하는 비즈니스 로직에만 신경 쓸 수 있고, 적절한 코드를 호출하고 동작시키는 것은 프레임워크가 알아서 하게 함
● 장점
- 효율적인 개발이 가능해지고 생산성이 높아지며, 유지 보수가 용이해지고 프로그램의 품질이 향상됨
● 단점
- 개발 언어 외에 프레임워크를 별도로 학습해야 하며, 체득 시간이 필요함
- 기본 설계된 구조로 인해 자유로운 개발에 한계가 있음
- 초기에 잘못된 프레임워크를 선택하면 큰 손실로 이어질 수 있음
- 필요 이상의 컴퓨팅 자원이 소모될 수 있음
● 프레임워크 사용
● 전자정부 표준프레임워크 (eGovFrame)
- 대한민국 행안부에서 민, 관, 학계로 구성된 자문협의회를 통해 국가적 차원의 표준화를 수행하여 공공부문 정보화 사업을 위해 개발한 프레임워크
- 자바 언어를 사용하는 Spring 프레임워크를 기반으로 개발한 오픈 소스 프레임워크
- Apache 2.0 과 MIT 라이선스를 채택하고 있음
07. 환경 변수
● 환경 변수
- 운영체제 및 기타 소프트웨어를 실행 중인 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값 (변수) 의 모임
- 프로그래밍 언어 설치 경로에 사용
- 서버 실행을 위한 비밀키 저장에 사용
● 환경 변수에서의 전역 변수와 지역 변수
- 환경 변수에도 전역 변수와 지역 변수의 개념이 존재함
-- 시스템 변수 : 모든 사용자가 사용할 수 있음
-- 사용자 변수 : 로그인된 사용자만 사용할 수 있음
08. 라이선스
● 라이선스 (License)
- 소프트웨어를 사용할 수 있는 권한과 재배포할 수 있는 조건을 명시한 문서
- 소프트웨어는 개발자의 지적 재산을 포함한 창작물이며, 라이선스는 개발자의 지적 재산 (소프트웨어의 응용프로그램 및 소스코드) 을 보호하는 중요한 도구
● 종류
- MIT (MIT License)
-- MIT 에서 소프트웨어 공학도를 위해 만든 라이선스
-- 무상으로 사용할 수 있지만, 저작권 표시를 소프트웨어의 모든 복제물 또는 중요한 부분에 기재해야 함
-- ex. Bootstrap, jQuery, React, Vue.js
- BSD (Berkeley Software Distribution)
-- 미국 정부에서 제공하는 재원으로 운영되는 라이선스
-- 소스코드를 공개하지 않아도 됨
-- ex. 삼성의 Tizen
- GPLv2 (General Public License)
-- 자유 소프트웨어 재단 (FSF) 에서 만든 라이선스
-- 목적에 상관없이 사용 가능하지만, 외부 배포 시 무조건 소프트웨어의 전체 코드를 공개해야 함
-- ex. Git, mariaDB, 워드프레스, 파이어폭스(v.2.0)
- LGPLv2 (Lesser General Public License)
-- GPLv2 보다 조금 약화됨
-- ex. 파이어폭스(v.2.1)
- 아파치 (Apache) 2.0
-- 아파치 소프트웨어 재단에서 만든 소프트웨어 라이선스 규정
-- 소스코드 공개에 대한 의무사항은 없음
-- ex. 안드로이드, 하둡 (Hadoop)
09. IDE
● IDE (Integrated Development Environment)
- 통합 개발 환경
- 쉽고 빠른 프로그래밍을 도와주는 소프트웨어
- 개발 생산성을 높여줌
- ex. C 언어 : 비주얼 스튜디오 / 자바 : IntelliJ / 파이썬 : PyCharm
● 프로그래밍 과정
● 기능
- 코드 편집기
- 컴파일러
- 디버거 (debugger)
10. 애자일
● 애자일 (Agile)
- 애자일 소프트웨어 개발 선언
- 4 개의 핵신 가치와 이를 이행하는 데 참고되는 12 가지 원칙
- 과거 소프트웨어 개발은 순차적으로 진행되어 개발 속도가 느렸고, 프로젝트의 전반적인 사항들을 초기에 정해져서 고객의 요청사항에 대한 대체 범위가 한정적일 수밖에 없었음
- 이에 따라 고객의 요구사항에 빠르게 대처할 수 있는 애자일이 등장함
● 방법
- 애자일의 4 가지 핵심 가치에 따라 개인과 팀원 간에 상호 작용을 하고, 개발하는 소프트웨어를 중심으로 하며, 고객의 협상보다 협력을 우선시하고 계획보다는 변화에 대응하여 개발함
● 애자일 사용
- 스크럼 (Scrum)
-- 제품 책임자 (PO, Product Owner), 스크럼 마스터 (SM, Scrum Master), 개발팀 (DT, Development Team) 이 협업해서 프로젝트를 관리하는 점진적 개발 방법
-- 보통 5 ~ 9 명으로 구성되는 소규모 팀으로 스프린트라는 지속적인 개발을 반복하는 애자일 프레임워크
-- 제품 책임자 : 백로그를 작성하며, 개발하는 프로젝트에 대한 이해도가 높은 이해관계자로서 클라이언트의 요구사항을 책임짐
-- 스크럼 마스터 : 개발팀의 스크럼 방향을 제시
-- 개발팀 : 제품 책임자와 스크럼 마스터를 제외한 팀원들이 개발에 참여함
-- 과정
1. 스프린트 계획 회의
2. 스프린트
3. 일일 스크럼 회의
4. 스프린트 검토 회의
5. 스프린트 회고
- 익스트림 프로그래밍 (XP, eXtreme Programming)
-- 시시각각 변하는 비즈니스에 대응하기 적합한 애자일 프레임워크
-- 테스트와 동시에 프로젝트의 완성도를 높임
-- 이는 고객의 요청사항을 빠르게 반영하여 제품의 퀄리티를 높임
-- 과정
1. 사용자 스토리
2. 아키텍처 스파이크
3. 배포 계획
4. 반복
5. 승인 테스트
6. 소규모 배포
11. 사용성 테스트
● 사용성 테스트 (Usability Test)
- 실제 대상 고객이나 사용자에게 서비스나 제품에 대한 과제와 단계를 수행하도록 요청하고, 사용자가 사용하는 모습을 관찰 / 분석하거나 실제 의견을 듣는 과정을 통해 문제점, 개선점, 요구사항 등을 도출하는 공학적인 테스트 방법론
● 진행 과정
- 테스트 계획
- 테스트 설계
- 리쿠르팅
- 테스트 진행
- 결과 분석 및 정리
● 사용성 테스트 기법
- 정성적 테스트와 정량적 테스트의 개념
12. NPM
● NPM (Node Package Manager / Node Package Module)
- NPM 은 자바스크립트를 위한 패키지 관리자
- 오픈소스로서 다양한 모듈을 제공하며, 간단한 설치만으로도 자바스크립트를 쉽게 사용할 수 있어 개인과 기업에서 많이 사용하고 있음
- NPM 은 Node.js 기반으로 만들어짐
● Node.js
- Node.js 는 서버 프레임워크의 단점을 보완하고 확장성 있는 네트워크 프로그램을 만들기 위해 탄생함
- 자바스크립트는 스크립트 언어로 웹 브라우저 안에서만 동작함
- Node.js 는 자바스크립트 런타임으로, 웹 브라우저 밖에서도 자바스크립트를 실행할 수 있는 환경을 제공하여 자바스크립트만으로도 웹 서비스를 제작할 수 있음
- Node.js 의 등장으로 프런트엔드에서만 사용하던 자바스크립트를 백엔드에서도 사용할 수 있게 되었고, 데이터가 변하는 사이트 또한 만들 수 있게 됨
- Node.js 의 가장 큰 장점은 자바스크립트로 서버 로직을 구현할 수 있다는 것
- Node.js 기반 라이브러리인 NPM 을 사용하여 더욱 효율적으로 자바스크립트를 사용할 수 있음
- Node.js 는 싱글 스레드의 논블로킹 I / O 이벤트 기반 비동기 방식으로 작동하여 다수의 연결을 동시에 처리할 수 있는 장점이 있음
● NPM
- NPM 은 Node.js 의 패키지를 관리하고 공유하는 온라인 패키지 저장소
- 세계에서 가장 큰 소프트웨어 레지스트리 기업
- NPM 은 Node.js 에서 사용할 수 있는 모듈을 모아 놓은 곳
- 사용자들은 필요한 모듈을 다운받아 빠르고 효율적으로 프로젝트를 진행할 수 있음
- NPM 은 사용과 종속성 해결을 쉽게 할 수 있지만, 패키지가 중복으로 설치될 수 있으며 패키지의 디렉터리 구조가 공간을 크게 차지한다는 단점이 있음
13. 프로젝트 / 직무
● 프로젝트 / 직무 (PL / PM / PO)
- 프로젝트
-- 기업에서 새로운 사업을 진행하거나 서비스를 만드는 등 특정한 목표를 이루기 위해서 조직적으로 움직이는 작업 과정을 의미
- PL (Project Leader)
-- 프로젝트를 세분화했을 때 각 파트의 리더
- PM (Project Manager)
-- 전체 파트를 총괄하는 리더
- PO (Product Owner)
-- 프로젝트 혹은 제품 전체를 총괄하는 역할
● 프로젝트
● 프로젝트 직무
- PL
-- PL 은 하나의 프로젝트 진행 시 기획, 디자인, 개발 등 각 파트의 리더임
-- PM 을 도와 프로젝트를 리딩하는 위치
-- 설계, 구현 등 실무적인 부분을 책임질 뿐 아니라, 직접 클라이언트와 커뮤니케이션을 진행하고 업무 분배, 일정 관리 등을 담당
- PM
-- 각 기능적 영역의 전체를 총괄
-- 고객 및 클라이언트와의 최접점에서 프로젝트 관리 업무를 지휘함
-- 요구사항 정의, 단위 업무별 일정 관리, 이슈 관리를 담당
-- WBS (작업 명세서) 를 관리하고 외부 팀과의 커뮤니케이션을 통해 의견을 조율
-- 서비스 방향을 결정하는 디렉터이자 내부 팀원들을 보호하고 분쟁을 관리함
- PO
-- 제품을 총괄하는 사람으로 제품 전체의 라이프사이클을 관리함
-- 제품의 방향성과 전략, 로드맵, 우선순위 등을 수립하고 출시된 제품이나 서비스를 상품화할 뿐 아니라, 릴리즈 된 이후 고객 반응을 분석하고 반영해 지속적으로 제품을 평가하고 보완함
14. 개발자 직군
● 웹 개발자
- 웹 사이트를 만드는 개발자
- 퍼블리셔
-- 웹 디자이너가 디자인한 것을 웹 화면으로 구현하는 역할
-- 웹 사이트를 제작하기 위한 밑그림을 그리는 역할
- 프런트엔드
-- 그려진 밑그림 위에 데이터들을 이용하여 서버와 상호 작용하면서 웹 사이트의 화면을 만드는 작업을 함
- 백엔드
-- 사용자에게 보이지 않는 웹 사이트의 기능을 담당하는 서버를 구현하는 역할
- 데브옵스
-- 개발이 완료된 웹 사이트를 사용자에게 제공하기 위해 배포하고 관리하는 일을 함
- 도구 : HTML, CSS, 자바스크립트, 자바, 파이썬, PHP, 도커, 쿠버네티스, Jenkins, Travis CI
● 모바일 앱 개발자
- 스마트폰의 앱을 만드는 개발자
- 안드로이드 개발자
-- 안드로이드라는 운영체제에서 동작하는 앱을 만듦
- iOS 개발자
-- iOS 라는 운영체제에서 동작하는 앱을 만듦
- 크로스 플랫폼 개발자
-- 안드로이드와 iOS 양쪽에서 동작하는 앱을 만듦
- 도구 : 자바, 코틀린, Swift, 자바스크립트, 다트
● 게임 개발자
- 게임을 만드는 개발자
- 툴 프로그래머
-- 게임 내부의 캐릭터, 맵 등의 요소들을 구성하는 툴을 개발
- 엔진 프로그래머
-- 2D, 3D 엔진을 담당하여 개발
- 클라이언트 프로그래머
-- 유저들이 보는 게임 화면을 개발
- 서버 프로그래머
-- 게임의 기능을 담당하는 서버를 개발
- 도구 : C++, C#, 유니티, Unreal, DirectX
● 임베디드 개발자
- 임베디드 시스템을 만드는 개발자
-- 임베디드 시스템 : 기계를 제어하거나 특별한 기능을 동작하게 하는 컴퓨터 시스템
-- ex. 스마트 티비 내에서 리모컨으로 TV 를 조작, 원격으로 공장의 생산 과정을 관리
- 도구 : 리눅스, C, C++
● 시스템 엔지니어
- 서비스 운영 환경을 구성하는 개발자
- 서버, DB, 네트워크, 보안 등 업무 범위가 넒음
- 서버를 운영하기 위해서는 각각의 특성과 관리 방법을 알고 있어야 하며, 리눅스를 이용하여 셀 스크립트를 작성해서 작업을 자동화할 수 있어야 함
- DB 를 백업하고 장애를 해결할 수 있어야 함
- 네트워크와 보안에 대한 지식 필요
- 도구 : 서버 (리눅스, 윈도우), WAS, 클라우드, DB
● AI 개발자
- 데이터 수집 및 분석, 모델링 등을 하는 개발자
- 데이터 사이언티스트
-- 데이터를 분석해서 개선점을 찾고, 머신러닝, 딥러닝을 위한 데이터 모델을 개발
- 데이터 애널리스트
-- 데이터를 추출하여 분석하고 사업에 필요한 정보를 제공하기 위해 시각화하는 일을 함
- 데이터 엔지니어
-- 사업에 필요한 데이터를 수집하고 가공하는 일을 함
- 도구 : 파이썬, R, SQL, Tensorflow, PyTorch
15. ERP
● ERP (Enterprise Resource Planning)
- 전사적 자원 관리를 의미
- 회사에서 업무를 진행하며 ERP 시스템을 접하게 되는데, 기업의 규모에 따라 ERP 시스템의 형태가 달라짐
● 기능
- 기업 내 여러 업무의 통합적인 관리를 지원
● 장점
- 업무에 필요한 모든 정보를 DB 에 저장함
- 따라서 업무 관련 데이터를 정확하게 관리하고 전사적으로 활용할 수 있다는 장점이 있음
● 단점
- 기업에 ERP 시스템을 도입하는 데 꽤 많은 비용이 들어감
- ERP 소프트웨어와 ERP 구축 비용, 컨설팅 비용 등을 합치면 비용 부담이 적지 않음
참고문헌
● 개발자가 되기 위해 꼭 알아야 하는 IT 용어 : https://product.kyobobook.co.kr/detail/S000061352646