코딩학원 안가고 ‘혼자 공부하는 얄팍한 코딩 지식’

오늘은 코딩학원에 가지않아도 코딩 지식에 대해 전반적으로 알 수 있는 도서를 리뷰합니다. 혹시 조금 가볍게 쓰여진 책을 보시고 싶으면 이전 리뷰를 참고 해주세요.

리뷰 평점: 4.0 ★★★★☆
난이도: 상 이해도: 상 몰입도: 상
한줄평: 개발자와 소통하며 협업해야 하는 사람에게 좋을 것 같아요!
개발자를 꿈꾸며 차분히 폭넓은 관련 지식을 쌓고자 하는 사람이 읽어보세요~
추천팁: 각 소챕터 마지막에 ‘키워드로 정리하는 핵심 포인트’가 있으니 그걸 먼저 전체적으로 보고 관심이 가거나 모르는 부분은 소챕터의 본문을 보자!
좋은점: 비유를 들어서 쉽게 설명을 해요! 요약하고 재학습을 위한 확인문제가 있어요!
아쉬운점: 책 특성상 방대한 정보제공을 하다보니 산만하게 느껴져요!

이 책은 독자 후기와 저자 인터뷰로 시작합니다. 저자는 이 도서가 비전공자도 읽을 수 있고 전공자도 얻어갈 것이 있는 책이라고 소개합니다. 코딩 및 소프트웨어 개발 관련 지식을 혼자서도 어렵지 않게, 폭넓게 배울 수 있다고 설명하고 있습니다.

여기(한빛미디어, 비전공자도 쉽게 배우는 IT )를 클릭하시면 이 책 관련 강의도 들으실 수 있습니다. 강의 듣기 전에 여기서 먼!저! 한번 전체 그림을 보시구 가시는겁니다~! 그러면 이해가 더 쏙!쏙!

목차를 보면 어질어질 한데요. 그런데 정말 읽다보면 ‘아~ 이런거구나!’ 깨우침이 있는 책인거 같습니다. 끊임없이 떨어지는 물방울에 바위가 패이듯 이 책을 읽으면서 우리의 그것에도 지식을 아로새겨 보실까요?(테리, 너 고급진 단어 썼네.)

개발자 이해하기: 개발과 개발자 용어 알기

첫번째 챕터에서는 개발자는 무슨 일을 하고 개발자의 유형과 개발품?, 개발도구 등이 무엇이지 소개해 줍니다.

개발자는 대체 뭐하는 사람인가요?

개발자는 작가와 같이 무에서 유를 창조합니다. 제 생각에는 완전히 무에서 유를 창조하는건 아닌거 같습니다. 남들이 해놓은 것을 가져다 사용할 수 있기 때문입니다. 그리고 AI서비스를 이용하면 ‘맨땅에 헤딩하기’ 하지 않아도 됩니다.

소설가, 수필가, 시나리오 작가 등 작가도 여러 부류가 있듯이 개발자도 마찬가지입니다. 개발자 유형은 다음과 같습니다.(테리! 마인드맵이야? 너 이것도 가능해?ㅎㅎㅎ)

개발자-developer-mindmap
[ 개발자 분류 마인드맵]

코딩과 프로그래밍, 앱과 프로그램

개발자의 개발은 흔히 프로그래밍 또는 코딩이라고 함. 개발자를 프로그래머라고 부르고, 가끔 코더라고도 함. 코딩이라 함은 소스 코드를 작성하는 작업임.

소스 코드는 컴퓨터에 어떤 명령을 내리기 위해 컴퓨터가 이해할 수 있는 언어로 작성한 정보입니다.

프로그래밍은 코딩보다 넓은 개념. 컴에서 동작하는 프로그램 설계/개발 전 과정임. 알고리즘은 어떤 과정을 몇 번 반복할지, 어떤 순서로 진행할지, 발생할 수 있는 상황은 어떻고 그에 대한 반응은 어떻게 할지 등을 설계하는 것임. 요즘은 ‘스크래치’와 같은 노코딩 툴도 있음. 세부 내용은 위키백과 ‘스크래치‘(프로그래밍 언어) 참조.

SW개발 과정은 다음과 같습니다. [ 고객 요구사항 분석 > 시스템 명세(요구사항 구체화) > SW 구조 설계 > 구현(프로그래밍/코딩) > 테스트(오류점검/코드수정) > 유지보수(버그해결, 업데이트) ]

SW는 프로그램보다 더 넓은 개념으로 데이터, 라이브러리, 프로그램을 아우른다고 보면 됩니다. 이에 비해 프로그램은 실행 ‘순서‘대로 작성한 명령어 모음으로 보면 됩니다.

요즘은 스마트폰을 사용하면서 ‘어플’ 또는 ‘앱’이라는 말을 많이 하는데 이는 애플리케이션을 줄인 말입니다. 프로그램이 시스템/응용 프로그램으로 나뉘는데 후자가 바로 앱입니다. 우리가 PC에서 더블 클릭, 스마트폰에서 터치해서 사용하는 한글, 포토샵 등의 프로그램이 바로 어플리케이션입니다.

프로그래밍 언어도 외국어인가요?

전세계의 프로그래밍 언어가 약 9천여개가 있다고 합니다. 놀랍네요. 하지만 더 놀라운 것은 지금! 여기! 여러분이 그걸 사용해보겠다고 IT Playground에 와 계시다는 겁니다! 언빌리버블.

이 프로그래밍 언어는 컴퓨터가 이해하기 쉬운 언어와 사람이 이해하기 쉬운 언어로 나뉘는데 각각 저수준/고수준 언어라고 말합니다. 컴퓨터가 이해하는 0과 1로 이루어진 언어가 기계어이면 바로 저수준 언어입니다.

또 다른 구분으로 컴파일/인터프리터 언어가 있습니다. 코드 전체를 기계어로 바꿔 실행파일을 만들어 실행하는 것이 컴파일 언어입니다. 반대로 코드소스 한줄한줄 해석 및 실행하는 언어는 인터프리터 언어입니다.

앞서, 언급한 통합개발환경(IDE)는 일명 ‘타이핑 오타’를 자동적으로 잡아주는 등 코드 실행을 편리하게 하고 개발을 빠르게 하도록 도와줍니다.IDE 종류로는 이클립스, 인텔리제이, 파이참, 안드로이드 스튜디오, 엑스코드(애플 맥용 IDE), 비주얼 스튜디오, 비주얼 스튜디오 코드 등이 있습니다.

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

Debug는 벌레를 제거한다는 뜻인데, 과거에 컴퓨터 오작동의 이유를 찾다보니 나방(벌레)가 컴퓨터 연결케이블에 끼어 죽어서 그랬다는 믿거나 말거나 이야기가 있습니다. 벌레를 제거해서 오류를 수정한다는 의미가 오늘날에 디버깅이란 용어로 사용되고 있습니다.

디버그는 주로 오류 수정 프로그램과 그 작업을 통칭하는 단어로 사용되며, 오류를 찾아 제거하는 행동을 디버깅이라고 합니다.

윈도우에서는 exe 파일, 모바일 앱이라면 apk 파일. 느낌이 오시나요? 네, 실행해서 프로그램을 설치하는 하는 파일의 확장자명입니다. 소스 코드등 모든 프로그램 구성요소를 실행할 수 있는 파일로 만드는 과정을 빌드한다고 합니다.

window-spec

윈도우 시작버튼을 누르고 검색 창에서 ‘윈도우 사양’이라고 검색하면 아래의 정보가 나옵니다. 버전이라는 것과 빌드라는게 보이시죠? 프로그램을 몇번 빌드했는지에 따라 OS build 번호가 달라지고, 빌드하면서 고객에게 전달되는 상품의 버전도 달라집니다. SW 개발 중 오류나 기능 테스트를 위한 빌드를 디버그 빌드, 모든 개발이 끝난 후 배포 전 점검을 릴리스 빌드라고 합니다.

이와 달리 기업에서 제품을 내놓을 때마다 버전 번호를 만듭니다. 제품을 출시하고 수정이 불가능한 정식 버전으로 이후 새로운 버전을 만들어서 배포하게 됩니다. 여기서 배포한다는 것은 빵을 만들어서 판매를 위한 쇼윈도에 내어놓는 것을 의미합니다.

제품을 출시하고 난 뒤 지속적으로 유지 보수가 필요합니다. 보안 문제로 기능을 강화하기도 하고 사용자 요구에 따라 새로운 기능이 들어가기도 합니다. SW 경쟁력 강화를 위해서도 유지 보수가 필요합니다.

프로그램 개발 뒤 이어지는 버그 대응 및 기능 업데이트 등의 후속 작업들을 유지 보수라고 합니다.

유지 보수와 함께 리팩토링이란 용어를 듣게 됩니다. 이미 짜놓은 소스 코드를 프로그래밍 언어의 강점을 살리고 효율적인 코드로 만든 작업을 말합니다. 장황하게 짜놓은 코드도 결과를 동일하게 하면서도 간결하게 만들 수 있습니다. 코드 리뷰는 서로의 코드를 확인하고 피드백을 주고받는 과정을 말하며, 문서화는 SW와 그 소스 코드를 쉽게 파악할 수 있도록 문서를 작성해두는 것을 말합니다.

개발자와 소통하기: IT 업계 용어 알기

서버는 뭐고 AWS는 뭔가요?

IT 업계에서 사용하는 용어를 모르면 제대로 커뮤니케이션 하기가 어렵겠죠? 가장 많이 듣는 말 중에 서버라는 용어가 있습니다. 서버(Server)는 정보나 서비를 제공하는 컴퓨터를 말합니다. 이에 반해, 클라이언트(Client)는 서버가 제공하는 것을 받아 사용하는 컴퓨터 입니다.

서버를 한 곳에 모아서 관리하는 곳을 데이터 센터라고 하며, 서버용 컴퓨터를 대여해 주는 서비스를 서버 호스팅이라고 합니다. 온프레미스(Onpremis)는 민감한 정보를 다루는 회사들이 호스팅을 외부에 두지않고 사내 전산실에 서버를 갖추고 관리하는 것을 말합니다. 요즘 많이 들리는 클라우드 서비스는 서버를 가상화하여 각종 편의 기능과 함께 필요한 만큼 사용할 수 있는 서비스입니다.

cloud-service

웹사이트는 어떻게 만들어지나요?

우리들은 웹사이트를 이용하면서 물건을 주문하고 궁금한 것 검색하고 유튜브에서 영상을 찾아봅니다. 사실 웹사이트가 이미 우리 생활의 많은 부분을 차지하고 있습니다. 그런데 그만큼 우리는 그것을 잘 알고 있나요?

아시는 분도 꽤 있으리라 생각하는데, 웹사이트 제작을 위해 필요한 기본적인 언어가 HTML, CSS, 자바스크립트입니다. HTML로 기본 스케치를 하고 CSS로 디자인을 하고 자바스크립트로 웹페이지에 기능을 구현합니다.

웹 브라우저를 이용하다 보면 화면의 크기에 따라 홈페이지 크기가 변화하는 경우를 많이 보는데 이를 반응형 웹(사이트)라고 합니다. 이와 달리, 요즘은 거의 보기 힘들지만 정해진 화면 크기나 기기에 맞게 홈페이지를 따로 제작하는 케이스는 적응형 웹(사이트)라고 부릅니다.

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

웹환경에서 반복적으로 사용되는 데이터나 정보를 재활용하기 위해서 쿠키, 세션, 토큰, 캐시, CDN 등과 같은 여러 방식을 사용합니다.

쿠키는 브라우저에 저장되는 작은 텍스트 조각으로 웹 서핑 내역 등과 같은 정보를 담고 있습니다. 당사자 뿐 아니라 제 3자가 조회 가능하기 때문에 민감한 정보를 저장하는데 적합하지 않습니다.

세션은 서버가 사용자를 기억하고 있는 상태를 말합니다. 유저가 어떤 사이트에 한 번 로그인 후 유효기간이 끝날 때까지 로그인 정보를 다시 입력하지 않도록 유저가 서버의 인증을 이미 받았다는 것을 증명해주는 증명서 같은 것입니다. 로그인 이후 세션 아이디라는 데이터를 만드는데 이를 쿠키로 저장한 뒤 서버로의 모든 요청에 함께 전달합니다. 서버는 서버에 보관된 세션 아이디 중 동일한 정보가 있는지 확인하고 요청에 대한 응답을 합니다.

세션 아이디는 보통 ‘2sd98dbaxiw4’와 같이 알파벳과 숫자가 혼합된 형식을 갖고 있습니다.

토큰은 서버가 기억해 둘 필요없이 사용자가 스스로를 증명할 수 있는 수단입니다. 서버는 클라이언트의 요청마다 함께 날라오는 세션 아이디를 바로 확인할 수 있도록 로그인한 유저의 아이디를 속도가 빠른 메모리에 올려놓고 확인하는데 한정된 공간으로 인해 동시 접속자가 많아지면 부하가 걸려서 문제가 발생할 수 있습니다. 이 대안으로 로그인한 사용자에게 토큰을 발급해주는 것입니다.

토큰에는 특수한 수학적 원리가 적용되어 있어서 마치 위조방지 장치가 있는 지폐처럼 서버만이 유효한 토큰을 발행할 수 있습니다. 토큰을 한번 받아간 사용자가 서버에 접속하면 서버는 자기가 발급한 토큰임을 알아보고 사용자의 각종 요청을 허가해 줍니다. 로그인한 사용자의 정보를 메모리에 올려두고 있을 필요가 없으니 서버 부하를 줄일 수 있습니다.

캐시(cache)는 데이터를 다시 가져오지 않도록 가까이 저장해 두는 기술입니다. 유저가 인터넷 서핑시에 받아온 데이터는 브라우저에 캐시형태로 저장됩니다. 캐시 덕에 같은 사이트를 다시 방문하거나 동영상을 다시 시청할 때 로딩 없이 콘텐츠를 이용할 수 있습니다.

캐시는 인터넷 환경 뿐만 아니라 다양한 곳에서 사용되는 개념입니다. 컴퓨터의 하드웨어 안에서도 메모리 안에 들어 있는 정보를 더 빨리 가져올 수 있도록 하는 CPU 캐시 등이 있습니다.

CDN(Contents Delivery Network)은 각지에 캐시 서버를 두어 부하를 분산시키는 기술입니다. 웹 콘텐츠를 유저와 가까운 서버에서 전송함으로써 전송속도를 높입니다. CDN을 사용하면 본 서버는 캐시 서버에 데이터를 한 번씩만 전송하면 됩니다. 대량 데이터 전송이 필수인 유튜브나 넷플리스와 같은 동영상 서비스에 CDN은 필수입니다.

서버가 데이터를 전 세계 각지에 세워진 캐시 저장 및 전달용 컴퓨터(CDN 업체 소유)들에 보내면 사용자는 본 서버가 아닌 본인에게서 가장 가까운 캐시 서버로 요청을 보내고 데이터를 받아오는 것입니다.

스마트폰 앱인데 웹사이트라고요?

네이티브 앱은 기기에 작동하는 운영체제에 특화된 방식으로 제작된 앱입니다. 스마트폰 앱은 안드로이드와 iOS 버전으로 개발되는데 각 운영체제에 맞는 앱를 개발하는 방법을 네이티브 앱 개발이라고 합니다. 안드로이드 앱은 예전에는 자바와 이클립스를 사용해서 만들었고, 요즘에는 코틀린 언어도 많이 사용하고 안드로이드 스튜디오가 정식 도구로 자리 잡았습니다. iOS 앱은 스위프트 언어에 엑스코드라는 도구를 사용해서 개발합니다.

크로스 플랫폼은 하나의 소스 코드로 여러 개의 운영체제에서 작동할 수 있는 프로그램을 만드는 방식입니다. 같은 소스 코드로 안드로이드와 iOS 버전에서 모두 작동할 수 있는 앱을 개발하는 도구입니다. 구글의 플러터(다트 언어), 페이스북의 리액트 네이티브(자바스크립트), MS의 닷넷 마우이(구 자마린, C#)이 있습니다. 에어비앤비, 페이스북, 인스타그램 등이 크로스 플랫폼 앱입니다.

웹 앱은 모바일 기기의 브라우저에서 접속할 수 있는 모바일 웹사이트로, 모바일 앱과 비슷한 UI/UX를 제공합니다.  애플의 사파리로 접속한 구글 웹페이지와 구글의 크롬으로 접속한 구글 웹페이지를 비교해보면 다음과 같습니다.(웹 앱은 정확히는 애플리케이션이 아닌 웹사이트입니다.)

google-webpage
사파리(좌)와 크롬(우) 브라우저 화면

하이브리드 앱은 네이티브 앱 안에 웹뷰로 웹사이트를 실행해서 네이티브 앱과 웹 앱의 장점을 취할 수 있는 앱입니다. 웹 앱으로 접속한 Daum과 앱으로 접속한 화면은 대부분 비슷하지만 음성검색 등과 같은 추가기능에서 차이가 있습니다. 웹 앱과 네이티브 앱의 기능을 합쳐놓은 것이라고 생각하면 됩니다.(예전과 달리 지금은 비슷해진거 같습니다.) 장점으로는 앱 기능 업데이트를 제외하고 앱 마켓의 심사없이 언제든지 앱 내용을 수정할 수 있는 것입니다.

daum-webpage
다음앱(좌)과 웹앱(우) 접속 화

PWA(Progressive Web Apps)는 아이콘 추가 등 진보된 브라우저 기능을 활용해서 네이티브 앱 같은 다양한 편의 기능을 제공하는 웹 앱입니다. 기본적으로는 앱이 아닌 모바일 웹사이트입니다. 웹 앱이지만 스마트폰과 PC 바탕 화면에 아이콘 설치나 푸시 알림 등 기존의 웹 앱이 갖추지 못했던 접근성과 편의성을 제공합니다.

웹의 보이는 곳과 보이지 않는 곳

프론트엔드는 웹사이트의 구성 요소 중 클라이언트 컴퓨터의 브라우저에서 작동하는 부분입니다. 이에 반해, 백엔드는 웹사이트나 모바일 앱과 같은 온라인 애플리케이션의 구성 요소 중 서버에서 작동하는 부분입니다. 프론트 엔드는 사용자가 직접 보는 부분이고 백엔드는 그러지 못한 부분입니다. 브라우저가 수행하는 프론트엔드 부분을 제외한 웹사이트의 모든 기능은 바로 서버 단계인 백엔드에서 이뤄집니다. 백엔드에서 발급한 세션 아이디를 프론트엔드에서 요청마다 함께 전송하고, 백엔드에서는 세션을 확인해서 사용자의 로그인 여부를 식별하고 접근을 허가합니다.

프론트엔드 개발은 브라우저에서 동작할 수 있는 언어인 자바스크립트 중심으로 이뤄지지만, 백엔드는 서버에서 돌아가는 프로그램을 만드는 것이므로 자바, 파이썬, 루비 등 사용할 수 있는 언어가 훨씬 다양합니다.

프레임워크는 프로그램의 기본 골격이 갖춰져 있어 개발자가 원하는 제품을 수월하 게 만들 수 있도록 출시된 개발 키트입니다. 자장면을 만든다고 하면 밀과 야채 등을 재배하고 콩을 발효해서 춘장을 만들고 밀을 갈아서 반죽하여 면을 만들고 돼지를 키워서 도축해야 합니다. 그런데 이런 식재료를 마트에서 구매할 수 있고 밀키트의 경우 면과 소스만 데우면 바로 자장면이 되는 형태입니다. 프로그래밍에서 식재료는 라이브러리, 밀키트는 프레임워크라고 할 수 있습니다. 국내에서 자바 언어로 만들어진 스프링 프레임워크를 많이 사용하고 있습니다. (PHP-라라벨, 파이썬-장고/플라스크, 자바스크립트-익스프레스, C#-닷넷) 앞서 말한 백엔드 개발 언어와 툴도 있지만, 요즘은 앵귤러, 뷰, 리액트 등 프론트엔드도 프레임워크로 개발하고 있습니다.(언어는 자바스크립트 혹은 타입스크립트)

API(Application Programming Interface)는 여러 소프트웨어의 특정 기능들을 요청하고 호출하기 위한 약속입니다. 투수와 포수 간의 사인을 통해 원하는 경기를 만들어 가는데, 프론트엔드와 백엔드 둘 사이에 약속된 신호가 바로 API입니다. API는 공공 데이터 포털처럼 한 주체가 다수의 다른 주체에게 특정 기능을 개방할 때도 사용됩니다.

API란 소프트웨어에서 프로그램들 간의 소통을 위해 만들어진 신호체계이다.

XMLJSON은 데이터를 저장하고 전달할 목적으로 구성된 표기 형식을 말합니다. 컴퓨터끼리 주고받는 정보는 한 줄로 이어진 텍스트로 작성되는데, 그 정보가 복잡한 계층과 구조를 가졌을 때는 이 텍스트를 어떻게 쓰고 읽을 것인지에 대한 정해진 형식이 있어야 합니다. XML의 약점을 보완한 것이 제이슨(JSON)으로 구문이 간단하고 높은 가독성을 가지고 있습니다. 물론 제이슨도 주석을 달 수 없는 것부터 문법 오류에 취약한 약점이 있습니다.

HTML은 웹 페이지 구조를 개발하는 데 사용하는 반면, XML은 플랫폼 간 데이터를 주고받는데 사용하는 언어입니다.

YAML은 사람이 이해하기 쉬운 형태로 구성된 표기 형식입니다. 프로그램간 정보 전달의 목적을 가진 XML과 JSON 파일과 달리, 주로 프로그램 설정 파일과 같이 개발자가 편리하게 읽고 작성하기 위한 용도로 사용됩니다.

AJAX는 정확히 형식은 아니지만 자바스크립트를 이용해 서버와 브라우저가 데이터를 교환할 수 있는 통신 기능을 합니다. 웹사이트에 필요한 정보만 서버로부터 받아와 부분적으로 업데이트할 수 있도록 해줍니다. Asynchronous Javascript And Xml의 약자로 자바스크립트를 통해 서버에 데이터를 비동기 방식으로 요청하는 것을 의미합니다.

비동기 방식은 웹페이지를 리로드하지 않고 데이터를 불러오는 방식으로, 쉽게 말해 서버에 데이터를 요청한 다음 멈춰 있는 것이 아니라 요청한 상태와 별개로 프로그램이 계속 돌아간다는 의미입니다.

IP는 뭐고 HTTPS은 뭐죠?

 우리는 브라우저 주소창에 gov.kr을 입력하여 정부24 홈페이지에 접속합니다. 브라우저가 입력한 주소 텍스트를 사용해서 해당 홈페이지의 서버를 찾아내고 그 서버에게 데이터를 요청해서 회신받기 때문입니다. 브라우저는 어떻게 그 서버를 찾아내는 걸까요?

IP(Internet Protocol)는 데이터 통신 규약이며, IP 주소는 PC나 스마트폰 같은 기기의 네트워크 주소입니다. 정확히는 기기 자체의 주소가 아니라 기기와 연결된 네트워크 끝 단의 주소입니다. 123.123.123.123 과같이 0부터 255까지의 숫자가 네 마디로 구분되는 방식(IPv4)입니다. 약 42억 개의 주소를 표현할 수 있는데, 요즘은 그게 부족해서 IPv6 방식의 주소를 사용합니다. 16진수(0~F) 4자리 숫자 8개로 표현하는데 이렇게 하면 거의 무한 개의 주소를 사용할 수 있습니다. 이제 컴퓨터나 스마트폰 뿐만 아니라 냉장고, 세탁기 등 일반 가전제품에도 IP주소를 부여할 수 있습니다.

IP주소가 영구적으로 변경되지 않는 주소를 고정IP주소라고 하고, 그와 달리 그때 그때 기기에 할당하는 경우는 유동IP주소라고 합니다. 정기적으로 변동되기 때문에 고정보다 보안 측면에서 유동이 유리합니다. 클라이언트 용도로는 유동이 적합하지만, 기업이나 기관에서 서버를 운영할 때는 고정 IP를 사용합니다.

도메인은 사람이 기억하기 쉽도록 문자로 만들어 특정 IP에 연결한 인터넷 주소입니다. 12자리의 IP주소를 브라우저 접속창에 입력하는 대신 도메인을 사용하면 기억하기도 쉽고 편리합니다. 이 도메인은 도메인 등록 대행업체를 통해 구입할 수 있습니다. 이 도메인에 해당하는 IP 주소로 변환해서 경로를 안내해주는 역할을 하는 것이 DNS입니다.

DNS(Domain Name System)는 IP 주소와 이에 해당하는 도메인의 IP 정보를 갱신하며, 특정 도메인에 대한 요청이 들어오면 IP 주소를 찾아 알려주는 시스템입니다. 사용자가 주소창에 naver.com 이라고 입력하여 DNS 서버에 IP주소를 요청하면 해당 도메인에 맞는 주소가 회신되고, 브라우저는 최종적으로 그 IP주소의 웹 서버에 연결합니다.

우리가 주소창에 네이버닷컴을 입력하여 네이버에 접속후 주소창을 보면 https://www.naver.com으로 표시되는 걸 알 수 있습니다. 이를 URL이라고 하는데, https는 통신규약을 말하며, www은 호스트명이며, 그 뒤 주소가 바로 도메인입니다. 월드 와이드 웹의 약자인 WWW(W3)는 전 세계의 사람들이 정보를 공유하고 소통할 수 있는 인터넷 공간을 뜻합니다. http는 컴퓨터가 어떤 종류의 소통을 할지 지정하는 것으로, 클라이언트의 요청과 서버의 응답으로 구성된 방식입니다. https는 암호화되지 않은 상태로 정보를 주고 받는 http 방식과 달리 보안(Secure) 기능을 더한 프로토콜입니다. 도메인 소유주는 CA라고 불리는 인증기관 중 하나로부터 유료/무료로 인증서를 발급받고 브라우저의 특정한 장치가 이 인증서의 유효성 여부를 판단하게 됩니다. 클라이언트와 서버는 상호 약속된 방식을 통해 주고받은 내용을 암호화하고 해독하게 됩니다.

편지봉투에 등기, 독촉 등의 도장을 찍어서 대략적으로 어떤 편지인지 가늠이 갑니다. HTTP 통신에서 클라이언트와 서버는 각각 보내는 편지와 답장의 봉투에 메소드와 응답 코드라는 도장을 찍어 보냅니다. 클라이언트가 서버에 원하는 것이 무엇인지 짐작하게 하는 것이 메소드입니다.

메소드에는 GET(서버에 문서, 이미지 등 각종 데이터 요청), POST(서버에 저장될 자료 송부, 게시판 등에 새 게시물 작성시 사용), PUT(특정 데이터 전체 새로 저장, 게시물 수정시 사용), PATCH(특정데이터 일부 수정, 조회수나 좋아요 수 올릴 때 사용), DELETE(특정 데이터 삭제), OPTIONS(어떤 메소드를 허용하는지 질문시 사용) 등이 있습니다.

서버는 세 자리 숫자 형식으로 응답 코드를 반환합니다. 100자리(요청을 성공적으로 수신, 서버가 해당 작업 진행 중), 200자리(요청을 성공적으로 수신, 요청이 이루어짐), 300자리(요청을 다른 주소로 보내는 등 추가조치 필요), 400자리(클라이언트 요청에 문제 발생으로 수행할 수 없음, 404 – 요청에 해당하는 데이터가 없음 또는 잘못된 URL 시), 500자리(요청에는 문제 없으나 서버 이상으로 응답 불가능, 502-서버 과부하 등 통신 불량 시)

디지털 시대, 데이터와 데이터베이스의 이해

데이터는 의미 없이 수집된 자료를 뜻하며, 정보는 데이터가 모여서 어떤 의도나 목적에 따라 분석되어 의미가 생긴 자료입니다. 한 학급의 시험 성적은 데이터입니다. 이 데이터를 기반으로 통계를 내고 현황을 분석해서 정보를 얻을 수 있습니다. 단적인 예로, 이 학급의 영어 평균 성적은 80점이다 와 같은 겁니다.

데이터베이스는 전산상에 저장된 구조화된 데이터 집합입니다. 소프트웨어를 통해 통해 데이터를 저장하고 읽고 수정하거나 삭제할 수 있는 형태의 데이터 집합을 의미합니다. 데이터베이스는 독립된 소프트웨어로 구축되어 여러 애플리케이션에서 활용할 수 있습니다.

DBMS는 데이터베이스를 구축하고 관리하는 프로그램입니다. 행과 열로 구분되어 데이터를 저장하는 엑셀은 일반인이 사용하기 충분한 기능을 제공합니다. 다양한 형태의 데이터가 저장되어 많은 사람에게 서비를 제공할 경우 보다 강력한 기능을 가진 전문적인 프로그램이 필요한데 그것이 데이터베이스 관리 시스템(DataBase Management System) 입니다. 특정 데이터 저장/조회/삭제/수정이 가능하고 데이터 중복 및 오류 상태에서의 저장을 방지하고 권한 부여기능으로 보안을 유지할 수 있습니다. 넓은 의미에서 오라클, MySQL, MongoDB 등이 DBMS에 속합니다.

RDBMS는 관계형(Relational) 데이터베이스라고 하며, 컬럼(열) 간에 관계를 가질 수 있는 표 형태로 데이터를 저장하는 모델의 DBMS입니다. 가장 오래된 형태의 데이터베이스임에도 오늘날까지도 주류로 자리잡고 있습니다. 다음 그림과 같이 RDBMS가 상위권을 차지하고 있습니다.

db-engines-ranking
자료 출처: db-engines.com

SQL(Structured Query Language)은 관계형 데이터베이스에 작업을 지시하기 위해 사용되는 언어입니다. 다음은 학생 테이블에서 남학생의 생일을 조회하는 명령 예시문입니다.

SELECT Name, Birthday FROM Students WHERE Sex = '남';

NoSQL은 관계형을 제외한 모델을 사용하는 DBMS를 가리키는 용어입니다. RDBMS의 점유율이 압도적이다 보니 그에 해당하지 않는다는 의미의 NoSQL이라는 카테고리로 묶어둔 겁니다. 관계형 방식이 효율적인 운영에 적합하지 않은 경우 등에 이 방을 사용합니다. 문서 데이터베이스(MongoDB, CouchDB 등), 키-값 데이터베이스(레디스, 아마존 다이나모 DB 등), 그래프 데이터베이스(Neo4j, JanusGraph 등)의 종류가 있습니다.

개발자들은 왜 리눅스를 그렇게 좋아하나요?

운영체제는 사람이 컴퓨터를 쉽게 사용할 수 있도록 해 주는 시스템 소프트웨어입니다. PC용으로 널리 사용되는 운영체제로 윈도우, 맥OS, 리눅스가 있습니다. 백엔드 서버를 비롯해서 개발자가 개발하는 많은 프로그램이 리눅스 라는 운영체제 위에서 작동합니다.

운영체제는 유저가 컴퓨터에 명령을 하고 여러 프로그램을 실행할 수 있는 인터페이스를 제공하는데, 크게 GUI와 CLI 2개의 종류로 나뉩니다. GUI(Graphic User Interface)는 그래픽 요소를 사용해서 직관적이고 편리하게 구성한 인터페이스입니다. 아이콘, 버튼, 탐색기 등 직관적인 그림요소로 구성됩니다. 반면, GUI가 등장하기 전에 명령줄에 텍스트를 입력해서 컴퓨터를 일시키는 환경을 CLI(Command Line Interpreter)라고 합니다. CLI 환경이 컴퓨터 자원을 덜 소모하고 간편하고 정확하기 때문에 개발자들은 이 방식을 많이 사용합니다.

Mac-terminal
MacOS 터미널
window-terminal
윈도우 터미널

커널(Kernel)은 운영체제의 핵심 기능을 담당하는 핵심 요소입니다. 하드웨어와 응용 프로그램 사이에서 동작하면서 컴퓨터 내에서 발생하는 모든 일을 컨트럴 합니다. 메모리 할당, CPU 점유 등 지속적으로 추적하며 컴퓨터의 안정적 작동을 관리하는 역할을 합니다. 커널 위에 사용자 인터페이스가 배치되어 화면을 보여주고 명령을 반환하는 동작을 수행합니다.

리눅스의 특징인 오픈 소스는 누구나 소스 코드를 볼 수 있고 개발에 참여할 수 있는 소프트웨어입니다. 영리 목적의 판매 소프트웨어가 아니다 보니 설명서, 유지 보수 등에서 미흡한 점이 많습니다.

오픈 소스 소프트웨어는 GQL이라는 라이선스에 따라 유료 버전을 파생해서 판매할 수도 있습니다. 소프트웨어는 무료로 다운로드할 수 있도록 하되, 기술 지원을 유료로 제공하는 제품도 있고, 후원으로 수식을 내는 오픈 소스 프로젝트도 있습니다. 완전히 무료로 사용할 수 있는 프로그램은 프리웨어라는 소프트웨어입니다. 오픈 소스와 프리웨어는 전혀 다른 개념입니다.

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

컴퓨터는 어떻게 일하나요?

개발자는 결국 컴퓨터에 일을 시키는 사람입니다. 소스 코드 작성을 통해 작업을 어떤 식으로 할지를 알려주는거죠. 컴퓨터가 어떻게 구성되고 무슨 작업을 하는지 아는 것이 개발자에게 필요합니다.

CPU(Central Processing Unit)는 컴퓨터를 통제하고 주어진 작업을 수행하는 장치입니다. 컴퓨터에 저장된 프로그램을 불러와서 기계어로 작성된 명령문을 해석하고 실행합니다. 키보드나 마우스로 입력을 하면 CPU에서 작업을 수행한 뒤 화면이나 사운드 등으로 결과를 출력합니다.

cpu-ing
CPU (출처: 픽사베이)

CPU에서 코어는 핵심부품으로 속도를 높이다 보면 발열 등 물리적 문제가 발생하는데, 이를 극복하기 위해 여러 개의 코어(멀티코어)를 탑재하여 작업을 분담해서 처리하도록 하고 있습니다. 이런 상황을 고려해서 프로그래밍을 해야 멀티코어의 기능을 십분 활용할 수 있습니다. 스레드는 하나의 코어로 2개의 코어가 작업하는 것처럼 효율적으로 일할 수 있도록 하는 기술을 말합니다. 클럭은 코어의 속도를 말하는데 GHz(기가헤르츠)의 단위로 표시합니다. 이런 코어와 스레드의 개수, 클럭이 컴퓨터의 전반적인 속도를 결정합니다.

메모리는 컴퓨터의 작업에 사용되는 데이터를 일시적 또는 영구적으로 저장하는 장치입니다. 주기억장치와 보조 기억 장치로 나뉘는데, 흔히 말하는 램(RAM, Random Access Memory)이 주 기억 장치, 하드 디스크나 SSD 은 보조 기억 장치입니다. CPU에 내장된 기억 장치는 캐시라고 하는데, 이 중에서 가장 속도가 빠르고 그 뒤를 주기억, 보조 기억 장치 순서의 속도로 동작합니다.

memory-ing
RAM (출처:픽사베이)
hdd-img
HDD (출처:픽사베이)

입출력 장치(I/O)는 컴퓨터에 신호와 정보를 보내는 입력 장치와 컴퓨터의 연산을 결과로 내보내는 출력 장치를 말합니다. 주요 입력 장치는 키보드, 마우스, 스캐너 등이 있습니다. 이와 달리 출력 장치로는 모니터 스피커, 프린터 등이 있습니다.

프로세스는 프로그램이 메모리에 올려져 CPU에 의해 실행되는 상태를 지칭하며, 스레드는 하나의 프로세스 안에서 돌아가는 한 개 이상의 작업 단위를 말합니다. 우리가 PC로 음악을 들으면서 워드 작업을 할 수 있도록 멀티태스킹 기능을 할 수 있게 해줍니다. 여러 개의 프로세스를 동시에 진행하는 것을 멀티 프로세싱이라고 합니다. 각각의 코어가 각기 다른 프로세스의 명령을 실행하는 병렬 처리 방법과 하나의 코어가 여러 프로세스를 돌아가면서 조금씩 처리하는 병행 처리 방법이 있습니다. 스레드 역시 프로세스와 같이 여러 개의 작업이 병행 처리되며 이를 멀티 스레딩이라고 합니다.

프로세스와 스레드의 차이

메인 메모리를 어떻게 함께 사용하는가에 따라 이 둘의 차이가 있습니다. 동시 진행 프로세스가 늘어나면 메인 메모리는 그 배수만큼 필요한데 그 이유는 각 프로세스의 공간을 구분하는데 기인합니다. 반면, 스레드는 서로의 공간을 구분하지 않고 사용해서 스레드가 많아져도 메모리를 추가로 차지하지 않습니다. 다만, 같은 메모리 공간을 여러 스레드가 사용하기 때문에 그 과정상 발생 가능한 오류를 대비해서 개발해야 합니다.


바이트는 뭐고 자료형은 왜 쓰나요?

비트는 0과 1 두 값을 가지는 것(2진 숫자, binary digit)으로 컴퓨터가 다루는 데이터의 최소 단위입니다. 이진법을 사용하는 이유는 0(off)과 1(on)의 전기신호로 작동하기 때문입니다. 32비트나 64비트라는 것은 데이터를 몇 자리의 이진수로 표기할 것인가를 말하는 것입니다. 로그인 유지 상태를 생각해보면, 유지함(1)과 유지하지않음(0)만 필요하기 때문에 이 데이터 저장을 위해서 1bit면 충분합니다. 일곱 가지수를 가지는 요일을 생각해보면 3비트(2^3=8개)면 표현할 수 있습니다. 1바이트는 8비트, 즉 2의 8승으로 0에서 255까지 총 256가지의 값을 가질 수 있습니다.

자료형은 프로그래밍 언어에서 여러 종류의 데이터를 저장하는 방식입니다. 프로그래밍 언어에 따라 자료형이 약간의 차이가 있지만 큰 틀에서는 아래와 같이 유사합니다.

자료형비트바이트설명
byte81-2^7 ~ 2^7-1 사이의 정수(-128 ~ 127)
short162-2^15 ~ 2^15-1 사이의 정수(-32,768 ~ 32,767)
int324-2^31 ~ 2^31-1 사이의 정수
long648-2^63 ~ 2^63-1 사이의 정수
float324소수점 6~7자리까지 정확도를 갖는 실수
double648소수점 15자리까지 정확도를 갖는 실수
boolean11True, False(참 또는 거짓)
char162유니코드 문자 데이

문자 인코딩은 사람이 사용하는 문자를 컴퓨터가 인지 가능한 숫자로 바꾸는 것입니다. 0과 1 이진숫자로 컴퓨터는 작동하는데 이를 문자로 표현하려면 문자-숫자 간 약속이 있어야 합니다. A는 65, a는 97 등과 같이 유저가 입력한 문자나 기호들을 컴퓨터가 이용할 수 있는 숫자로 만든 것을 문자열 셋이라고 합니다. 앞서 언급한 문자-숫자는 ‘아스키 코드’라고 불리는 문자열 셋의 일부입니다.

아스키 코드(ASCII code)는 1963년 미국에서 만든 것으로 0~127까지의 7비트 공간 안에 대/소문자 알파벳, 각종 부호 값들이 지정되어 있습니다. 영어권 국가에서 사용하기는 문제없으나 그외 다른 언어 사용국가에서 문제가 있어서 자국 언어용 문자열 셋과 문자 인코딩 방식을 만들게 됩니다. 한국의 경우 EUC-KR이나 UTF-8과 같은 인코딩 방식을 사용하고 있습니다. 각자 중구난방으로 하다보니 글자가 깨져버린 일이 발생했고, 이를 위해 전 세계에서 사용되는 대부분의 문자를 포함한 문자열 셋인 유니코드(Unicode)가 만들어졌고 다른 문자로 인한 호환성 문제에서 벗어날 수 있었습니다.


프로그래밍 언어의 분류

프로그래밍 언어는 컴파일 언어(배포되기 전 다른 형태로 변환)와 인터프리터 언어(작성된 그대로 실행)로 나뉘어집니다. 소스 코드를 컴파일 한다는 것은 코드 실행 전 기계어나 다른 코드로 먼저 ‘번역’하는 것입니다.

프로그래밍의 흐름 차이에 따라 절차지향객체지향 프로그래밍으로 구분이 됩니다. 전자(예. C언어)는 컴파일 시에 소스 코드를 위에서부터 차례대로 읽는 방법입니다 .실행속도가 빠르다는 장점이 있는 반면, 유기적으로 연결된 구성 요소에 사소한 문제 발생시 프로그램 전체가 돌아가지 않고, 소스코드가 바뀌면 결과가 달라질 수 있는 단점이 있습니다. 후자(예. 자바)는 코드 작성시 구성요소를 객체라는 단위로 묶어서 객체들의 조합으로 프로그램을 만듭니다. 유지 보수가 쉽고 생산성이 좋은 장점이 있는 반면, 속도가 전자보다 느리고 대체로 난이도가 높은 언어이고 설계에 많은 시간이 걸린다는 단점이 있습니다.

객체란 프로그램에서 어떤 역할을 수행하는 요소를 데이터와 기능으로 묶은 단위입니다.

프로그램을 실행하기 위해 메모리에 프로세스가 할당되어야 하는데, 프로그래밍 언어가 메모리를 직접 관리하면 매니지드 언어(예. 자바, 파이썬 등), 개발자가 직접 관리하면 언매니지드 언어(예. C, C++, 어셈블리어 등)라고 말합니다.

일반적인 컴파일은 소스 코드가 컴파일러를 통해 기계어로 번역이 됩니다. 그러나 자바의 경우 소스코드(파일명: .java)를 자바 컴파일러로 번역하면 JVM(Java Virtual Machine)이 이해할 수 있는 자바 바이트코드(.class)가 생성됩니다. 그리고 JVM이 각각의 운영체제가 이해할 수 있는 형식으로 바꿔주는 역할을 해주기 때문에 어떤 종류의 컴퓨터에서도 자바 소스 코드를 실행할 수 있습니다.

오류라는 위험에 대비하기

컴파일 오류는 소스 코드를 컴파일하는 과정에서 일어나는 오류이며, 배포되기 전에 발견할 수 있는 오류이고 대개 IDE에서 다 잡아주기 때문에 상대하기 편한 오류입니다. 런타임 오류는 프로그램 실행 도중, 런타임에 발생하는 오류를 말합니다. 논리적 결함이나 예상치 못한 돌발 변수에 의해 발생하기 때문에 컴파일 오류에 비해 그 원인을 파악하기가 까다롭습니다.

프로그래밍 언어의 사용법에 맞지 않는 코드로 인해 발생하는 오류를 구문 오류(또는 신택스 오류)라고 합니다.

error-vs-bug

논리 오류는 컴파일과 실행 모두 성공하지만 실행 결과가 올바르지 않은 오류입니다. 이론 인한 문제는 바로 눈에 띄지 않기 때문에 가장 경계해야 할 오류입니다. 이런 문제는 프로그램 판매 후 고객으로부터 손해 배상을 청구 받을 수도 있는 이슈이기 때문에 항상 설계의도에 맞게 결과를 내는지 주의 깊게 확인해야 합니다.

예외 처리는 오류 발생 시에도 프로세스를 지속시킬 수 있는 수단입니다. 네트워크 상태, 타프로그램과의 상호작용 등 다양한 상황이 변수로 작용하여 오류로 나타날 수 있는데, 이런 상황에서 프로그램 종료나 리셋을 하지 않는 방법입니다. 자바 코드의 경우 try-catch, 파이썬의 경우 try-except, 루비의 경우 begin-rescue란 구문을 사용하여 예외 처리를 합니다.

메모리 누수는 사용하지 않는 데이터가 비워지지 않고 메인 메모리 공간에 쌓여있는 현상입니다. 프로그램이 일하기 위해 필요한 데이터를 메모리에 올려놓는데 한정된 공간이다 보니 그때그때 다 쓴 데이터를 없애줘야 합니다. 그런데 이게 제대로 작동하지 않아 그 공간에 불필요한 데이터가 쌓여서 남아있으면 더 이상 프로세스가 진행되지 않고 작업을 중지해버립니다. 언매니지드 언어는 이런 작업을 개발자가 직접 처리해 하다보니 이 언어로 프로그래밍은 세심함이 필요하고 어렵습니다.

메모리 누수를 방지하기 위해 자바나 파이썬에는 자동으로 메모리 관리 기능이 있습니다. 이를 쓰레기 수집 또는 가비지 컬렉션이라고 합니다. 가비지 컬렉션은 메인 메모리상 불필요한 데이터를 자동으로 치우는 기능입니다. 불필요한 데이터를 모두 제거하지 못한다거나 그런 데이터를 판단하는데 소요되는 시간이 소비된다는 점 등에서 약점이 있기도 합니다.


개발에 필요한 여러가지 도구(코딩학원 안가도 되겠네~)

최근에는 개발자가 프로그래밍에 전념하도록 도와주는 툴이 많습니다. 그에 대한 정확한 이해가 있어야 적절하고 효과적으로 활용할 수 있습니다. 프로그래밍 중 수없이 많은 외부 라이브러리를 가져옵니다. 그 많은 라이브러리를 그 때 그 때 가져오고 기억해서 다시 찾기를 반복한다면 힘들겠죠? 하지만 패키지 매니저가 이것을 도와줍니다.

package-manager
운영체제/프로그램밍언어 패키지 매니저

패키지 매니저는 라이브러리의 설치, 업데이트, 삭제 등을 수행하는 관리 소프트웨어 도구입니다. 파이썬에서는 pip를 이용하는데, Numpy 라이브러리 사용하는 예시는 아래와 같습니다.(콘솔에 pip install numpy 입력)

pip-install-numpy
Numpy 라이브러리 설치

패키지는 라이브러리와 유사한 개념으로, 라이브러리소스 코드 작성을 위해 사용되는 코드의 묶음이라면 패키지는 이런 소스 코드를 배포하기 위해 사용되는 코드 묶음입니다.


윈도우나 리눅스 같은 OS의 환경 변수는 응용 프로그램을 쉽게 쓰기 위해서 응용 프로그램의 경로를 미리 변수에 등록해 놓는 것입니다. 컴퓨터가 응용 프로그램이 어디에 설치되어 있는 알려주는 겁니다. 환경 변수는 프로그램이 작동할 환경에 지정된 변경 가능한 값입니다. 아래는 자바 언어의 환경 변수 설정 화면입니다.

system-variable
[자바 언어 환경 변수 설정]

런타임 환경은 ‘런타임 시스템’이라 불리기도 하는데, 어떤 프로그래밍 언어가 컴퓨터에서 일을 할 수 있도록 해주는 요소를 말합니다. 예를 들면, JRE는 자바 런타임 환경의 약자인데 자바 언어에서 JRE는 자바 소소 코드를 컴파일하여 생성된 ‘자바 바이트코드’를 실행할 수 있도록 해 줍니다.


프로그래밍 언어나 OS를 만든 회사는 그 언어로 개발된, 혹은 그 OS에서 작동하는 프로그램을 개발자들이 많이 만들어 주길 바랍니다. 이를 위해서 이런 회사들은 개발자들이 프로그램을 수월하게 개발할 수 있도록 SDK라는 것을 제공합니다. SDK(Software Development Kit)는 특정 언어나 환경의 소프트웨어를 개발할 수 있도록 제공되는 키트를 말합니다. 라이브러리, 런타임 환경, 편집 도구 등이 포함되어 있습니다.


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

개발자의 코드 관리와 협업 방법을 알아보기 위해 깃(git)에 대해 알아보겠습니다. 소프트웨어 개발시에 이런 저런 이유로 프로젝트를 이전 버전으로 되돌려야 하는 일이 발생하는데 이를 위해 VCS가 필요합니다. VCS(version control system)는 프로젝트의 변경내역을 관리하는 시스템으로, 소프트웨어를 개발할 때 일정 시점과 단위로 프로젝트를 관리하는 역할을 합니다. 또한, 소스 코드 백업과 복구를 쉽게 도와주고 다른 업무자들과 협업을 용이하게 도와줍니다.


SVN(SubVersioN), CVS(Concurrent Versions System), Mercurial 등 다양한 버전 관리 소프트웨어가 있지만 그 중 가장 널리 이용되는 것은 깃(git, https://git-scm.com/)입니다. 컴퓨터 OS인 리눅스의 창시자 리누스 토발즈가 개발한 VCS입니다.

git-homepage
[ git homepage ]

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

프로젝트 작업 상태에 따라 커밋을 통해 5개의 버전이 순차적으로 커밋되었다고 가정하겠습니다. 3번째 버전으로 되돌려야 할 때 4/5번째 버전은 없던 것처럼 리셋(reset)할 수 있습니다. 또한, 그대로 하되 3번째 버전에서 그래픽을 변경할 일이 있을 때 5번째 버전 다음에 3번째 버전을 가져와서 그 작업을 할 수 있습니다.(리버트, revert) 깃에는 브랜치, 머지 등 기능들이 많은데 이 부분은 새로운 책(링크 예정)에서 다루도록 하겠습니다.


여러 사람이 프로젝트를 함께 하기 위해 온라인 협업 공간을 제공하는 서비스를 깃 호스팅 서비스라고 합니다. 각자가 작업한 버전으로 업로드 하는 것을 푸시(push)라고 하고, 다른 동료들이 작업한 버전을 통합된 최신 버전으로 다운로드하는 것을 (pull)한다고 합니다. 깃랩, 빅버킷 등의 서비스가 있는데 요즘 가장 널리 사용되는 것은 깃허브(github, https://github.com/)입니다. 이것도 별도의 포스트(링크 예정)에서 다루도록 하겠습니다.

github-homepage
[ github homepage ]

300페이지가 넘는 방대한 내용을 담고 있는 책이었습니다. 테리 생각에는 하루에 한두페이지씩 읽는다고 생각하고 하면 좋을 책입니다. 그러다 어느새 끝에 다다르면 뭔가 뿌듯함을 느낄 수 있을 겁니다. 오늘도 길고 긴 글을 읽으시느라고 고생 많으셨습니다.

이상, 인생 부캐 만들기, 도우미 테리였습니다.

감사합니다.

유사한 게시물