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

내가 직접 책을 읽고 요악한 내용이다

 
 
 
 

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

  • 컴퓨터는 0과 1로 이루어진 기계어를 사용한다. 인간은 인간어를 사용하기 때문에 의사소통이 되지 않는다 이럴때 '컴파일러'를 통해 인간의 요구를 컴퓨터에게 전달해준다.
  • 개발자는 컴파일러에게 문서로 일을 시키는 사람이다.
    • 프로그래밍 언어를 사용해 컴파일러에게 명령을 전달하면 -> 컴파일러가 명령을 기계어인 0과 1로 변환해 컴퓨터에게 전달 하는 방식이다.
  • IDE(Integrated Development Environment) (통합 개발 환경) : 개발자가 코드를 좀 더 편하게 작업하게 만들어 주는 기능이 들어있다.
    ex) Androdid Studio, Eclipse, Pycharm, Entelij
  • 프로그래밍 언어는 여러 사람들이 계속해서 더 좋은 언어를 만들면서 종류가 다양해졌다. 그러면서 많은 사람들이 선택한 언어가 계속해서 살아남으며 발전하고 있다.
    • 저수준 : 컴퓨터 친화적 언어 (학습이 어렵고 작성시 구체적으로 꼼꼼하게 작성해야 한다. 낮은 사양의 컴퓨터에서도 원활히 작동한다)
      • 저수준을 사용하는 이유 : 가격이 저렴해진다.
    • 고수준 : 인간 친화적 언어 (학습이 쉽다. 조금만 설명해줘도 컴퓨터가 알아서 행동한다. 그만큼 컴퓨터가 더 고민해야 하기에 사양에 따라 작동이 느리거나 안될 수 있다. )
    • 프로그래밍 언어를 구분하는 기준은 '저수준', '고수준'으로 나뉜다`
  • 컴퓨터 구성 요소
    • CPU : 컴퓨터의 머리 역할을 한다. 데이터를 따로 저장하지 않는다.
    • MEMORY : cpu의 개인 작업 공간, 보조기억장치에서 큰 정보를 메모리에 옮겨놓고 안에서 작업한다.
    • 보조기억장치(HDD, SSD) : '창고 역할' 전원이 꺼져도 데이터는 남아있다.
      ex) 포토샵을 쓰려고 저장 되있는 파일을 찾는다
      c드라이브 - programfiles - Adobe - Photoshop에 있는 포토샵을 클릭 = 보조기억장치에 저장된 프로그램 실행
      로딩하는 동안 보조기억장치에서 '실행에 필요한 데이터'가 메모리로 올라가고 있다. -> 로딩 후 , 메모리에 올라가있는 포토샵을 cpu가 유저가 원하는대로 움직이며 작업을 수행한다.
  • 위에서 말한 과정은 우리가 직접하지 않는다. '어떤 소프트웨어'가 모든 과정을 대신 해준다. 바로 운영체제다
    대표적으로 '윈도우', '맥 OS', 'IOS','안드로이드'가 있다. 우리는 이 운영체제를 이용해 프로그램을 설치, 제거하고 카카오톡을 실행할 수 있다.
    • 각 운영체제 위에 돌아가는 프로그램을 만들려면 정해진 언어로 프로그램을 만들어야한다.
      Apple : Object-c, Swift / Google : Java, Kotlin...
  • JVM : Java언어로 만든 프로그램이 돌아갈 수 있게 만든 소프트웨어 (모든 운영체제에서 수정 없이 사용 가능해짐)

네트워크, 클라이언트, 서버

  • LAN : 컴퓨터가 연결된 작은 지역 (학교 컴퓨터실, 아파트 하나, 커피숍)
    • 이런 LAN들을 연결하는 선 : LAN선
  • MAN : 도시의 여러 LAN을 하나로 연결
  • WAN : 도시와 도시, 나라와 나라를 모두 연결
  • 이 신호들을 무선으로 만들어 냄 (3g, 4g, 5g)
  • IP주소 : 컴퓨터 위치 주소 , 이동에 따라 주소가 바뀐다.
  • 클라이언트 : 사용자가 소유한 컴퓨터, 고객의 컴퓨터 (프론트엔드)
  • 서버 : 데이터를 주는 컴퓨터, 고객에게 보이지 않는 컴퓨터 (백엔드)
  • 리눅스 : 서버 프로그램을 돌리는 운영체제다.
    • 리눅스에서 프로그램을 하루죙일 돌리는 이유 : 무료고 잘 만들어진 운영체제다.
      리눅스를 발전시켜 다양한 운영체제가 만들어졌다.
  • 호스팅 업체 : 집에서 서버를 운영하면 여러 문제에 봉착하기 때문에(전기세, 데이터 손실 등) 대신 관리해주는 업체가 있다
    ex) 국내 : 가비아, cafe24 / 해외 : AWS

 


API와 JSON

  • API : 클라이언트, 서버와 같은 서로 다른 프로그램에서 요청과 응답을 주고 받을 수 있게 만든 체계
    • 요청하는 곳에 따라 (서버주소/A) -> 로그인 기능 수행, (서버 주소/B) -> 회원 가입 기능 수행으로 응답 한다.
      (이러한 기능은 서버 개발자(백엔드)가 만들며 클라이언트 개발자는 그 API를 사용한다)

 

  • API를 통해 요청과 응답을 주고 받을 때 데이터도 같이 담겨온다.
  • 데이터를 다루는 요청 4가지 (CRUD)
    ex) 타임 라인에 사진을 올리는 요청을 예로 들어 보자
    • C (Create) : 사진을 '올리는' 요청
    • R (Read) : 사진을 '불러오는' 요청
    • U (Update) : 사진을 '바꾸는' 요청
    • D (Delete) : 사진을 '지우는' 요청
  • CRUD는 각각의 주소를 가지고 있다. 하지만 각각의 주소를 구성하면 주소가 너무 많아지기에 관리하기 힘들어진다.
    또한 기능이 겹칠 수 있고 버그의 위험성이 있다. 그래서 좀 더 체계적인 API를 만들게 되는데 그러한 API를 RESTful API라고 부른다
  • RESTful API : CRUD를 하나의 주소로 관리한다. 그리고 요청을 보낼 때 어떤 요청을 보냈는지 파악할 수 있게 Method를 보낸다.
    • Create : POST
    • Read : GET
    • Update : PUT (데이터 전체 수정 시) / PATCH (데이터 일부 수정 시)
    • Delete : DELETE
  • 서버로 응답이 올때 잘됐다는 응답은 여러가지의 표현으로 올 수있다 (잘됨, 완료, Good 등)
    이러한 응답들을 200번대 코드로 표현한다.
    • 200 : 잘 됐어
    • 400 : 클라이언트 요청에 문제가 있다
    • 500 : 서버에 문제가 있다
  • SDK : API를 제공해 주는 다른 소프트웨어

 

  • 데이터를 응답 혹은 요청할때 각각의 형식이 다름을 방지하기 위해 유명한 형식을 쓰는데 그중 하나가 JSON이다

 

  • 클라와 서버는 요청과 응답을 주고 받고, 그때 필요한 데이터들을 JSON 형식으로 주고 받는다.

 
 


웹(Web)

  1. HTML
    • 운영체제에 상관없이 브라우저만 있으면 어디서도 동일한 정보를 볼 수 있다.
    • 프로그래밍 언어가 아닌 브라우저가 볼 수 있는 문서를 적는 언어다.
    • CSS코드로 디자인을 입힐 수 있다 
    • HTML + CSS = 퍼블리싱 작업 --> 퍼블리셔, 마크업 개발자라고 부른다
    • JavaScript언어로 동적이고 세밀한 화면을 구현 할 수 있다.
  • 우리가 보는 웹은 HTML사본이다. 따라서 코드를 수정하거나 지워도 '새로고침'을 하면 다시 HTML사본을 다운 받는다. 
    • 웹은 수정이 용이해 원본만 수정하면 유저가 업데이트를 하지 않아도 '새로 고침'하면 반영된다.
    • 웹은 네트워크가 느린 환경에 민감해 주변에 인터넷 사용량이 많아지면 영향을 크게 받는다
  • 애플리케이션은 업데이트를 하기 위해 사용자가 다운로드 해야 한다.
    • 앱은 용량이 커지면 저장 공간을 비워서 용량을 확보해 속도를 개선 시킨다.

2. 브라우저

  • 크롬, 익스플로러, 파이어폭스, 사파리 등이 있다.
  • 브라우저들은 HTML,CSS,JavaScript를 받아서 읽는다. 
  • 위 브라우저들은 설치를 통해 실행할 수 있다 (즉 애플리케이션이다)
    • 시간이 흐르면서 새로운 기능들이 추가 되면 추가된 기능은 이전 버전에서 사용할 수 없다. 
      따라서 프론트엔드 개발자는 소비자의 브라우저 버전과 종류에 맞춰 추가 코드를 작성해야 한다.
      이 문제를 브라우저 버전의 파편화라고 부른다.
    • 모든 브라우저의 파편화를 잡을 수 없기에 '점유율'이 높은 브라우저 위주로 파편화 작업이 돼있다.

3. 반응형 웹

  • 브라우저의 가로 넓이에 '반응'하여 구성 요소가 변하는 기술이다.

 
 
4. 하이브리드 애플리케이션

  • 브라우저를 소유한 회사들은 자신의 브라우저를 더 많이 사용하길 바란다.
    그래서 자신들이 만든 운영체제(윈도우, 맥OS,IOS)에 브라우저를 내장 시켜서 출시해 자연스럽게 사람들이 더 많이 사용하게 만든다. 
    (단, 안드로이드는 내장 + 스마트폰 제조사의 브라우저도 함께 설치 되있는 경우가 많다)
  • 네이티브 애플리케이션 : 운영체제별 프로그램을 개발하기 위해 각자 정해놓은 언어들과 자체 기능을 사용해 개발한 프로그램
    • 수정 후 심사 과정이 복잡하고 사용자들이 직접 업데이트를 해줘야 한다. 
    • 네트워크를 최소한으로 이용하도록 코딩하면 인터넷이 느린 환경에서도 빠르게 동작한다.
  • 하이브리드 애플리케이션 : 애플리케이션의 특정 부분에 '브라우저'를 올리는 방식
    (브라우저를 올리고 HTML 파일을 불러 올 URL을 설정한다 --> 브라우저가 뜨면서 HTML에 연결된 파일을 보여준다 )
    • 이러한 방법은 수정하고 '새로 고침'을 하면 바로 반영된다 (네트워크에 종속 되기에 느린 곳에선 시간이 걸린다)

 

 
 

  • 웹과 앱의 개발 작업 과정

 

 
 


데이터베이스와 이미지 처리

  • 데이터는 텍스트 정보이다. 
  • 데이터 무결성 : 데이터는 단 1%의 결점도 없어야한다. 데이터의 손실은 막대한 손해를 겪기 때문이다.
  • 관계형 데이터 베이스 : 데이터 관리 기법으로 1행에 '이름','성별','생일','주소' 같은 구조를 정한 후 데이터를 하나씩 쌓는다. 
    각 데이터 행에는 고유 번호가 있기에 동명이인 이슈를 관리할 수 있다.

 

  • 관계형 데이터 베이스 관리 시스템 : MySQL, Oracle DB, MariaDB등 이 있다.
  • 클라이언트 데이터는 인터넷이 연결되지 않아도 동작하며 서버가 필요하지 않기에 데이터가 클라이언트에 있다
    (로컬, 내부DB, 네이티브, 클라/클라이언트, 프론트/프론트엔드 라고도 부름)
  • 서버 데이터는 데이터가 서버에 있기 때문에 데이터를 변경하면 다른 모든 기기에 변경된 데이터가 표시된다
    (서버, API, DB, 백/백엔드 라고도 부름)
  • 클라이언트, 서버의 컴퓨터에 있는 이미지는 내부 주소를 통해 이미지에 접근한다. 이 이미지들을 수정하려면 파일을 바꾸거나 다른주소로 지정 하면 된다. (보통 서비스 제공 이미지)
    고객이 만들어 낸 이미지(프로필 사진) 같은 경우는 데이터 간의 관계가 맺어져있기 때문에 '무결성'이슈에 따라 따로 관리가 필요하다
    이미지 주소를 DB에 넣어 관리한다.

 
 


프레임워크와 라이브러리

  • 프레임워크 : 회사들이 자사의 애플리케이션을 쉽고 빠르게 개발할 수 있도록 틀을 만들어 놓은 것
  • 웹 프레임워크 및 라이브러리는 큰 회사뿐만 아니라 개인이 만들기도 한다. 

 

  • 라이브러리도 다른 사람이 만들어놓은 코드를 이용해 해당 기능을 간편하게 사용한다.
    그런 라이브러리와 각종 코드들이 모여 프레임워크를 만든다
  • 한 프로젝트에서 프레임워크는 하나만 쓸 수있다. (두 자동차를 동시에 운전 못하는 것과 같다)
  • 라이브러리는 더 작은 개념이기에 (망치나 가위 같은 도구)한 프로젝트에서 여러개의 라이브러리를 사용 할 수 있다.

 


협업,  소스관리, 디자인

  • 개발자가 코드를 새로 만들고, 수정을 반복할 때 만약 코드가 100개의 파일에 나눠서 넣어져 있다면 하나하나 열어서 수정과 삭제를 하기엔 여간 힘든 일이 아니다. 새로운 내용을 추가 할 때 '덮어쓰기'를 많이 하는데 내용이 잘 못 될 경우 되돌려야 할 때가 있다
    이 문제는 깃(GIT)이 해결해준다.
  • 깃에서는 계발 단계별로 깃발을 꽂을 수 있는데 이러한 행위를 커밋(Commit)이라고 한다
    • 커밋에는 무슨 개발을 했는지 적어주는 메모가 따라 다니는데 그 메모를 커밋 로그 (Commit Log)라고 부른다.
  • 깃은 깃발과 깃발 사이의 변화를 모두 추적해준다. 더불어 체크아웃(Check Out)기능을 통해 깃발이 꽂힌 부분의 코드로 옮겨 다닐 수 있다.
  • 브랜치(Branch) : '분기','가지'라는 뜻으로 개발을 하던 중 새로운 방향의 개발을 추가해야 할 때 기존 개발을 '덮어쓰기' 하지 않고 새롭게 가지를 쳐서 작업할 수 있다
    이렇게 하면, 기존 브랜치에 커밋을 하는 결이 새로운 브랜치에 영향을 주지 않는다. 

 
 

  • 하나의 프로젝트를 진행할 때 브랜치를 사용하면 서로 동시에 충돌 없이 작업을 할 수 있다.
    각 코드는 다른 코드에 영향을 주지 않기에 작업 후 코드를 합쳐 주기만 하면 되는데 이 기능을 머지(Merge)라고 부른다.

 
 
 
 


책 후기
 

난 전반적인 IT지식을 아예 몰랐고 학원을 다니기 전 이 책을 샀다
안읽고 있다가 학원 다닌지 3개월이 지난 후에 이 책을 읽게 됐는데
공부를 조금 해본 입장에서 본 이 책은 기초만 적혀있는 편이다.
전반적인 소프트웨어가 돌아가는 방법이나 기본 용어 설명만 간단하게 돼있다
 
그래서 조금이라도 컴퓨터 공부를 한 사람에겐 비추한다. 알고 있는 내용이 많을 것 이다!
 
하지만 컴퓨터에 대해 1도 모르고 정말 기본 지식을 얕게 입문 해 보고 싶은 사람
그리고 개발자와 가까이 일하거나, 개발자 업무 과정의 큰 틀을 알고 싶은 사람에게 추천한다
작가가 예를 잘 들어서 설명해주기에 이해하기 쉽다
 
나도 학원 다니면서 헷갈렸거나 이해가 잘 안갔던 상태로 넘어갔던 웹 동작 방법들을
이 책을 읽으면서 다시 한번 이해 했다
 


 
 
 
 

'💻 IT > 책 및 영상 요약' 카테고리의 다른 글

프로그래밍 사전 지식 (Feat. NEW LECTUERE)  (0) 2024.01.04

+ Recent posts