혼자 공부하는 얄팍한 코딩 지식

김동현·2022년 9월 18일
0

독서

목록 보기
1/6
post-thumbnail

책을 읽기 전,

앞으로는 제가 컴퓨터 관련 책을 읽고 간략하게 내용을 정리해 보려고 합니다.

비전공자인 저는 컴퓨터 관련 지식에 익숙해지는 것이 우선이라 생각하여 관련 책을 읽는 중입니다.
기록을 남기며 새롭게 알게 된 내용, 배운 내용을 복습할 생각입니다.

또한, 벨로그에 글을 올리시는 분들은 컴퓨터, 개발 관련 지식이 충분하시겠지만..!
저와 같은 비전공자도 있을 거라는 생각에 부끄럽지만 일단 올려보겠습니다!


  

📌 Chapter 01. 개발자 이해하기: 개발과 개발자 용어 알기


01-1. 개발자는 대체 뭐하는 사람인가요?

웹 개발자는 웹사이트를 만들고 관리하며, 역할에 따라 웹 퍼즐리셔/UI개발자, 프론트엔드 개발자, 백앤드 개발자 등이 있습니다.

모바일 개발자는 스마트폰이나 태블릿, 스마트 워치 등 모바일 기기에서 동작하는 애플리케이션을 개발합니다.

게임 개발자는 게임의 전체적인 구조를 설계하고 개발합니다.

응용 소프트웨어 개발자는 PC용 프로그램을 개발하는 사람들을 지칭합니다.

임베디드 개발자는 하드웨어를 제어하는 소프트웨어를 개발합니다.

정보 보안 전문가는 각종 보안 위협으로부터 시스템과 서비스를 방어합니다.

AI 개발자는 인간의 사고와 학습같은 지적 능력을 컴퓨터를 통해 구현하는 기술입니다.

 

01-2. 코딩과 프로그래밍, 앱과 프로그램.

코딩은 프로그래밍 언어로 된 코드를 입력하는 작업 자체를 말합니다. 프로그래밍은 컴퓨터가 할 일의 절차와 알고리즘을 설계하는 것이고, 개발은 소프트웨어를 설계, 구현, 운영, 관리하는데 필요한 전반적인 기술적 과정들을 통칭합니다.

컴퓨터의 하드웨어가 본체와 CPU, 메모리 등 눈에 보이고 만져디는 부분이라면 소프트웨어는 보이지 않는 부분을 통칭합니다.

프로그램은 사용자의 명령에 따라 목적에 맞는 작업을 수행하는 일련의 명령 모음입니다. 시스템 프로그램은 운영체제의 일부로써 컴퓨터 이용 환경을 조성하는 프로그램이며, 응용 프로그램은 사용자의 목적에 따라 직접 사용하는 프로그램입니다.

데이터는 프로그램을 실행하는 데 필요한 기초 자료를 말합니다.

라이브러리는 하나 이상의 프로그램에 활용될 수 있는 대이터와 명령어들의 집합입니다.

 

01-3. 프로그래밍 언어도 외국어인가요?

기계어는 컴퓨터가 사용하는 0과 1로 이루어진 언어이며, 기계어를 사람이 이해할 수 있도록 기호로 표현한 언어를 어셈블리어라고 합니다. 기계어 바로 윗단계에 해당하는 저수준 언어입니다.

저수준 언어는 기계어에, 고수준 언어는 사람의 언어에 가까운 언어입니다.

프로그래밍 언어란 컴퓨터와 소통하기 위해 만들어진 언어입니다.

컴파일 언어는 코드 전체를 기계어로 바꿔 실행 파일을 만들어 실행하고, 인터프리터 언어는 코드를 한 줄 한 줄 읽으면서 해석하고 바로 실행하는 언어입니다.

IDE는 개발에 관련된 다양한 기능들을 재공하는 개발용 프로그램입니다.

 

01-4. 디버깅 중인데, 빌드 해 보고 이상 없으면 릴리스할게요.

디버깅이란 프로그램에서 문제를 찾아 제거하는 것입니다.

빌드란 프로그래밍한 소스 코드를 묶어 실행 가능한 파일을 만드는 것입니다.

배포란 소프트웨어를 사용자들에게 전달하는 것입니다.

유지 보수란 소프트웨어 제품 출시 이후 계속되는 문제 해결 및 각종 업데이트 작업입니다.

리팩토링이란 기능을 수정하지 않으면서 코드의 품질을 높이는 것입니다.

코드 리뷰란 서로의 코드를 확인하고 피그백을 주고받는 과정입니다.

문서화란 소프트웨어와 그 소스 코드를 쉽게 파악할 수 있도록 문서를 작성해 두는 것입니다.

  
 

📌 Chapter 02. 개발자와 소통하기: IT 업계 용어 알기


02-1. 서버는 뭐고 AWS는 뭔가요?

서버란 정보나 서비스를 제공하는 컴퓨터입니다.

클라이언트란 서버가 제공하는 것을 받아 사용하는 컴퓨터입니다

데이터 센서는 수많은 서버를 한 곳에서 안정적으로 관리하는 시설입니다.

서버호스팅은 서버용 컴퓨터를 대여해주는 서비스입니다.

온프레미스는 민감한 정보를 다루는 회사들의 경우 호스팅을 외부에 데이터 센터에 두지 않고 사내 전산실에서 서버를 갖추고 관리하는 것을 말합니다.

클라우드 컴퓨팅 서비스는 서버를 가상화하여 각종 편의 기능과 함께 필여한 만큼 사용할 수 있는 서비스입니다.

  

02-2. 웹사이트는 어떻게 만들어지나요?

HTML은 웹 패이지에 요소들을 ‘가져다 놓는’ 마크업 언어입니다.

CSS는 HTML로 올려놓은 요소들을 ‘꾸미는’ 스타일 언어입니다.

자바스크립트는 웹 페이지에 기능들을 부여해 ‘일을 시키는’ 프로그래밍 언어입니다.

웹 표준은 브라우저가 HTML, CSS, 자바스크립트를 읽는 표준화된 방식입니다.

반응형 웹(사이트)은 화면 크기에 따라 홈페이지의 크기가 변화하는 웹사이트 입니다.

적응형 웹(사이트)은 정해진 화면 크기나 기기에 맞게 홈페이지를 따로 제작하는 웹사이트 입니다.

  

02-3. 쿠키, 토큰, 캐시는 일상에서 쓰는 그 단어인가요?

쿠키는 사용자의 브라우저에 저장되는 정보입니다.

세션은 서버가 사용자를 기억하고 있는 상태입니다.

토큰은 서버가 기억해 둘 필요 없이 사용자가 스스로를 증명할 수 있는 수단입니다.

캐시는 데이터를 다시 가져오지 않도록 가까이 저장해 두는 기술입니다.

CDN은 각지에 캐시 서버를 두어 부하를 분산시키는 기술입니다.

  

02-4. 스마트폰 앱인데 웹사이트라고요?

네이티브 앱은 기기에 작동하는 운영체제에 특화된 방식으로 제작된 앱입니다.

크로스 플랫폼은 하나의 소스 코드로 여러개의 운영체제에서 작동할 수 있는 프로그램을 만드는 방식입니다.

웹 앱은 모바일 기기의 브라우저에서 접속할 수 있는 모바일 웹사이트로, 모바일 앱과 비슷한 UI/UX를 제공합니다.

하리브리드 앱은 네이티브 앱 안에 웹 뷰로 웹사이트를 실행해서 네이티브 앱과 웹앱의 장점을 취할 수 있는 앱입니다.

PWA는 아이콘 추가 등 진보된 브라우저 기능을 활용해서 네이티브 앱 같은 다양한 편의 기능을 제공하는 웹 앱입니다.

  

02-5. 웹의 보이는 곳과 보이지 않는 곳

프론트엔드프론트엔드는 웹사이트의 구성 요소 중 클라이언트 컴퓨터의 즈리우저에서 작동하는 부분입니다.

백엔드는 웹사이트나 모바일 앱과 같은 온라인 어플리케이션의 구성 요서 중 서버에서 작동하는 프로그램입니다.

프레임워크는 프로그램의 기본 골격이 갖춰져 있어 개발자가 원하는 제품을 수월하세 만들 수 있도록 출시된 개발 키트입니다.

API는 여러 소프트웨어의 특정 기능들을 요청하고 호출하기 위한 약속입니다.

XMLJSON은 데이터를 저장하고 전달할 목적으로 구성된 표기 형식입니다.

YAML은 사람이 이해하기 쉬운 형태로 구성된 표기 형식입니다.

  

02-6. IP는 뭐고 HTTPS는 뭐죠?

IP는 데이터 통신 규약이며, IP 주소 는 PC나 스마트폰 같은 기기의 네트워크 주소입니다.

도메인은 사람이 기억하기 쉽도록 문자로 만들어 특정 IP에 연결한 인터넷 주소입니다.

DNS는 IP 주소와 이에 해당하는 도메인 IP 정보를 갱신하며, 특정 도메인에 대한 요청이 들어오면 IP주소를 찾아 알려주는 시스템입니다.

WWW는 전 세계 사람들이 정보를 공유하고 소통할 수 있는 인터넷 공간을 뜻합니다.

HTTP는 클라이언트의 요청과 서버의 응답으로 이뤄지는 통신규약입니다.

HTTPS는 HTTP에 보안 기능을 추가해서 보다 안전하게 만든 통신 규약 입니다.

  

02-7. 디지털 시대, 데이터와 데이터베이스의 이해

데이터는 의미 없이 수집된 자료를 뜻하며, 정보는 데이터가 보여서 어떤 의도나 목적에 따라 분석되어 의미가 생긴 자료입니다.

데이터베이스는 전산상에 저장된 구조화된 데이터 집합입니다.

DBMS는 데이터베이스를 구축하고 관리하는 프로그램입니다.

RDBMS는 관계형 데이터베이스라고 하며, 컴렬(열) 간에 관계를 가질 수 있는 표형태로 데이터를 저장하는 모델의 DBMS입니다.

SQL은 관계형 데이터베이스에 작업을 지시하기 위해 사용되는 언어입니다.

NoSQL은 관계형을 제외한 모델을 사용하는 DBMS를 가리키는 용어입니다.

  

02-8. 개발자들은 왜 리눅스를 좋아하나요?

운영체제는 사람이 컴퓨터를 쉽게 사용할 수 있도록 해 주는 시스템 소프트웨어입니다.

GUI는 그래픽 요소를 사용해서 직관적이고 편리하게 구성한 인터페이스입니다.

CLI는 명령어 줄을 입력해서 사용할 수 있는 인터페이스입니다.

커널은 운영체제의 핵심 기능을 담당하는 핵심 요소입니다.

오픈소스는 누구나 소스 코드를 볼 수 있고 개발에 참여할 수 있는 소프트웨어입니다.

  
 

📌 Chapter 03. 개발자의 길로 들어서기: 프로그래밍 용어 알기


03-1. 컴퓨터는 어떻게 일하나요?

CPU는 컴퓨터를 통제하고 주어진 작업을 수행하는 장치입니다.

메모리는 컴퓨터의 작업에 사용되는 데이터를 일시적 또는 영구적으로 저장하는 장치입니다.

입출력장치(I/O)는 컴퓨터에 신호와 정보를 보내는 입력장치와 컴퓨터의 연산을 결과로 내보내는 출력 장치를 말합니다.

프로세스는 프로그램이 메모리에 올려져 CPU에 의해 실행되는 상태입니다.

스레드는 하나의 프로세스 안에서 돌아가는 한 개 이상의 작업 단위입니다.

  

03-2. 바이트는 뭐고 자료형은 왜 쓰나요?

비트는 0과 1 두 값을 가지는 것으로 컴퓨터가 다루는 데이터의
최소 단위입니다.

바이트는 8개의 비트가 모인 것입니다.

자료형은 프로그래밍 언어에서 여러 종류의 데이터를 저장하는 방식입니다.

문자 인코딩은 사람이 사용하는 문자를 컴퓨터가 인지 가능한 숫자로 바꾸는 것입니다.

유니코드는 전 세계에서 사용되는 대부분의 문자를 포함한 문자열 셋입니다.

  

03-3. 프로그래밍 언어 분류

컴파일 언어는 실행되기 전 다른 헝식으로 번역되는 언어입니다.

인터프리터 언어는 작성된 코드 그대로 통역되어 실행되는 언어입니다.

절차지향 프로그래밍은 소스 코드를 위에서부터 차례대로 읽고 실행하는 방식입니다.

객체지향 프로그래밍은 프로그램을 객체 단위로 나누어 프로그래밍하는 방식입니다.

함수형 프로그래밍은 함수형 기능들을 활용해서 변수의 사용을 최소화하는 프로그래밍 방식입니다.

매니지드 언어는 언어 자체에서 메모리를 관리해 주는 언어입니다.

언매니지드 언어는 개발자가 직접 메모리를 관리해야 하는 언어입니다.

  

03-4. 오류라는 위험에 대비하기

컴파일 오류는 소스 코드를 컴파일하는 과정에서 일어나는 오류입니다.

런타임 오류는 프로그램 실행 도중 발생하는 오류입니다.

논리 오류는 컴파일과 실행 모두 성공하지만 실행 결과가 올바르지 않안 오류입니다.

예외 처리는 오류 발생 시에도 프로세스를 지속시킬 수 있는 수단입니다.

메모리 누수는 사용하지 않는 데이터가 비워지지 않고 메인 메모리 공간에 쌓여있는 현상입니다.

가비지 컬렉션은 메인 메모리상 불필요한 데이터를 자동으로 치우는 기능입니다.

  

03-5. 개발에 필요한 여러 가지 도구

패키지 매니저는 라이브러리의 설치, 업데이트, 삭제 등을 관리하는 소프트웨어 도구입니다.

환경 변수는 프로그램이 작동할 환경에 지정된 변경 가능한 값입니다.

프레임워크는 기반으로 삼아서 프레임워크 자체를 사용하는 것이라면, 라이브러리는 라이브러리 자체를 가져다 사용하고 호출하는 용도로 사용합니다.

런타임 환경은 프로그램이 작동할 수 있도록 해 주는 소프트웨어입니다.

SDK는 특정 언어나 환경의 소프트웨어를 개발할 수 있도록 제공되는 키트입니다.

  

03-6. 타임머신을 타고 평행우주를 누비는 개발자

VCS는 프로젝트의 변경 내역을 관리하는 시스템으로, 소프트웨어를 개발할 때 일정 시점과 단위로 프로젝트를 관리하는 역할을 합니다. 또한 소스 코드 백업과 복구를 쉽게 도와주고 다른 업무자들과 협업을 용이하게 도와줍니다.

은 가장 널리 사용되는 VCS입니다. 깃은 프로젝트 작업 상태를 저장하는 커밋, 각 작업을 본 프로젝트에 업로드하는 푸시, 다른 작업자들이 수정한 코드를 가져오는 풀과 같은 기능으로 프로젝트를 관리하고 협업합니다.

깃 호스팅 서비스는 깃으로 관리하는 프로젝트을 저장하는 공용 저장소를 제공하는 서비스입니다.


  
 

책을 다 읽고,

책을 읽으며 컴퓨터 구조, 프로그래밍 기초 등을 배울 수 있었다.
사실 C언어를 배우기 시작한 지 얼마 되지 않아, 내가 이 책을 이해할 수 있을까 싶었다.
이 책은 오히려 나와 같이 컴퓨터 관련 입문자들에게 좋은 책인 것 같다.
절차 지향과 객체지향의 차이점이 무엇인지 제대로 알 수 있었다. 또한 C언어 공부를 하며 직접 배운 컴파일링 등 적용하며 배운 내용들을 책에서 봄으로 다시 한번 개념을 정리할 수 있었다.

많이 부족하다는 것을 느꼈고, 더 많이 공부해야겠다고 다짐했다.

profile
디자인과 개발을 모두 할줄 아는 능력있는 개발자가 되고싶습니다.

1개의 댓글

comment-user-thumbnail
2022년 9월 18일

너무 정리가 잘 되어있네요

답글 달기