full stack mysql, node js express,react

JS FULL STACK 8장 , 도커

우주전사버즈 2024. 1. 18. 16:44

왜 공부함? 

현재 Todo웹앱을 만들기 위한 목적으로 DB를 MYSQL(RDBMS)로 RDB를 구축하고 ,node.js 개발환경 웹프레임워크 express로 API를 개발하였다. 
최종 목적으로는 프론트엔드(html,css,javascript)를 통해 화면을 만들것이고 express로 만들어둔 API를 이용하게될것이고

화면을 브라우저에서 사이트로 이용할수 있도록  

웹 서버에 올리는것이 최종 목표이다. 

지금까지 과정에서 이해할수 있었던것

이전까지 프론트엔드로 UI를 만들어내고 동작하도록 로직을 짜는데 집중하느라 데이터의 중요성에 대해 알지 못하였다.

이미 만들어진 Open API를 이용하지않고 내가 직접 하나의 서비스를 운영하기 위해 원하는 화면설계(Ui 그려보기)를 하면서

필요한 데이터들을 찾아내고 그것을 하나의 관계형데이터베이스로써 만들고자 관계형 데이터모델링을 배우고

실제 물리적 데이터모델로 만들기 위해서 SQL query를 배우고 만든 물리적데이터모델(데이터베이스)를 조작하여 

프론트엔드 즉 클라이언트 영역에서의 요청에 걸맞는 화면으로 돌려주는 API를 만드는 과정까지 공부하면서

프론트와 백엔드 데이터베이스 각각의 역할과 소통과정에대한 기본적인 이해를 도울수 있었다.

특히나 자바스크립트 생태계에서의 작업을 집중적으로 이루었기 때문에 학습곡선도 낮아 큰 무리가 없었다.

 

그래서 왜 도커를 배우는가

이전학기 리눅스 실습강의로 LAMP 스택을 이용해서 가상머신(Virtual box)에 리눅스를 설치하고 리눅스환경에서 아파치,mysql,php를 설치해서

하나의 웹서비스(간단한게시판)을 만들고 배포하는과정을 경험한 적이 있다. 

그러나 가상머신에 새로운 os를 설치하고 그곳에서 작업을 하는것은 내컴퓨터의 자원(cpu,hdd,ram)을 나눠서 사용하기 때문에 

당시 저사양의 노트북을 사용중이던 나에게 굉장히 까다로운 문제였다.

그뿐만이 아니라 가상환경으로 작업중인 서버도 가상환경설정작업에서 설정해둔 컴퓨터 자원만을 끌어가서 사용하기때문에 제한된 자원만을 사용하는 큰 문제를 지니고있기 때문에 제성능을 발휘할 수 없다는 문제가 존재한다는 사실을 알게되었다.

그렇다면 자원을 나눠가져가지않고 그냥 같이 공유하여 사용함으로써 내 컴퓨터나 노트북에 무리를 주지않고
내가만들어 배포한 여러 웹서비스(ex : 채팅 앱, 직구 앱)에서 공통적인 기술(ex : node.js, mysql)를 사용하는데 버전이 달라서 사용하려고할때 문제를 일으키는 경우를 없애는 방법은 없을까? 

또한 개발용컴퓨터와 서버용컴퓨터는 똑같은 환경을 구축하고있어야한다는 문제점(react,nodejs,php == react,nodejs,php)을 해결할수 있는 방법은 없을까?

 

그리고 그것을 해결해주는것이 바로 도커(docker)였다.

 

쉽게 도커 이해하기 위한 유튜브자료

 

 

도커 설치

일단 난 m1 맥북 에어를 사용중이라 home brew로 설치해야겠다는 생각이 바로 들었다. 

iterm (터미널)키고 home brew에서  도커 검색 

brew search docker

 

iterm (터미널)키고 home brew에서  도커 설치

brew install --cask docker

 

그후 생성된 docker 앱을 실행해주면 완료

 

 

도커 이미지 :  설계도 , 레시피

 내가 원하는 환경을 이용하기 위해 직접 설치하지않고 클라우드로 이용한다!

즉 도커 이미지는 내가 node.js를 설치하지않고도 이용하고싶을때 리눅스에 node.js가 설치된 상태를 얼려서 

원하는 때에 사용할수 있도록 클라우드에 올려둔것이다.

컴퓨터 도커를 설치하고 내 도커에 해당 이미지가 존재하는지 여부를 파악하고 없다면 도커 hub로부터 해당 이름으로 등록된 이미지를 다운로드한다 (Github에 다양한프로젝트가있는것처럼 수많은 docker image들이 존재함) .

그리고 얼려있는 도커를 해동시켜 내 컴퓨터에서 컨테이너로 만든다.

 

vsc 터미널에서 사용할수있는 도커 명령어 

 

가장 쉽게 배우는 도커

어려운 프로그래밍 개념들을 쉽게 설명해주는 유튜브 채널 '얄팍한 코딩사전'. 영상에서 다 알려주지 못한 정보들이나 자주 묻는 질문들의 답변들, 예제 코드들을 얄코에서 확인하세요!

www.yalco.kr

 

도커 컨테이너 : 설계도,레시피보고 만들어낸 실제제품

하나의 설계도나 틀 , 레시피 에서 다양한 결과물을 낼 수 있다. (한때 크로플 기계로 별거 다만들던거 생각하면됨) 

포장된라면봉지를사서 라면을 끓여서 여러가지 라면으로 자기만의 레시피를 만들수있는것처럼

기존의 라면레시피 3분,물 450ml같은게 변한다고하더라도 내가만들어뒀던 기존 라면레시피에 큰 문제가 생기지않음

라면봉지에서 필요한 필수 재료들을 가져와 사용햇고 내가만든 레시피에는 그에 맞는 다른 여러 재료들이 존재할것

도커이미지가 변한다고해도 컨테이너에 큰 문제가 안생김 

컨테이너는 각각 파일시스템과 네트워크를 가지고있음

 

내가 만드는 두가지 서비스가 있는데 이 두가지서비스가 node.js서버로 제작된다고하였을때

두가지 서비스에서 쓰인 node.js가 버전이 다르다고하더라도 도커이미지로 다운로드받아 컨테이너화 시키면

서로 영향주지않고 잘 운영할수 있음 

 

 

현재 작성날짜 1/18 오후 4시 44분 기준

아직 도커에 대한내용 확립이 안된 상태라 추후수정을통해 계속 수정하겠음