[독서]비전공자를 위한 이해할 수 있는 IT 지식

차보경·2022년 9월 3일
0

독서

목록 보기
1/1
post-thumbnail

그렇다 제목부터 '나 읽어야될 것 같지 않니???' 라고 말하길래 도서관에 입고되자마자 재빨리 빌려 읽었다!

읽은 한줄평으로는 "정말 커뮤니케이션 할 수 있는 딱 그정도..?"
책이 250page? 정도 밖에 안되기 때문에 깊이 있는 것을 다룰거라 생각하지 않았기 때문에 정말 IT쪽이 어떤 흐름으로 돌아가는지 알긴좋겠다 싶어서 읽은 책이라.. 딱 고종도 였다~!

저자도 'IT세상에 대한 큰 그림을 그릴 수 있고, IT와 사람 사이에 연결점이 될 수 있었으면 좋겠다'라고 했는데, 원하는 바는 딱 이루신 것 같다.

그럼 잊기 전에 정리를 해보도록 하쟈.


1장. 오리엔테이션

  • 관계형 데이터베이스 :

    : 키(key)와 값(value)들의 간단한 관계를 테이블화 시킨 매우 간단한 원칙의 전산정보 데이터베이스이다. 1970년 에드거 F. 커드가 제안한 데이터 관계형 모델에 기초하는 디지털 데이터베이스이다.

    : 이 모델은 데이터를 컬럼(column)과 로우(row)를 이루는 하나 이상의 테이블(또는 관계)로 정리하며, 고유 키(Primary key)가 각 로우를 식별한다. 로우는 레코드나 튜플로 부른다.

    • 키 (Key)
      테이블의 각 로우에는 저만의 고유 키(key)가 있다. 한 테이블 안의 로우는 다른 테이블들의 로우로 연결이 가능한데, 이는 연결된 로우의 고유 키를 위한 컬럼을 추가함으로써 이루어진다. (이러한 컬럼들은 외래 키로 부른다)

    • 관계 (Relationships)
      관계는 테이블 간에 둘 다 존재한다. 이 관계들은 일대일, 일대다, 다대다, 이렇게 세 가지 형태로 이루어진다. 대부분의 관계형 데이터베이스들은 각 로우의 각 컬럼이 하나의 값만을 보유할 수 있도록 설계되어 있다. (값은 원자적이다)

    • 출처 : 위키백과

  • IT 산업에서 서비스가 만들어지는 과정

    완벽한 프로세스가 없고, 고객의 니즈와 상황에 맞춰 서비스가 발전되어감.
    -> 그래서 저자가 말하는 것은 '기획자는 고객을 포함한 모든 구성원들과 커뮤니케이션을 하는 것이 중요하다'

2장. 프로그래밍 언어 & 운영체제(OS)

  • 컴퓨터는 기계어인 0,1을 사용하여 구동
    그래서 인간과 컴퓨터 사이에 컴파일러라는 프로그램을 만들어서 소통을 하게 된다.

    • 따라서 사람과 컴퓨터의 대화 방식은
      " 고객 - 개발자(프로그래밍 언어) - 컴파일러 - 컴퓨터 " 식으로 진행됨
  • 개발자는 IDE(Integrated Development Environment)라는 개발하기 위한 모든 것을 제공해주는 환경(통합 개발 환경)을 통해 프로그래밍 파일을 만듦

    • 대부분 어떤 분야에 특화된 IDE가 존재하여 그것에 맞춰 사용함
  • 다양한 컴퓨터 언어를 구분하는 하나의 기준 "저수준 or 고수준"

    • 저수준 : 컴퓨터 친화적 언어
      -> 컴퓨터가 어떻게 구동해야하는지 자세히 작성해야함 (ex. C언어)
    • 고수준 : 인간 친화적 언어
      -> 간단히 말해도 컴퓨터가 알아서 행동함
      -> 그만큼 컴퓨터가 처리해야하기 때문에 느려진다는 단점이 있음 (ex. Python_ 파이썬은 C언어로 한번 컴파일되고 컴퓨터로 입력된다)
    • 저수준을 사용하는 이유는 컴퓨터 사양을 낮추고 싶어서임. 그래서 IPTV, 복합기, 스케너 등 가전제품에 컴퓨터가 들어가면 저수준 언어를 사용함. -> C언어 개발자를 뽑는 이유지....
  • 컴퓨터 구성 요소

    • CPU : 머리 -> 데이터 연산 및 처리
    • RAM(메모리) : CPU 개인 작업 공간
      -> 창고까지 가지 않아도 CPU가 바로바로 처리할 수 있음
    • HDD, SSD : 보조기억장치 -창고역할
    • cf. 프로그램 구동시 " HDD -> RAM올리고, RAM -> CPU 처리" 순으로 진행
  • 이렇게 구동되는 것을 우리 대신해주는게 바로 "운영 체제(Operating System)" OS이다.

    출처 : 주관적 책갈피

  • 근데 이 운영체제가 다양하기 때문에, 이에 맞는 개발 언어가 또 갈라지게 된 것

  • 또 이렇게 운영체제가 다양해지기 때문에 JAVA팀은 JVM(Java Virtual Machine)이라는 SW를 만들어 그 위에서 JAVA를 실행시키게 함 (지금 도커같은 느낌). 파이썬도 마찬가지.

    • 근데 이러면 OS - 환경 프로그램 - 개발프로그램 이렇게 2개의 프로그램을 돌리게 되기 때문에 속도가 느려지는 단점이 있다.

3장. 네트워크, 클라이언트, 서버

  • 네트워크 범주

    • LAN(Local Area Network) : 학교, 아파트. 건물 등 하나하나가 LAN이고, 이를 연결하는게 LAN선. (대표적인게 공유기 Wifi)
    • MAN(Metropolitan Area Network) : 도시의 여러 LAN을 연결한 것.
    • WAN(Wide Area Network) : 도시, 나라 등을 연결한 것. (대표적인게 인터넷)
    • 추가 PAN(Personal Area Network) : 한사람을 중심으로 형성된 네트워크로 일반적으로 10m 내의 범위 (보통 유선은 USB, 무선은 Bluetooth로 연결함(= WPAN_wireless~))
  • 그렇다면 네트워크는 어떻게 구동되는데?

    • 간단하게는 아래의 그림처럼 요청 내용(신호)가 WAN을 따라 해당 서버로 들어간다. 그럼 서버에서 주는 내용을 다시 네트워크를 따라 이동하고 내 컴퓨터로 들어오게 되는것!

      좀더 자세하게 보자면 이런 식(이건 웹 구동)
    • 이때 서버로 주고받기위해서 필요한게 IP주소이다. 이를 통해 내 위치를 알려주고 파일을 주고 받을 수 있게 된다.
    • 위의 그림에 적혀져 있는 것 처럼 계속 신호를 보내는 컴퓨터를 '클라이언트', 파일을 주는 컴퓨터를 '서버'라고하고, 클라이언트 쪽을 다루는 게 '프론트엔드', 서버쪽을 다루는게 '백엔드'
    • (덧) 이렇게 하나의 컴퓨터로 많은 신호가 몰리면 그 컴퓨터는 응답하기 위한 프로그램을 HDD -> RAM으로 올려야하는데, 이때 RAM 용량을 다쓰거나 CPU의 처리 용량을 넘어버리면... 서버가 죽는다....RIP...
  • 리눅스는 왜 중요한걸까? (리누스토발스... 슈퍼천재핵머싯는 사람..)

    • 1) 무료 2) 서버프로그램을 돌리기 때문
    • 서버프로그램은 뭐야? 요청을 받고 주기위한 작업도 프로그램이 필요한데 그걸 돌리는게 서버프로그램. 근데 얘는 주고받는 역할만 하기때문에 우리가 쓰는 윈도우처럼 이쁜 OS는 필요없음 & 꽁자조아! -> 리눅스 사용
    • 리눅스의 OS가 Ubuntu이고, 리눅스의 다른 개량버전으로 안드로이드가 있음. (+Redhat아저씨도)
  • 그럼 나도 서버하나 만들어볼까?

    • 집에서 서버컴 돌리는건 유지비용도 위험도도 높아서 무리무리.
      그래서 대신해주는게 '호스팅 업체' (대표적으로 cafe24, 가비아 등)
    • 해외에서 서버 서비스를 해주는 대표적인게 아마존 AWS(Amazon Web Services). 얘네는 서버컴 대여 뿐 아니라 솔루션까지 제공함

4장. API와 JSON

  • API란?

    • Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스
    • 클라이언트, 서버와 같은 서로다른 프로그램들이 서로 요청과 응답을 주고 받을 수 있게 만든 체계. 이를 통해 어떤게 요청인지 구분하고 그에 맞는 응답을 주도록 만듦
    • 각 기능에 맞춰 IP주소를 다르게 설정함. 서버주소/A 또는 서버주소/B 처럼 신호를 주고받을 수 있는 곳을 다르게 해서 주고받음.
    • 또한 이렇게 주고받을 때 데이터도 같이 주고받을 수 있도록 설정할 수 있는데, 이때 사용하는 데이터셋이 JSON, XML 같은 것.
  • 클라이언트 입장에서 바라본 API

    • CRUD : 요청의 요소를 4가지로 나눈것. 항상 여기에 맞춰서 생각하고 기획해야함 (ex.타임라인에 사진 올려달라는 요청)
      • C : Create. (사진을 올리는 요청)
      • R : Read. (타임라인에 사진을 불러오는 요청)
      • U : Update. (바꾸는 요청)
      • D : Delete. (지우는 요청)
    • 타임라인에 CRUD 요청은 각각의 주소를 가진다. 그런데 이렇게하면 주소들이 많아지고 관리하기가 힘들어짐.
      -> 주소들의 기능이 겹칠 수도 있음.
      -> 체계적으로 API를 관리하자! 한게 REST(Representational Atate Transfer)한 API를 만들자. = RESTful API
  • RESTful API를 사용하면 주소 갯수가 줄어들게 된다. 왜냐면 CRUD를 하나의 주소로 관리하기 때문!

    • 요청을 보낼 떄 어떤 요청인지 파악할 수 있는 스티커(=메소드)를 넣어서 전송함
      • C : Create. (올려줘) -> POST
      • R : Read. (불러와줘) -> GET
      • U : Update. (바꿔줘) -> PUT(전체) / PATCH(일부)
      • D : Delete. (지워줘) -> DELETE
  • 클라이언트 입장에서 바라본 API

    • 요청에 대한 응답으로 사람이라면 여러 표현을 할 수 있다. 하지만 그러면 받는 입장에서 그에대한 모든 상황에 대응하도록 코딩해야하기때문에 곤란하다....
      -> 체계를 만듦! (= HTTP 상태 코드)
    • 200번대 : 잘됐어
    • 400번대 : 클라이언트 요청에서 문제가 있다
    • 500번대 : 서버에 문제가 있다

요청에 대한 응답(Respond)정보로 위의 정보를 담든 요청에대한 정보를 담아 주고받게된다.

  • 다른 소프트웨어와도 API를 주고받아 타 기능을 끌어 사용할 수 있다구!

    • IP주소는? CRUD형식은? REST API면? 등등등 같은 생각이 든다...
    • 그때 필요한게 SDK!
    • SDK는 Software Development Kit로 소프트웨어를 개발하기위한 툴! 보통 다른 회사와 협업할때 많이 쓰인다고함
    • 참고) 카카오 서비스 기술문서
  • 그리고 이렇게 주고받을 때 쓰는게 바로 JSON형식!

5장. 애플리케이션

  • 애플리케이션이란?
    설치해서 사용하는 모든 프로그램(의외의 정의였다). 윈도우에선 응용프로그램이라고하다가 스마트폰이 등장하면서 스마트폰에는 '앱', '애플리케이션' / 윈도우에선 '응용프로그램'으로 불리기 시작함

6장. 웹(Web)

  • HTML이란?
    Hyper Text Markup Language. 서로다른 운영체제나 어플리케이션에서 모두 호환되도록 일정한 형식(HTML)을 만든것. 얘는 브라우져만 있으면 동일하게 표기된다.
    주로 "인터넷의 뼈대"라고 표현함

    • 여기에 사용되는게 '태그' (예시, <a>, <ol>, <p>, 등등)
    • HTML은 컴퓨터에게 일을 시키는 것이 아니기 때문에 프로그래밍 언어가 아니다.
  • CSS란?
    HTML을 더 예쁘게 꾸미기위해 디자인 요소를 넣은 것. (HTML + CSS를 '퍼블리싱 작업' 또는 '마크업'이라고 표현함)
    보통 "살"로 표현함

  • 그럼 JavaScript는 몬데?

    • 웹의 프로그래밍 언어 중 하나. 웹의 "옷"을 입혀주는 것. 더 큰 기능을 부여한다. (Java랑은 인도와 인도네시아의 관계처럼 아무 연관이 없음)
  • 인터넷은 HTML '태그'에 CSS를 연결하고 js파일을 연결함

  • 우리가 입력하는 것은 js를 통해 API 요청으로 변환되어 서버로 송수신됨

  • 으... 근데 브라우저도 어플리케이션이다보니 버전도 다 다르고, 브라우저 자체도 다양해지다보니 거기에 따라 작동유무가 갈릴 수 있다..
    -> '브라우저 버전의 파편화'라고 함.

  • 요즘 핫한 반응형 웹은 뭐야?

    • 원래는 컴퓨터(모니터)형 웹페이지, 모바일용 웹페이지(m.naver.com 같이)를 다르게 만들었음
    • 중복 작업하지말자!!! "브라우저의 가로넓이에 반응해서 구성요소가 바뀌게 만들자". 한게 반응형 웹
  • 요즘은 네이티브 애플리케이션(운영체제별 고유의 개발언어 사용한것), 모바일 웹행, 하이브리드 애플리케이션으로 넓어짐

7장. 데이터베이스와 이미지 처리

  • txt 파일로 정보를 저장하고 처리한다면 한번에 여러개의 CRUD를 처리할때 중간에 데이터가 깨지거나 잘못 수정되는 경우가 생길 수 있음

  • 만약 처리할때마다 1%가 잘못된다고하면 10,000명의 데이터중 100명의 데이터가 이상해지고 회사가 곤란해 질 수 있는 상황이 발생하게 된다.

    • If) 내가 쇼핑몰에서 큰 돈주고 명품을 샀는데 쇼핑몰의 데이터 이상으로 결제 내역이 날라간다면...???ㄷㄷㄷ
      따라서 데이터는 단 1%의 결점도 없어야함
  • 또한 데이터가 계속 쌓인다면 txt 파일도 증가하고 그 증가한 만큼 해당 데이터를 찾기는 쉽지 않음

  • 그래서 나온게 "관계형 데이터베이스"

    • 데이터들을 파일로 만들어 저장하고 관리해주는 소프트웨어를 따로 사용하는 것.
    • 이 관리 시스템(소프트웨어)을 관계형 데이터 베이스 관리 시스템(RDBMS)라고함
    • Ex) MS SQL, Oracle DB, My SQL 등
  • 이런 데이터베이스는 프로그램이다보니 서버컴퓨터 뿐만 아니라 클라이언트컴퓨터에서도 작동이 가능함

    • 개발 상황에 따라 클라이언트의 데이터베이스를 활용하는 경우가 있음
    • Cf. 기본 알람앱에 저장되어 있는 시간들도 각각 데이터인데, 이것들은 어디에 저장되어 있는 것일까?
      -> 인터넷에 연결되지 않은 상태에서도 동작하는 것을 보니 '클라이언트'에 저장되어 있는 것이죵!
  • 하지만 겉으로만 보고는 데이터가 클라에 있는지, 서버에 있는지 파악하기 어렵운게 사실.

    • 이럴땐 'API 문서'를 보면 데이터가 어디에 있는지 바로 확인할 수 있다.
    • 그리고 중요한 것은 서비스의 데이터들을 클라/서버 어디에서 불러오는지를 구분해야함. 때로는 두곳 모두 있는 경우도 있다 -> 에버노트! -> 동기화를 통해 데이터를 맞추는 과정이 필요함
  • 만약 프로필처럼 '고객'이 '프로필 이미지'를 올린다면 '관계'가 설정 되는데, 이럴때 DB에 이미지 사진의 주소를 관리해서 비공개, 변경 등을 조절할 수 있음

8장. 프레임워크와 라이브러리

  • 어플마다 버튼이며 형식이 비슷하다고 느낀적 없나요?
    요즘은 버튼이며 하나하나 코드로 작성하지 않고 만들어져있는 것을 갖다 쓰는 것이 대부분! -> 만들어 놓은 묶음을 프래임워크라고 함. (애플은 코코아 프레임워크라도 한다네용)
  • 웹 프론트엔드 프레임워크 및 라이브러리 3대장으로 유명한 "Angular.js(Google), React.js(facebook), Vue.js(Evan You)"가 있음. 그리고 자바 - 스프링, 파이썬 - 장고 등..
  • 그럼 라이브러리는 뭘까?
    다른 사람들이 만들어 놓은 코드를 이용한다는 측면에서는 프레임워크와 동일함.
    • 근데 프레임워크가 더 큰 범위! 각종 라이브러리와 코드들이 모여 프레임워크가 됨
    • 프레임워크는 하나의 집이고, 라이브러리는 그 안에 가구들 같은 개념이랄까? -> 그래서 한 프로젝트에서 프레임워크는 하나밖에 못쓰지만, 라이브러리는 다양하게 사용 가능

9장. 협업, 소스관리, 디자인

  • Git은 여러 사람과 협업할 때 필수인 프로그램으로 계속해서 바뀌는 코드를 브런치라는 장치를 이용해서 관리하는 시스템으로 보면 된다.
  • Git!!!!!!!!!!!!!!!!!!! 이건 정말 중요해...! 여기선 깊게 안다뤄서 꼭 추가로 읽기 바란다..!!
  • 출처 UX 공작소
  • 브런치는 각 독립된 작업을 진행하기 위한 것으로 다른 사람의 영향을 받지 않기때문에 여러 사람들이 동시에 작업을 진행할 수 있게 됨

정리끝!

으와 생각했던 것 보다 시간이 더 오래 걸렸다. 오래걸린만큼 읽을 땐 이해한다고 생각했지만 못했기 때문에 그런것 같다. (역시 공부하고나서 말로 설명해봐야해..끄덕..)

그래도 진짜 얕지만 어디서 IT 관련 대화할 때 끄덕거리면서 대충 어떤 상황인지는 이해할 수 있게 되었다.

위에 내용 중에서 중요한 부분만 꼽으라면 단연 4장, 7장! API, JSON, 데이터베이스 이다.

이걸 모르고 IT세계로 입문한다는건 말이 안돼..

그리고 누군가 "그래서 이 책 추천이야? 한번 읽어볼까?"라고 묻는다면 비전공자라면 "응!!!! 추천!!!"이다! 사실 SDK도 전에 ubuntu로 flutter할 때 설치했었는데 이건 몬데 까는거야..? 라고 생각하고 그냥 깔았었다... (나녀석 반성..) 이걸 보고나서야 아... 그래서...! 라고 이해하게 되었으니까.

사실 컴퓨터쪽이 프론트, 백, 데이터관리, AI 등 분야도 많고 각 분야마다 공부할게 많다보니 전공자가 아니라면 전부다 알긴 쉽지 않다.
그때 이런 책 하나 읽어두면 회사에서 커뮤니케이션할 때 '아 이 사람 비전공자라던데 말좀 통하네~??' 소린 듣지 않을까? ㅋㅋㅋ는 내 생각!
무튼 다른사람에게도 도움이 되는 글이길 바라며 마친다:)!

profile
차보의 Data Engineer 도전기♥ (근데 기록을 곁들인)

0개의 댓글