📚 Study

책 요약 <비전공자를 위한 이해할 수 있는 IT지식>

date
May 9, 2022
slug
comprehensible-IT-knowledge-for-non-majors
author
status
Public
category
📚 Study
tags
Book
summary
삐약삐약
type
Post
thumbnail
 
 

Chap1. Orientation

테이블(데이터베이스): 관계형 데이터베이스와 플랫 파일 데이터베이스에서, 테이블이란 세로줄과 가로줄의 모델을 이용하여 정렬된 데이터 집합(값)의 모임, 테이블 내의 데이터는 물리적으로 데이터베이스에 저장되지는 않는다. 뷰 또한 관계형 테이블이지만 이들의 데이터는 쿼리 시간에 계산된다.
관계형 데이터베이스(Relational Database): key와 value 사이의 간단한 관계를 테이블화 시킨 매우 간단한 원칙의 전산정보 데이터 베이스
관계형 테이블: 관계형 데이터베이스의 사용자 데이터를 보유하는 기본 구조
오브젝트 테이블: 세로줄을 정의하는 객체 형을 이용하는 테이블, 정의된 형의 오브젝트의 인스턴스를 보유할 목적으로 정의된다
처음에 러프를 짤 때는 핵심 기능에 중점을 두어서 만들 것
IT업계는 변화가 빠르기 때문에 처음부터 완성형으로 만들려는 욕심을 가지면 위험하다
고객의 니즈와 개발 사정에 맞춰 그때그때 발전해나가기
 

Chap2. Programming Languages & OS

PL: JAVA, Python, Ruby, Swift, ...
IDE(Integrated Development Environment): 통합 개발 환경, 개발을 하기 위한 모든 것들을 제공해주는 환경
  • 종류: Android Studio(안드로이드 애플리케이션 개발 용도), Xcode(애플 운영 체제 위의 어플리케이션 개발 용도), Eclipse(C/C++ 개발, 자바 개발, 웹 개발 용도), PyCham(파이썬 개발 용도)
  • 이렇듯 IDE는 대부분 어떤 분야에 특화되어 있음, 특정 IDE는 여러 언어와 여러 분야를 지원하기도 함
저수준, 고수준
  • 저수준(low level): 컴퓨터 친화적, 컴퓨터가 어떻게 일해야 하는지 구체적으로 꼼꼼하게 적혀있지 않으면 오류가 발생함, 그러나 컴퓨터 입장에서는 구체적으로 적혀있으닉 일하기 쉬움, 따라서 낮은 사양의 컴퓨터에서도 원활히 작동함
  • 고수준(high level): 인간 친화적, 쓰기도 편리하고 유지 보수도 저수준에 비해 쉬움, 그만큼 컴퓨터가 더 많이 고민해야 하기 때문에 작동이 느리고 컴퓨터의 사양에 따라 잘 작동하지 않을 수도 있음
  • 보통 3~4년에 한 번씩 컴퓨터를 교체하므로 우리가 쓰는 컴퓨터들은 사양이 아주 좋고, 거의 대부분의 소프트웨어들은 고수준 언어로 만듦
  • 저수준 언어는 어디서 사용? 컴퓨터 사양을 낮추고 싶을 때. 그래서 가격을 낮추고 싶을 때. 가령, 다른 메인 기능이 있는 가전제품에 컴퓨터가 들어갈 때 저수준 언어를 사용함, IPTV의 경우 고객이 컴퓨터의 기능을 원하는 것이 아니기 때문에 저사양 저수준 언어를 사용하여 가격을 낮춤
컴퓨터 구성요소
  • CPU: 컴퓨터의 머리, 따로 데이터를 저장하지 않고, 데이터를 연산하거나 처리함
  • RAM: 메모리, CPU의 개인 작업 공간
  • HDD, SSD: 보조기억장치
이 부품들을 메인보드에 끼워 전원을 키면 컴퓨터가 된다
ex) 포토샵 기능을 킬 때 로딩이 오래 걸리는 이유: 실행을 하면 HDD, SSD에 있는 포토샵 기능들을 불러오기해서 RAM에 올려놔야 하기 때문에
운영체제(Operating System)
  • Windows, Mac OS, IOS, Android, ...
  • 인간 대신 하드웨어를 관리해주는 역할,
  • 마소: C#, Visual Basic, C++, JavaScript
  • 애플: Objective-C, Swift
  • 구글: JAVA, Kotlin
스위프트: 애플이 만든 새로운 언어, 처음에는 언어 자체에 낯선 개념들과 불안정한 요소가 많이서 개발자들이 불만이 많았지만 지금은 많이 괜찮아짐
JVM(Java Virtual Machine): 자바 개발자들이 만든 소프트웨어, 각 운영체제 위에서 동작하는 소프트웨어, 이 위에서 자바 언어로 만든 프로그램이 돌아갈 수 있도록 한 것, 즉 A라는 자바로 만든 프로그램이 나의 운영체제를 지원하지 않더라도 JVM을 설치한다면 A를 실행할 수 있게 됨
따라서 자바는 상대적으로 운영체제에 독립적인 언엉고 안드로이드에서도 사용할 수 있을 정도로 사용 범위가 넓음
 

Chap3. Network, Client, Server

LAN: Local Area Network, 컴퓨터가 연결된 작은 지역
LAN을 연결하는 선을 LAN이라고 함
MAN: Metropolitan Area Network
WAN: Wide Area Network
Client - Server
  • Client = Front end = 클라, 프론트, 프론트엔드, 클라이언드
  • Server = Back end = 서버, 백엔드, 백
우분투 Ubuntu
  • 리눅스: 운영체제
  • 리눅스 위에서 서버 프로그램을 돌림, 서버프로그램? 클라이언트의 요청을 처리하는 컴퓨터
  • Mac OS, IOS, Windows, Android 등을 사용하지 않고 리눅스를 쓰는 이유? -> 리눅스는 무료라서
  • 리눅스의 여러 버전 중 하나가 우분투 Ubuntu
  • 또 다른 버전 중 하나는 레드햇 Red Hat, 혹은 안드로이드 Android(구글이 리눅스를 Mobile OS 로 개량하여 발전시킨 게 안드로이드)
서버 구축
  • 개인이 서버를 운영하면 안정적이지 않기 때문에 서버를 제공하는 업체인 hosting
  • 국내 Cafe 24, 가비아 등... 해외 AWS(Amazon Web Services)
 

Chap4. API, JSON

API: 클라이언트, 서버와 같은 서로 다른 프로그램에서 요청과 응답을 주고 받을 수 있게 만든 '체계'
RESTful API: Representational State Transfer API 좀 저 체계적인 API
CRUD: data를 다룰 때 큰 틀에서 대부분의 요청이 이 4개에서 이루어짐
  • Create: POST
  • Read: GET
  • Update: PUT, PATCH
  • Delete: DELETE
RESTful API에서는 CRUD를 하나의 주소로 관리하고 이 중 무엇인지를 표지하는 메소드(POST, GET, PUT/PATCH, DELETE)를 함께 보냄
HTTP 처리 신호
  • 잘됐어: 200번대
  • 잘 안됐어: 400(클라이언트의 요청에 문제가 있음), 500번대(서버에 문제가 있는 경우)
Software- Sofrware 사이의 API
  • SDK(Software Development Kit): API를 제공하는 '다른 소프트웨어'
JSON
  • 데이터를 주고 받을 때 사용하는 형식
{ //JSON 시작
"Key1": "Value"
"Key2": [value1, value2, ...]
} //JSON 끝
네이버나 카카오 등의 API 문서 찾아보며 구조 이해할 것
 

Chap5. Application

버전 a.b.c
  • c: 미미한 변화 / b: 하위 버전과 호환은 가능하지만 큰 변화 / a: 하위 버전과 호환이 가능하지 않은 큰 변화
구글스토어/앱스토어
  • 구글스토어는 심사 없이 바로 올릴 수 있고
  • 앱스토어는 심사 후에 피드백 주고 리젝시킬 수도 있음
 

Chap6. Web

1) Web의 구성: HTML(형식), CSS(디자인), JavaScript(기능)
HTML(Hyper Text Markup Language)
  • OS나 프로그램에 상관없이 일정한 형식이 언제나 동일하게 보이도록 하는 문서가 필요했음
  • <h>: header 대제목
  • <p>: paragraph 문단
  • <ol>: ordered list 순서가 있는 목록
  • <ul>: unordered list 순서가 없는 목록
  • 이처럼 정보를 표현하기 위한 코드를 '태그'라고 부름
  • HTML은 프로그래밍 언어가 아님! 단지 브라우저가 볼 수 있는 문서를 적는 언어
CSS(Cascading Style Cheets): HTML에 디자인을 입힐 수 있는 코드
  • HTML 코드는 정보만 표현, CSS 코드는 디자인만 표현할 수 있게 되어 깔끔
  • HTML + CSS 작업 = 퍼블리싱
JavaScript(JS, js): 마크업 개발에서 각종 기능 동작을 수행하기 위해 사용하는 프로그래밍 언어
  • 자바(Java)와는 이름만 비슷할 뿐 아무 관계가 없음(!!!)
Web은 항상 서버에서 HTML, CSS, JS의 사본을 다운로드 받아 옴
<-> 어플리케이션은 유저가 원본 파일을 "직접" 다운로드 받아야 업데이트 된 내용을 이용할 수 있지만
웹은 서버에서 원본을 수정하기만 해도 업데이트가 가능하다
왜냐면 웹은 항상 always 서버에서 원본을 다운로드 받아 오며 동작하기 때문에
  • 장점: 수정이 용이함, 원본만 수정하면 유저가 업데이트 하지 않아도 반영됨
  • 단점: 매번 HTML, CSS, JS를 다운받아야 함, network가 빠른 환경이면 상관 없지만 트래픽이 심하면 인터넷이 마비되기 쉬움
  • 즉 웹Web은 network의 영향을 크게 받는 반면 애플리케이션은 웹보다 효율적으로 네트워크의 영향을 조금만 받음
Browser
  • 5대 브라우저: 크롬, 익스플로러, 사파리, 파이어폭스, 오페라
  • 브라우저는 애플리케이션이기 때문에 웹과 호환이 안될 가능성이 존재함(!!!)
  • 각 브라우저는 각기 다른 애플리케이션이므로 구현 방식이 서로 다르고 HTML, CSS, JS의 특정 기능이 버전별로, 브라우저별로 작동할 수도/안 할 수도 있음
  • 따라서 웹프론트앤드(퍼블리싱) 개발자들은 각 소비자의 브라우저 버전과 종류에 맞춰 정상적으로 동작하도록 코드를 작성해야 함
  • '브라우저 버전의 파편화', 이 문제를 해결하는 것을 '파편화를 잡는다' 라고 함
  • CanIuse(caniuse.com): 특정 기능을 각 브라우저에서 사용할 수 있는지 확인할 수 있는 사이트
반응형 웹
  • 모바일과 PC버전 웹을 따로 만드는 것은 불편함(디자인을 바꾸기 위해 서로 다른 CSS 파일을 수정해야 하기 때문, 작업이 중복되므로 비효율적이고 버그 발생 가능성)
  • 반응형 웹: 브라우저의 가로 넓이에 '반응'하여 구성 요소가 변하는 기술
  • 공통으로 사용할 CSS 코드는 그대로 두고, 레이아웃 위주로 나눠 작업하여 각 기기의 디자인을 구현. 즉, 웹페이지의 크기(비율)가 사용자의 기기에 맞춰 자동으로 변형됨
  • 이를 구현하기 위해선 서로 다른 기기의 넓이에 따른 CSS를 추가로 코딩해야 함
  • 따라서 반응형 웹 구현은 작업 시간이 오래 걸리고 비용이 많이 듦(그렇다고 하더라도 따로따로 하나씩 만드는 것보다 훨씬 효율적)
 

Chap7. Database, Image processing

"데이터는 단 1%의 결점도 없어야 한다" - 무결성
RDB(관계형 데이터베이스, Relational DataBase)
  • 관계형 데이터베이스를 저장하고 관리하는 소프트웨어: RDBMS - MS SQL, Oracle DB, MySQL, MariaDB, ...
클라이언트 데이터베이스
  • 서버에 연결되지 않고도 동작하는 데이터들
  • 로컬, 내부DB, 네이티브, 클라/클라이언트, 프론트/프론트앤드 <---> 서버, API요청, (그냥)DB, 백/백앤드
 

Chap8. Framework, Library

목적에 따라 손쉽게 개발할 수 있도록 짜여진 개발 환경 구조
  • Apple 프레임워크: Cocoa(Ulkit, AppKit, ...) / 언어: objective-c, swift
  • Google 프레임워크: Android Framework / 언어: java, kotlin
  • Web: Angular.js, Vue.js, React.js / 언어: JS
    • 웹 프론트앤드 프레임워크 및 라이브러리 3대장
      • Angular.js: 구글
      • React.js: 페이스북
      • Vue.js: Evan You(Chinese)
각 언어별 프레임워크
  • Java: 자바스프링-> 자바를 써서 서버를 쉽고 빠르게 개발할 수 있도록 함
  • Python: 장고(Django)
  • Ruby: 레일스(Rails)
  • JavaScript: 익스프레스(Express.js)
라이브러리 <-> 프레임워크
- 프레임워크>라이브러리, 각종 라이브러리와 코드들이 모여 프레임워크가 됨
  • 한 프로젝트에서 하나의 프레임워크만 사용 가능, 그러나 여러 라이브러리 사용 가능
 

Chap9. Cooperation, Source management, Design

Git
  • Branch: 중간 지점에서 여러 가능을 각기 따로 개발할 때 충돌없이 개발할 수 있도록 브랜치를 따로 관리. 즉, 각각 서로 다른 곳에서 개발하는 것, 이후에 각각의 브랜치에서 작업한 코드들을 합치기만 하면 됨
  • Merge: 작업된 부분이 겹치지 않으면 자연스럽게 합쳐줌, 만약 겹치는 부분이 있다면 충돌(Conflict) 알림, Merge 후 제대로 동작하는지 테스트 필수
Design Guide
  • Apple: HIG(Human Interface Guideline) - 애플 기기의 디자인 방침 가이드 문서
  • Google: Material Design
 

기타 용어 정리

  • 해커톤: 소프트웨어 개발 분야의 프로그래머나 디자이너 등이 모여 단기간에 집중적으로 작업을 하는 소프트웨어 관련 프로젝트 이벤트