01-1 개발자는 대체 뭐하는 사람인가요?
개발자는 컴퓨터가 이해할 수 있는 언어로 무에서 유를 창조하는 사람이다.
개발자의 종류는 대표적으로 7가지가 있다.
1) 웹 개발자 : PC나 스마트폰에서 방문하는 웹사이트를 만드는 개발자
- 웹 개발자 중에서도 웹 퍼블리셔(= UI 개발자) / 프론트엔드 개발자 / 백엔드 개발자 / 풀스택 개발자로 나뉨
2) 모바일 개발자 : 스마트폰 어플을 만드는 개발자
- 앱 개발자라고도 불리며, 안드로이드 개발자 / iOS 개발자로 나뉨
3) 게임 개발자 : 게임의 구조 설계 및 구현을 담당하는 개발자
- 복잡한 알고리즘, 물리 엔진 구현, 3D 그래픽 렌더링, 서버 관리 등의 역량을 필요로 함
4) 응용 소프트웨어 개발자 : 컴퓨터 프로그램을 만드는 개발자
ex. 워드, 포토샵, 압축 프로그램 등
5) 임베디드 개발자 : 하드웨어를 제어하는 개발자
- 임베디드 시스템은 기계 또는 기타 제어가 필요한 시스템을 제어하는 컴퓨터 시스템을 뜻함
6) 정보 보안 전문가 : 데이터 도난, 손상 등에 대비하여 컴퓨터 시스템을 보호하는 개발자
- 프로그래밍, 네트워크, 컴퓨터 구조, 운영체제 등 컴퓨터 공학 전반 지식 필요
- 세부 분야에 따라 웹, 데이터베이스, 포렌식, 암호학, 악성 코드 등의 추가 공부 필요
7) AI 개발자 : 기계를 가르치는 개발자
- AI 개발자는 기술적으로 크게 머신러닝 개발 / 딥러닝 개발로 나뉨
- 실제 업계에서는 AI 모델을 개발하는 연구직, AI 소프트웨어를 개발하는 프로그래머, 데이터 분석가 등의 업무를 수행함
01-2 코딩과 프로그래밍, 앱과 프로그램
코딩 >> 프로그래밍 >> 개발로 벤다이어그램을 그릴 수 있다.
1) 코딩 : 프로그래밍 언어로 된 코드를 입력하는 작업 자체를 뜻함
2) 프로그래밍 : 컴퓨터가 할 일의 절차와 알고리즘을 설계하는 일을 뜻함
3) 개발 : 소프트웨어를 설계, 구현, 운영, 관리하는 데 필요한 전반적 기술적 과정들을 뜻함
- 개발 순서 : 요구 사항 분석 -> 시스템 명세 -> 구조 설계 -> 구현 -> 테스트 -> 유지 보수
01-3 프로그래밍 언어도 외국어인가요?
프로그래밍 언어
프로그래밍 언어는 사람과 사람이 소통하기 위해 언어가 필요하듯이
사람과 컴퓨터가 소통하기 위해 고안된 언어이다.
지구 상에 수많은 프로그래밍 언어가 존재하는데,
그 중 C, 자바, 파이썬, 자바스크립트 등이 대표적이다.
프로그래밍 언어는 컴퓨터에 명령을 내린다는 점에서 동일하지만,
개발 목적에 따라 가독성이 좋은 언어 / 짧은 코드로 더 많은 지시를 내리는 언어
/ 빨리 작동하는 언어 / 오류로부터 안전한 언어 등 그 형태가 조금씩 달라진다.
프로그래밍 언어는 문법과 구문을 대다수 공유하며 비슷한 요소로 구성되어 있지만
위와 같이 미묘하게 설계 목적, 철학에 따른 강점이 다르다는 것이 특징이다.
고수준 언어와 저수준 언어
컴퓨터가 CPU를 통해 명령을 처리할 때 사용되는 언어는 이진법을 기반으로 한 기계어이다.
따라서 사람의 언어와 기계의 언어 사이에 소통이 가능하도록 해주는 것이 프로그래밍 언어이다.
예를 들어 개발자가 C나 자바 등으로 프로그래밍을 하면 그 소스 코드는 번역 과정을 거쳐
기계어로 변환되고, 컴퓨터는 변환된 기계어를 읽고 명령을 수행한다.
이러한 프로그래밍 언어는 컴퓨터와 사람의 언어 중 어느 쪽에 더 가까운지에 따라
고수준 언어 / 저수준 언어로 나뉜다.
1) 고수준 언어 : 사람의 언어나 표현 방식에 가까운 언어
- 고수준 언어는 크게 컴파일 언어 / 인터프리터 언어로 나뉨
- 컴파일 언어 : 프로그래밍을 마친 뒤 코드 전체를 미리 기계어로 번역한 후 실행 파일을 생성해서 실행하는 언어
- 컴파일(= 번역) 과정 때문에 전체 개발 시간은 늘어나지만, 오류로부터 비교적 안전하고 실행 속도가 빠름
- ex. C, C++, C#, 자바, 타입스크립트, 코틀린, 스위프트, 스칼라, Go, 러스트 등
- 인터프리터 언어 : 작성된 코드를 한 줄 한 줄 통역하면서 실행되는 언어
- 신속하고 유연한 개발 과정이 필요한 소프트웨어에 인터프리터 언어가 많이 이용됨
- ex. 자바스크립트, 파이썬, 루비, PHP, 펄, R 등
2) 저수준 언어 : 0과 1만 나열되어 있는 기계어에 가까운 언어
고수준 언어와 기계어 사이에는 어셈블리어가 있다.
3) 어셈블리어 : 하나의 명령에 한 가지 작동만 할 수 있는 단순한 언어
- 주로 기계에 직접적인 세부 명령을 내리기 위한 하드웨어 개발에 유용하게 사용됨
IDE
컴퓨터는 소스 코드를 읽는 데 있어서 작은 표기 실수 하나에도 실행되지 않거나 오류가 발생할 수 있다.
이런 점에 불편을 느낀 개발자들이 잘못된 코드를 작성하지 않도록 도와주는 프로그램을 개발했다.
이런 프로그램을 통합 개발 환경, 줄여서 IDE(Integrated Development Environment)라고 한다.
ex. 자바스크립트에서 'ma'를 입력하면 'ma'로 시작하는 'map'과 같은 코드 예시를 제시해줌
IDE에서는 소스 코드 테스트, 오류 해결, 리팩토링, 온라인 협업 등의 다양한 기능을 제공한다.
IDE의 종류로는 다음과 같은 것들이 있다.
1) 이클립스 : 자바 프로그래밍에 많이 사용되는 도구 (무료)
2) 인텔리제이 : 이클립스와 비슷한 용도 + 더 강력한 기능을 가짐 (부분 유료)
3) 파이참 : 파이썬 개발에 특화된 IDE (부분 유료)
4) 안드로이드 스튜디오 : 인텔리제이의 안드로이드 개발용 버전
- 자바나 코틀린을 사용하여 안드로이드 앱 만드는 데 사용됨
5) 엑스 코드 : 애플이 개발한 IDE
- 맥에서만 사용 가능
- 스위프트를 이용하여 아이폰 앱이나 맥용 프로그램을 만드는 데 사용됨
6) 비주얼 스튜디오 : 마이크로소프트에서 제작한 IDE
- 윈도우 프로그램부터 온라인 서비스 등 다양한 소프트웨어 개발에 사용됨
- 무거운 프로그램이지만 매우 강력한 기능 제공함
7) 비주얼 스튜디오 코드 : 마이크로소프트에서 제작한 IDE
- 광범위한 종류의 개발에 이용됨
- 본 프로그램 자체는 가벼운 코드 편집 위주의 기능만 포함하기 때문에 정확히는 코드 에디터임
- 여기에 원하는 플러그인을 자유롭게 추가해서 용도에 맞는 IDE로 구성할 수 있음
01-4 디버깅 중인데, 빌드 해 보고 이상 없으면 릴리스할게요
디버깅
디버그(de+dug)는 1940년대 케이블 사이에 낀 나방으로 인해 오작동이 난 컴퓨터를 고친 것에서 유래되었다.
즉, 디버깅은 프로그램 개발 중 발생하는 오류를 분석하고 원인을 찾아 제거하는 작업을 의미한다.
1) 디버그 : 오류 수정 프로그램과 작업을 통칭함
2) 디버깅 : 오류를 찾아 제거하는 행동을 뜻함
- 개발에서 "20%는 코딩, 80%는 디버깅"이라는 말이 존재할 정도로 중요한 작업임
- 개발자들은 코드를 입력하는 일보다도 작성한 코드를 계속해서 실행하고 테스트하면서
프로그램이 제대로 작동하는지, 기존 기능에 영향을 주지 않는지 살펴보는 디버깅에 더 많은 시간을 할애함
빌드
빌드는 소스 코드를 비롯한 모든 프로그램 구성 요소를 모아 실행할 수 있는 파일(또는 묶음)을 만드는 과정이다.
개발자가 코딩한 코드를 사용자의 PC나 스마트폰에서 사용할 수 있게 하기 위해
그에 맞는 형태(ex. 윈도우 프로그램 -> exe 파일, 모바일 앱 -> apk 파일)로 바꾸어주는 작업을 뜻한다.
빌드 과정에서 개발자를 배려한 탭, 줄 바꿈 같은 요소를 없애서 실행 속도를 높이기도 한다.
빌드 번호와 버전 번호
빌드 번호 는 출시되기 전 프로그램 버전을 뜻한다.
빌드 번호의 종류로는 디버그용 빌드 / 릴리스용 빌드가 있다.
1) 디버그용 빌드 : 개발하는 동안 오류나 기능을 테스트하기 위한 빌드
- 빌드 번호 명시
- 개발자가 코드를 돌릴 때 사용하는 설정 파일을 다 같이 돌리기 때문에 무겁고 느림
2) 릴리스용 빌드 : 모든 개발이 끝난 후 배포하기 직전에 점검하는 베타 버전
- 버전 정보 + 빌드 번호 명시
- 릴리스 빌드에서 큰 문제가 될 만한 버그가 없으면 출시할 준비가 완료된 것임
- 디버그 빌드보다 가볍고 빠름
버전 번호 는 기업에서 제품을 출시할 때 매기는 숫자를 뜻한다.
윈도우 10, 윈도우 11, 한글 2022 등 제품 이름에도 쓰인 번호가 버전 번호이다.
이 번호는 제품 및 패키지를 출시하면 수정이 불가능한 정식 버전이다.
이미 출시한 버전을 변경하려면 새로운 버전을 만들어 배포해야 한다.
배포
배포는 빌드를 마친 실행 가능한 파일을 사용자가 접근할 수 있는 환경에 배치하는 것을 뜻한다.
예전에는 CD, 플로피 디스크를 통해 프로그램을 배포했지만, 요즘은 대부분 온라인으로 이루어진다.
웹사이트는 코드를 서버에 업로드해서 사용자들이 컴퓨터나 모바일 장치에서 볼 수 있도록 배포가 이루어지고,
모바일 앱은 사용자가 다운로드할 수 있는 형태로 앱 마켓에 업로드함으로써 배포된다.
PC용 응용 프로그램은 설치 파일을 다운로드할 수 있도록 웹사이트를 통해 배포된다.
유지 보수
제품이 배포된 이후 발견한 버그 대응, 사용성 개선, 새로운 기능 추가 등의 작업을 하는 것을 뜻한다.
모바일 앱은 구글이나 애플의 정책에 따라 보안 기능을 강화하기도 하고,
사용자 수가 늘어남에 따라 트래픽을 감당할 수 있도록 설계와 코드를 수정하기도 한다.
유지 보수는 소프트웨어 기획 단계에서부터 철저하게 준비해야 하는 중요한 과정이다.
리팩토링
리팩토링은 기존의 코드를 개선해서 읽기 쉽고 효율적인 좋은 코드로 만드는 작업을 뜻한다.
일정에 맞춰 제품을 완성한 뒤에는 안정적인 소프트웨어 관리를 위해 리팩토링할 시간이 반드시 필요하다.
이러한 리팩토링 과정은 유지 보수와도 연결되는 작업이다.
코드 리뷰
대부분의 소프트웨어는 소스 코드를 공유하여 여러 개발자가 각자가 맡은 부분을 프로그래밍해서 만들어진다.
코드 리뷰는 각자의 프로그래밍 이후 본 소스 코드에 적용할 때
동료 개발자들이 작성한 코드를 확인하고 의견을 주고받는 것을 의미한다.
- "이 코드는 오류의 소지가 있어요."
- "클래스 이름은 대문자 시작으로 통일하죠."
- "해당 기능은 모듈화 해서 다른 곳에 활용하면 좋겠어요."
코딩 컨벤션 은 변수 이름 짓는 법, 코드 줄 맞추는 법과 같이 팀이나 회사 내에서 정한 코딩 스타일 규약을 뜻한다.
같은 팀 내에서 서로의 코드를 이해하고 코드의 일관성을 유지하기 위해 규칙을 정하는 것이다.
문서화
코드에 대한 간단한 설명을 주석 을 통해 작성할 수 있다.
하지만 기능이 많고 복잡한 프로그램일수록 해당 코드가 어떤 작업을 수행하는지,
코드의 전반적인 요약 정보, 다른 소프트웨어와 어떤 상호작용을 하는지 등에 대한
설명이 담긴 문서가 필요한데, 이러한 문서를 만드는 과정을 문서화 라고 한다.
이 문서는 앞으로 소프트웨어를 사용할 사람들, 수정 및 개선을 이어나갈 사람들을 위한 설명서이다.
예를 들어 깃헙의 README.md와 같은 파일을 생성해 코드에 대한 전반적인 설명 및 사용법을 명시한다.
문서화는 코드 분석의 효율성 증대, 시간적 물적 비용의 감소, 기타 문제의 최소화를 위한 중요한 작업이다.
일정 단위의 개발이 완료될 때마다 해당 코드, 설계에 대해 문서화하는 것을 업무 문화로 자리 잡도록 해야 한다.
02-1 서버는 뭐고 AWS는 뭔가요?
서버와 클라이언트
1) 서버 : 정보나 서비스를 저장하고 있다가 요청 시 네트워크를 통해 사용자의 PC나 스마트폰으로 전달해주는 컴퓨터
- 서버는 역할의 개념으로서, 컴퓨터가 인터넷을 이용해 정보나 기능을
제공하는지, 받는지에 따라 서버(주는 자) / 클라이언트(받는 자)로 나뉨
- 서버든 클라이언트든 기본적으로는 우리가 사용하는 PC와 동일함
- 서버와 클라이언트 컴퓨터 모두 본체 안에 CPU, 메모리, 저장 장치가 있고 운영체제가 설치되어 있음
2) 클라이언트 : 서버와 반대되는 개념으로 데이터를 받는 컴퓨터
ex. 웹서핑을 할 때 사용하는 컴퓨터, 유튜브나 인스타할 때 사용하는 스마트폰, 자동차의 내비게이션 등
웹 서버 는 컴퓨터에게 서버 역할을 시키는 소프트웨어 혹은 웹 서버를 설치해 놓고 실행하는 컴퓨터를 지칭한다.
ex. 아파치 HTTP 서버와 같이 컴퓨터의 특정 폴더에 담긴 HTML 파일로 웹사이트를 띄울 수 있도록 하는 프로그램 등
데이터 센터
수많은 사용자가 이용할 수 있는 서버는 역할에 맞는 하드웨어 성능을 갖춰야 하고,
언제 어디서든 접속할 수 있는 안정적인 네트워크를 갖추고 해킹으로부터 안전해야 한다.
적절한 온도와 습기를 유지해야 할 뿐만 아니라 정전, 화재 등의 사고로부터 안전해야 한다.
위와 같은 조건을 갖춘 시설을 데이터 센터(IDC) 라고 한다.
수많은 서버용 컴퓨터가 통신 설비, 냉각 장치와 함께 건물을 가득 메운 곳으로 서버 호텔 이라고 불리기도 한다.
서버 호스팅은 데이터 센터를 소유하지 않은 기업이나 개인에게 서버용 컴퓨터를 임대해주는 서비스를 뜻한다.
많은 IT 업체들이 서버 호스팅을 통해 대여받은 서버에서 서비스를 운영한다.
온프레미스 는 회사에서 자체적으로 서버를 갖추고 관리하는 것을 뜻한다.
보안 이슈뿐만 아니라 회사의 필요에 따라 서버를 자유롭게 구축하고
통제할 필요가 있는 경우에는 서버 호스팅 대신 온프레미스 서버를 사용한다.
클라우드 컴퓨팅
클라우드 컴퓨팅 서비스 는 서버, 저장소, 데이터베이스, 네트워킹, 소프트웨어 등과 같은
컴퓨팅 서비스를 인터넷(클라우드)으로 제공하는 방식을 뜻한다.
ex. 아마존 - AWS, 마이크로소프트 - 애저, 구글 - GCP, 네이버 - NCP 등
컴퓨터 한 대를 통째로 임대하는 것이 아니라, 가상화 기술을 사용하여
수많은 컴퓨터를 클라우드 형태로 합친 다음 사용자들에게 필요한 만큼 작은 조각으로 임대한다.
따라서 클라우드 컴퓨팅 서비스를 이용하면 사용량을 탄력적으로 조절할 수 있고,
서버 사용에 필요한 어려운 기술적 요소들도 제공받을 수 있다.
즉, 자체적으로 서버 전문가를 두지 않아도 안정적으로 자사 또는 개인 서비스를 손쉽게 운영할 수 있다.
인프라 vs 플랫폼 vs 소프트웨어
클라우드 업체가 어디까지 해주는가에 따라 각 서비스가 다르다는 것을 이해하고 알맞게 선택해야 한다.
1) IaaS(이아스, 아이아스) : 클라우드를 이용해서 서버용 인프라, 즉 가상화된 서버 컴퓨터를 대여해 주는 서비스
- 단순 호스팅과 같음
- 이용자가 대여받은 서버에 보안, 네트워크 등 각종 설정부터 소프트웨어 설치, 서비스 실행 및 관리까지 직접 수행함
- 이용자의 자유도가 높은 만큼 손이 많이 가고 전문지식을 가진 인력을 필요로 함
ex. AWS의 EC2, 마이크로소프트, IBM 등
2) PaaS(파스) : 어플을 개발하고 서비스하기 위해 필요한 서버, 운영체제, 개발 환경 등을 자동으로 설치하고
제공함으로써 사용자가 어플 개발에만 집중할 수 있도록 플랫폼을 제공하는 서비스
- 인프라 구축, 유지 비용 등을 고려할 필요 없이 소프트웨어만 개발하면 손쉽게 어플 실행 및 배포 가능
ex. AWS의 일래스틱 빈스토크나 헤로쿠 등
3) SaaS(싸스) : 소프트웨어가 이미 완성된 형태로 제공되는 클라우드 서비스
- 인프라나 개발 환경을 구축할 필요 없이 사용료만 지불하면 이미 만들어진 소프트웨어를 사용할 수 있음
- IaaS나 PaaS와 달리 초기 구축 비용을 줄일 수 있는 장점이 있음
- but 제공 업체가 만들어 놓은 서비스를 그대로 사용해야 하기 때문에 불필요한 기능이 포함되어 있기도 함
ex. 구글 드라이브, 네이버 N클라우드, 드롭박스, MS 오피스 365 등
'ACTIVITY > 혼공얄코 스터디' 카테고리의 다른 글
[혼공얄코] 03-3 ~ 03-6 타임머신을 타고 평행우주를 누비는 개발자 (0) | 2023.04.06 |
---|---|
[혼공얄코] 02-7 ~ 03-2 바이트는 뭐고 자료형은 왜 쓰나요? (0) | 2023.03.30 |
[혼공얄코] 02-2 ~ 02-6 IP는 뭐고 HTTPS는 뭐죠? (0) | 2023.03.21 |