본문 바로가기
책,컨퍼런스,박람회 방문, 실무자 특강 후기

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

by 바다의 공간 2024. 6. 24.
 
비전공자를 위한 이해할 수 있는 IT 지식
우리는 매일 스마트폰으로 메시지를 보내고, 컴퓨터로 일을 합니다. 또 음식점에서 키오스크로 주문하고, 가상현실에서 게임을 즐깁니다. IT는 더 이상 전문가들만의 이야기가 아닙니다. 우리의 삶 곳곳을 IT가 점령하고 있고, 그 속도는 계속해서 빨라지고 있습니다. 이제 IT를 모르고선 세상을 이해하기 어려운 시대가 되었습니다. 이 책은 비전공자를 위한 ‘IT 기초 문법서’로, 한 번쯤 들어봤을 프로그래밍 언어, 운영체제, 네트워크, API, JSON, 데이터베이스, 이미지 처리, 프레임워크, 라이브러리, 깃(Git), 디자인 이슈 등 다양한 지식을 담고 있습니다. 복잡하게 얽혀 있어 한 번에 이해하기 어려웠던 각각의 지식들을 친숙한 이야기로 쉽게 풀어냄으로써 IT 산업의 전체적인 큰 그림을 그릴 수 있도록 도와줍니다.
저자
최원영
출판
티더블유아이지
출판일
2020.07.14

1장 오리엔테이션.

 네트워크 / 클라이언트 / 서버 / API / 앱 / 웹 / 데이터 등이 어떻게 유기적으로 관계가 이어져 있는지 IT의 전체적인 큰 그림을 이해할 수 있도록 한다고 적혀있다.

코딩을 공부하기 전에 IT라는 큰 숲을 이해하고 볼 수 있는것이 필요한데 그 부분을 긁어주는 책이 아닐까 싶습니다.

 

실제로 내가 처음에 개발에 관심을 가졌을때 생각했던 흐름대로 흘러가서 더 몰입감 높게 읽을 수 있었다

지금도 전공자가 아니기에 중간중간 끊기는 부분들이 있는데 그런 부분들을 유기적으로 연결시킬 때 책에서 도움을 받으면 좋은 접착제가 될 수 있을 것같다.

특히 이런 부분들의 구분이 잘 되어있어서 내가 지금 학원에서 무엇을 배우는지

어떤것을 위한 것을 배우는지 어떤거 관련해서 배우는지를 확인해볼 수 있었다.


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

 

쉽게말해서 프로그래밍언어로 문서작업을 하는 행동을 '프로그래밍 혹은 코딩'이라고 합니다.

컴퓨터는 0과 1로 이루어진 것이라고는 이미 알고있고 프로그래머가 프로그램을 이용하여 코드를 입력하면 프로그램에서 0과 1로 컴퓨터가 알아들을 수 있는 언어로 바꿔줍니다.

 

그런데 영화만보더라도 코드가 엄청 길어서 겁먹었는데 그 코드를 다 적진 않더라구요

왜냐면 프로그램이 작업을 도와주기때문입니다.

어떻게 도와주냐면 tap을 누르면 기본 세팅을 해준다던지 앞에 몇글자만 치면 자주쓰이는 문장,문법들을 추천해주기도 하더군요

이렇게 도와주는 프로그램들을 IDE (Integrated Development Environment) 라고 부릅니다.

즉 통합개발환경이라고 부릅니다. 워드나 한컴에서보면 문서작업하고 그 안에 표만들기, bold, 자간 장평 등등 

문서작업을 위한 기능들을 갖고있고 그 기능들을 활용해서 문서를 가독성있게 만들 수있죠

IDE도 같습니다. 코딩에 필요한 다양한 기능들이 들어있고 그 기능들을 통해 쉽게 코드를 만들 수 있습니다.

IDE(통합 개발 환경)
Android Studio 안드로이드 애플리케이션 개발 용도
Xcode 애플 운영체제 위의 어플리케이션 개발 용도
Eclipse C/C++ 개발, 자바개발, 웹개발 용도
PyCham 파이썬 개발 용도
기 타 등 등

개발자에 대한 기본개념

개발자 하는 일
안드로이드개발자 안드로이드(운영체제 위에 돌아가는 소프트웨어를 개발하는)개발자
ios개발자 ios(위에 돌아가는 소프트웨어를 개발하는)개발자
맥os개발자 맥os(위에 돌아가는 소프트웨어를 개발하는)개발자
윈도우개발자 윈도우(운영체제 위에 돌아가는 소프트웨어를 개발하는)개발자

 


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

LAN(Local Area Network)입니다.

LAN으로 연결된것들은 연결이 가능합니다.

 

여러 LAN들을 연결해 MAN(Metropolitan Area Network)를 만들고

도시+도시, 나라+나라 를 연결해서 WAN(Wide Area Network)을 만들었습니다.

그래서 이 선들을 연결해서 사용하기 위해 회사들은 ADSL, VDSL, 광케이블 등 초고속 인터넷망을 선전했습니다.

 

사람들이 리눅스를 사용하는 이유는 기본적으로 무료아가때문에 사용이 가능합니다.

심지어 잘 만들었고 수정해도 괜찮고 수정한 것을 팔아도 괜찮다고 했다고 합니다.

 

우분투 라고 학원에 다니면서 굉장히 많이 들어봤는데

이것또한 리눅스의 버저너 중 하나입니다.  레드헷이라고도 있는데 레드헷은 리눅스를 개량해서 유료로 판매하는 회사입니다.

 

유료로 판매하는 이유는 보안상이유가 가장 큽니다.

리눅스는 무료배포판이기에 사고가나거나 정보가 날라가거나 한다고 하더라도 책임질 수 없고 그럴 의무도 없으니

은행같이 보안이 중요한 직군에서는 좀 더 안전하게 사용할 수 있는 프로그램이 필요하겠죠!


그렇다고 개인 서버를 운영하기에도 한계가있습니다.

매일 어떤일이있어도 꺼지면안되니까요 그런 불편함을 대신해주는 서비스가 호스팅업체 라고 부르고

국내에는 대표적으로 CAFE24, 가비아 등의 회사가 있습니다.

외국에는 AWS가 대표적입니다.

 

 

 


4장. API와 JSON

API는 요청을 구분할 수 있도록 하는 체계입니다. 

클라이언트, 서버와 같은 서로 다른 프로그램에서 요청과 응답을 주고 받을 수 있게 만든 체계입니다.

 

API를 클라이언트와 서버의 관점에서 좀 더 자세히 살펴보려면

 

클라이언트의 관점)클라이언트 소프트웨어는 서버에 요청을 보냅니다.예를들어서 타임라인에 사진을 올리는 요청이라고 하면 이 요청을 크게 4가지 요소로 나눌 수 있습니다.CRUD라고 불리는 4가지 요청은 데이터를 다룰때 기준이 되는 요청으로 프로그래머에게 아주 중요합니다.

약자 단어 주소 기능
C Creat 사진을 올리는 요청 서버 컴퓨터의 주소/timelinecreate 사진올림
R Read 사진을 불러오는 요청 서버 컴퓨터의 주소/timelineread 사진불러옴
U Update 바꾸는 요청 서버 컴퓨터의 주소/timelineupdate 사진바꿈
D Delete 지우는 요청 서버 컴퓨터의 주소/timelinedelete 사진지움

 

항상 CRUD관점에 익숙해져있어야합니다. 만약 CRUD중 특정 기능이 없는 기획이라면 그 기획의도가 명확해야하고 설명할 수 있는 이유가 있어야합니다.

 

이렇게 하다보면 주소가 엄청 많아지고 사람이 하는것이다보니 겹치는것도 많아지고 버그가 생길 수 있겠죠

그렇게되면 좀 더 체계적으로 API를 관리하고싶어했고 그 영향으로 조금 더 체계적인 API라는 사회운동이 만들어지고

그런 API를 REST한 API 즉 RESTful API라고 부릅니다.

꼭 알아야하는 것!!

약자 단어 주소
C Creat POST
R Read GET
U Update PUT(전체) == 데이터 전체를 바꾸고 싶을때 사용
/PATCH(일부) == 데이터의 일부만 수정하고 싶을 때 사용
D Delete DELETE

메소드 == '방법'이라는 의미의 영단어이지만 개발자들의 세상에서는 수학의'함수'와도 같은 의미로 사용합니다.

함수 == y= F(x)x라는 입력값에 따라서 y라는 결과가 나오는것을 함수라고합니다.(메소드와 같은 의미)

파라미터 == 함수에서는 x를 변수, 파라미터라고 표현합니다.

API에서도 똑같습니다.

예를들면 로그인 요청에서 필요한 ID와 비밀번호를 '로그인 요청에 필요한 요청 변수' or '파라미터'라고 표현합니다.

코드
200번대 코드(201, 202 ...등등) 정상 
400번대 코드(401,402 ...등등) 비정상 (클라이언트의 요청문제)
500번대 코드(501,502 ...등등)  비정상 (서버에 있는 문제)

또한 요청(Request)과 마찬가지로 응답(Response)도 데이터를 담을 수 있습니다.

이렇게 요청/응답에 데이터를 담아 주고받음으로 API요청이 완성됩니다.


정리하자면 API는 소프트웨어가 다른 소프트웨어의 기능을 쓰기 위해 중간에 필요한 체계라고 생각하면 됩니다.

서로 정보를 주고 받는 소프트웨어끼리의 체계입니다.


 

API의 개념을 조금 더 확장시켜보면 내가 없는 다른소프트웨어의 기능을 활용하여 할 수 있습니다.

API를 제공해주는 다른 소프트웨어를 SDK(Software Development Kit)라고 부릅니다.

 

 

 

내가 만든 초간단 번역 서비스 프로젝트

저는 OpenAI-chat GPT를 활용하여 초간단 번역 서비스를 만들어봤습니다.

여기서 굳이 따지자면 openai-chat gpt가 저의 sdk라고 볼 수 있습니다.

 

[Python] Streamlit으로 초간단 번역 서비스만들기

초간단 번역 사이트 만들기#stremalit 임포트import streamlit as st 간단하게 UI를 구성합니다.st.title('초간단 번역 서비스앱')text = st.text_area('번역할 내용을 입력하세요', '')src_lang = st.selectbox('번역할 언

so-fast.tistory.com


JSON

어떤 형식의 종류입니다.

중괄호로 시작하고 키와 벨류값으로 이루어져있고 콜론으로 구분합니다.

즉 JSON으로 정보를 넘겨준다면 Key는 "id", "pw"가 들어갑니다.

제 생각에는 파이썬에서 딕셔너리와 비슷한 형태인것같습니다.

그래서 찾아보니!!


JSON예시

{
    "name": "Alice",
    "age": 30,
    "city": "New York"
}

 

Python 딕셔너리 예시

person = {
    "name": "Alice",
    "age": 30,
    "city": "New York"
}

 

SON에서는 키와 값 사이를 콜론(:)으로 구분하고, 여러 쌍을 쉼표(,)로 구분합니다. 파이썬 딕셔너리도 동일하게 콜론으로 키와 값을 구분하고 쉼표로 여러 쌍을 구분합니다.

 

다만, JSON은 데이터 교환 포맷으로 사용되며 주로 문자열 형태로 표현됩니다. 반면, 파이썬 딕셔너리는 파이썬 프로그래밍 언어의 데이터 구조 중 하나로 사용됩니다.

 

파이썬에서 JSON을 파이썬 딕셔너리로 변환하거나 그 반대로 변환하는 것도 매우 간단합니다. 이를 위해 json 모듈을 사용할 수 있습니다.


 

변동이 가능하니 회사 정책같은 정보는 api로 서버에서 불러오게 만듭니다.


5장. 어플리케이션

어플리케이션이란?

설치해서 사용하는 모든 프로그램입니다.윈도우에서는 응용 프로그램(Application Sortware)이라고 불렸습니다. 그런데 스마트폰이 등장하고 앱, 애플리케이션 이라고 불리지만 같은 특징입니다.어떤 운영체제 위에 올라가는 프로그램이나 설치하는 프로그램, 응용프로그램, 어플, 앱 ,애플리케이션, 모두 같은그룹입니다.

 

 

 


6장. 웹(Web)

 

웹의 3 구성요소
HTML(내용, 구조) 프로그래밍언어는 아니지만 브라우저가 볼 수 있는 문서를 적는 언어
<h><p><a><ul.<ol> 등이 있음
합친 과정을 퍼블리싱 작업  이라고 하고
이 작업을 하는 사람들을 퍼블리셔, 마크업, 마크업개발자 등등이라고 합니다.
CSS(디자인) HTML에 디자인을 입힐 수 있는 코드.
JavaScript(프로그래밍언어) 동작하게만드는 코드  

 

반응형으로 만들게되면 PC, 모바일 사용자들을 구분 할 필요 없이, 레이아웃위주로 나눠 작업해 기기의 디자인으로 구현할 수 있습니다. 즉 웹페이지의 크기가 사용자의 기기에 맞추 ㅓ자동으로 변형된다는 의미입니다.

 

앱개발자한테말하지말고 웹 개발자한테가서 말해라 ! 라는말은 

앱개발은 말 그대로 앱을 개발하고 그 안에 변경되고 변화되는것은 웹 개발자들이 주로 하기때문입니다.

만약 앱으로 매번 업데이트를 하게된다면, 각 스토어에 계속 올려야하고 올리려면 심사를 받아야하는데

이 과정또한 번거롭고 만약 했다고 가정해도 사용자들이 또 그 앱을 다운받아야하는데 

모두들 귀찮다고 생각할것이고 이 부분은 결국 비효율적이라고 말할 수 있습니다.


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

데이터는 단 1%의 결점도 없어야합니다. 그래서 데이터를 관리하는것이 어렵습니다.

이 속성을 데이터의 무결성 이라고 합니다. 따라서 데이터를 다루는 사람들은 보수적일 수 밖에 없습니다.

쉽게 변화를 허용하지않아요 데이터가 깨지거나 오류가생길 수 있으니까요

그래서 데이터를 다루는 사람들은 점검 시간을 잡아두고 아주 안전하게 작업합니다.

기존 데이터도 잘 백업해두고 업뎃을 한 뒤에도 테스트를 꼼꼼하게 진행합니다.

 

하나만 변경하고 바꾸려고해도 1번부터 100,000,000개의 파일을 살펴보려면 10,000초가 필요하고 166.6분 2.77시간입니다.

어떤 서비스에서 성별수정하는데 저정도의 시간이 걸린다고하면 사용하지않겠죠?

 

그렇다면 어떻게 이런 데이터를 어떻게 다뤄야 효율적일까요?

바로 관계형 데이터베이스 입니다. 간단하게 엑셀을 생각하면 이해가 좀 쉬워집니다.

행과 열 그리고 VLOOKUP, HLOOKUP함수를 사용하면서 데이터 1개만 바꿔도 모두 전체로 바뀌는것처럼 

바뀝니다 그러나 개발자들은 엑셀에 데이터를 저장하지않고 텍스트파일에 저장하지도 않아요.

 

이 데이터들을 파일로 만들어서~ 저장하고 관리해주는 소프트웨어가 따로 있습니다.

이것이 바로 RDBMS라고 합니다.(들어보았던 MSSQL, MYSQL,MariaDB, Oracle DB등등)

 

 


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

프레임워크 란 사전같은, 패키지 같은것이라고 생각하면 됩니다.

예를들어 APPLE회사에 앱을 만들기위해서 애플에서 프레임워크 사용법을 웹페이지로 제공해주고있고

그 프레임워크를 통해서 코드를 작성해서 쓰면  개발하면 개발시간이 단축이될겁니다.

 

언어 프레임워크
java 스프링(spring)
Python 장고(Django)
Ruby 레일스(Rails)
JavaScript 익스프레스(Express.js)

 

라이브러리, 프레임워크 모두 개발을 도와주는것들이지만

프레임워크>>>>>>라이브러리 입니다.

프레임워크는 많이 큰 덩치이고 그래서 프로젝트에 1개만 사용할 수 있지만

라이브러리는 작은 도구들이라서 프로젝트에 공용으로 사용이가능합니다.

 

예를들어

A프로젝트에 Django + 라이브러리2개 =가능

A프로젝트에 Django,Spring + 라이브러리2개 =불가능

A프로젝트에 Django + 라이브러리1개 =가능

입니다.


 

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

개발을하다보면 갑자기 개발이 필요한 부분이있고 또 갑자기 사용하지않게되는 기능들이있는데

그 부분들을 개발,삭제하고 하다보면 불필요한부분이 없던 환경으로 갈 수 있다고 100% 장담할 수가 없죠?

Git 은 이런 문제를 해결해줍니다. 옛날에 마리오게임할대 중간저장한 기억이 생각나는데 그런 깃발 역할을 해주는것을

커밋(commit)라고 합니다. 커밋에는 항상 메모가 따라다니고 어떤 개발을 했는지 적어주는 메모입니다.

이 메모를 커밋로그 (commit log)라고 합니다.

 

 

Branch(브랜치)와 Merge(머지)

이름 역할
Branch 분가,가지라는 듯으로 새로운 가지를 뻗는것을 의미합니다.

새로운 방향의 개발을 추가해야할 때 개발자는 기존 개발에 이어서 작업하지않고 새롭게 가지를 쳐서 작업할 수 있습니다. 이렇게되면 커밋하는것이 새로운 브랜치에 영향을 주지않습니다.
Merge 각각 브랜치했던 코드를 합치는 기능

원격저장소

하나의 프로젝트를 여러명이서 함께 작업하면 같은 이슈가 발생할 수 있고 개발자들은 깃을 기반으로 한 깃허브, 비트버킷 등의 원격저장소 라는걸 만들었습니다. 개발자들이 자신의 컴퓨터에서 작업을 하한 뒤 커밋하면 그 결과를 원격저장소에 보낼 수 있고 원격저장소에서 이미 작업된 결과물을 가져올 수도 있습니다.

이렇듯 깃을 활용하면 개발을 훨씬 수월하게 할 수 있어서 많은사람들이 사용하고있습니다.

 

개발자전용 구글드라이브라고 생각이 됩니다.

 


부록.

API 분석의 첫 단계는 바로 텍스트와 이미지의 출처를 구분하는 것 입니다.

 

 

웹개발자에는 -> 프론트엔드개발자, 백엔드개발자로 구분

프로트엔드개발자 -> 클라개발자
백엔드갭라자 -> 서버개발자 

 


내 생각

IT가 얼마나 많은 산업군에 녹아들어있고 부피가 커지고있는지 확인할 수 있게 되었고,

앞으로의 IT산업자체가 많이 기대되기도 하면서 사용자로서도 당연하지만 개발자로서도 한 자리에 꼭 있고싶다는 생각을 했습니다. 

 

전체적으로 워드만 알고있었던 들어만봤던 용어들을 정리해주고 비전공자 눈높이에서 알려주는 책이라는 생각이 들었습니다. 특히 JSON 부분을 볼때 문득 든생각이 딕셔너리 라는 클래스였는데 이 부분을 알아보면서 그래도 IT, 개발에 대한 교집합적인 부분이 조금이라도 있는것같아서 뿌듯하기도 했던 독서시간이었습니다.

 

요즘 데이터분석직무가 많이 뜨고있고 많은사람들이 관심을 가져하는걸로 알고있는데

굉장히 꼼꼼해야하고 보수적이여야한다는것도 이 책을 읽고 이해하고 납득했습니다.

 

회사에는 회계, 재무팀이 돈이 1원하나 안 틀리고 하듯이 IT산업군에는 데이터가 그 부분을 차지하는것같다 라는 생각도 들더라구요. 

 

난 아직 시작한지 얼마 되지않아서 모든걸 완벽하게 알 수는없지만 이 책을 읽으면서 큰 가닥들과 세부적인 역할을 학습할 수 있는 책이라고 생각이 들었습니다.

그리고 무엇보다 가장 중요한것은 협업, 커뮤니케이션의 능력이라는 생각이들었습니다.

개발자는 혼자하는 일 일수도있지만 혼자 모든것을 뚝딱 만들어내는 개발자는 없는것같습니다.

협업과 소통을 통해서 최선의 결과물을 만들어낼 수 있도록 언행에도 더 신경을 많이 써야할것같습니다.

 

또한 이 책은 IT비개발자들이 읽어도 업무협업에 도움이 될 것 같습니다.

어떤 개발자가 어떤 일을 하는지 그럼 내가 수정,개발요청해야할 개발자는 어느 개발자를 찾아가야하는지에대한 지도가 되어줄것같습니다.