์ ํจ์ค๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ์ ์ง์์ ์ผ๋ก ํตํฉ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ํด์ ๋๋ค. CI(Continuous Integration) ํด ์ด๋ผ๊ณ ํํํฉ๋๋ค. ์ ํจ์ค์ ๋ํด ์์๋ณด๊ธฐ ์ ์ ์ฐ์ CI/CD์ ๋ํด ๋จผ์ ์์๋ณด๊ฒ ์ต๋๋ค. CI/CD๋? CI๋ Continuous Integration ์ฆ, ์ง์์ ์ธ ํตํฉ์ด๋ผ๋ ์๋ฏธ์ ๋๋ค. ์ง์์ ์ธ ํตํฉ์ด๋, ์ดํ๋ฆฌ์ผ์ด์ ์ ์๋ก์ด ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ๊ธฐ์ ์ผ๋ก ๋น๋ ๋ฐ ํ ์คํธ ๋์ด ๊ณต์ ๋ ํฌ์งํ ๋ฆฌ์ ํตํฉํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. (๊ฐ๋ฅํ๋ค๋ฉด ํ๋ฃจ์ ์ฌ๋ฌ๋ฒ๊น์ง) ์ด๋ฌํ CI์ ํต์ฌ ๋ชฉํ๋ ๋ฒ๊ทธ๋ฅผ ์ ์ํ๊ฒ ์ฐพ์ ํด๊ฒฐํ๊ณ , ์ํํธ์จ์ด์ ํ์ง์ ๊ฐ์ ํ๊ณ , ์๋ก์ด ์ ๋ฐ์ดํธ์ ๊ฒ์ฆ ๋ฐ ๋ฆด๋ฆฌ์ฆ์ ์๊ฐ์ ๋จ์ถ์ํค๋ ๊ฒ์ ์์ต๋๋ค. CD๋? ํด์ํ์๋ฉด, ์ง์์ ์ธ ์๋น์ค ์ ๊ณต ํน์ ์ง์์ ์ธ ๋ฐฐํฌ ๋ผ๋..
/var/lib/jenkins/workspace/ ๋ก ์ด๋ ํ ๋ถ์ง ์๊ฒ ํ๋ ค๋ ํ๋ก์ ํธ๋ก ์ด๋ํฉ๋๋ค. ํฐ์บฃ์ด ์๋ ์ ํจ์ค ๋ด workplace์ ๋๋ค. ํ๋ก์ ํธ์ pom.xml์ ์๋์ ๊ฐ์ด ์ถ๊ฐํด์ค๋๋ค. ..... ${project.name} .... ๊ทธ ํ ๋ค์ ๋น๋ํ๊ฒ ๋๋ฉด ๋ค์ 1.0.0-BUILD-SNAPSHOT์ด ๋ถ์ง ์์ต๋๋ค.
ํ ์คํธ ์๋ฒ ๋ด ์ ํจ์ค ์ค์นํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์๋ฒ๋ CentOS7 ๊ธฐ์ค์ ๋๋ค. [STEP1] ์ ํจ์ค๊ฐ ์ค์น๋์ด์๋ ํ์ธํ๊ธฐ $ yum list installed | grep jenkins [STEP2] ์ ํจ์ค ์ค์นํ๊ธฐ [STEP2-1] url์ ํด๋นํ๋ ํ์ผ์ /etc/yum.repos.d/jenkins.repo ๊ฒฝ๋ก์ ๋ค์ด $ wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo [STEP2-2] key import $ rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key [STEP2-3] ์ ํจ์ค ์ค์น $ yum install jenkin..
๋ก์ปฌ์ด ์๋ ํ ์คํธ ์๋ฒ๋ด tomcat8 ์ค์นํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ์๋ฒ๋ CentOS ๊ธฐ์ค์ ๋๋ค. ์์ฃผ ๊ธฐ์ด์ ์ธ ๋ฆฌ๋ ์ค ๋ช ๋ น์ด๋ ์๋ค๊ณ ๊ฐ์ ํ์ฌ ์งํํฉ๋๋ค. [STEP1] Apach Tomcat ์ฌ์ดํธ ์ ์ Apach Tomcat ์ ๋ค์ด๊ฐ๋๋ค. ์ ๋ 8๋ฒ์ ์ ์ฌ์ฉํ ๊ฒ์ด๊ธฐ์ Tomcat8์ ๋๋ฌ์ค๋๋ค. ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฌ "๋งํฌ ์ฃผ์ ๋ณต์ฌ"๋ฅผ ๋๋ฌ์ค๋๋ค. [STEP2] wget ์ค์นํ๊ธฐ ์๋ฒ์ ์ ์ ํ ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ค๋๋ค. yum install -y wget * ์ฐธ๊ณ : yum์ ๋ ๋ํ ๊ณ์ด์์ ์ฌ์ฉํ๋ ํจํค์ง ๋งค๋์ , wget๋ ์น ์๋ฒ๋ก๋ถํฐ ์ปจํ ์ธ ๋ฅผ ๊ฐ์ ธ์ค๋ ํ๋ก๊ทธ๋จ [STEP3] ์๋ง์ ์์น์ ํฐ์บฃ ์ค์น ๋ฐ ์์ถ ํ๊ธฐ ์ ๋ /var/lib/tomcat-feadmin ์์น์ ํฐ์บฃ..
์ด ๊ธ์ Song Seunggeun ๋์ ๊ธ์ ๋ณด๊ณ ์์ฑํ ๊ธ์ด๋ฉฐ, ํ๋ฝ์ ๋ฐ์์ต๋๋ค. ๋ ผ๋์ ์ฌ์ง๊ฐ ์์ ์ ์์ง๋ง, ์๋ฐ์คํฌ๋ฆฝํธ๋ 2021๋ ํ์ฌ ์ํํธ์จ์ด ์ ๊ณ์์ ๊ฐ์ฅ ์ ๋ช ํ ์ธ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. 2020๋ Github์ ๋ถ์์ ๋ฐ๋ฅด๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๋ 2014๋ ์ด๋๋ก ํญ์ ์ํฅ๋ ฅ ์๋ ์ธ์ด์๊ณ , ์๋ฐ์คํฌ๋ฆฝํธ์ ์น์ฒ์ด๋ผ๊ณ ํ ์ ์๋ ํ์ ์คํฌ๋ฆฝํธ ๋ํ ๊ทธ ์์๊ฐ 4์์ ๋ฌํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๋ป๊ฒ ์ด๋ ๊ฒ ์ ๋ช ํด์ง ์ ์์์๊น์? ํ์ด์ฌ, ์๋ฐ, C ๋ฑ์ ์ ํต์ ๊ฐ์๋ค, ๊ทธ๋ฆฌ๊ณ Golang, Rust, Swift, Dart ๋ฑ์ ์ ํฅ ๊ฐ์๋ค๊ณผ์ ๊ฒฝ์์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๋ป๊ฒ ์ฐ์๋ฅผ ์ ํ ์ ์์์๊น์? ์ด๋ฒ ๊ธ์์๋ ํด๋ ์ดํผ ํฌ๋ฆฌ์คํ ์จ ๊ต์์ ํ๊ดด์ ํ์ ์ด๋ก ์ ์ด์ฉํด์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ฑ์ฅํ ..
๋ก์ปฌ ์๋ฒ๊ฐ ์๋ ํ ์คํธ ์๋ฒ์์ ์ ํจ์ค๋ฅผ ์ด์ฉํ์ฌ CI/CD๋ฅผ ํด๋ณด๊ฒ ์ต๋๋ค. ์๋ฒ๋ CentOS7 ๊ธฐ์ค์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์์๋ก ์งํํฉ๋๋ค. KTCloud๋ฅผ ์ด์ฉํ์ฌ ์๋ฒ ๊ตฌ์ถ(์๋ต) ํ ์คํธ ์๋ฒ ๋ด ํฐ์บฃ(port80), JDK(1.8.x) ์ค์น ํ ์คํธ ์ ํจ์ค ์๋ฒ ๊ตฌ์ถ ํ ์คํธ ์๋ฒ ๋ด ์ ํจ์ค๋ฅผ ํตํด ๋น๋์ ๊ณผ ์๋๋ฐฐํฌ ์งํ [Jenkins] CI/CD์ ์ฐ๋ฆฌ์ ์น์ ํ ๋น์ Jenkins ์ ํจ์ค๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ์ ์ง์์ ์ผ๋ก ํตํฉ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ํด์ ๋๋ค. CI(Continuous Integration) ํด ์ด๋ผ๊ณ ํํํฉ๋๋ค. ์ ํจ์ค์ ๋ํด ์์๋ณด๊ธฐ ์ ์ ์ฐ์ CI/CD์ ๋ํด ๋จผ์ ์์๋ณด๊ฒ ์ต๋๋ค. CI kingofbackend.tistory.com [STEP1] ํ ์คํธ ์๋ฒ ๋ด ํฐ์บฃ(port80)..
OS ์ข ๋ฅ OS ๋ ํฌ๊ฒ Windows, Linux, Unix, MacOS 4๊ฐ์ง๋ก ๋ถ๋ฅ๋ฉ๋๋ค. Linux ์ข ๋ฅ Linux ๋ ํฌ๊ฒ ๋ ๋ํ, ๋ฐ๋น์, ์ฐ๋ถํฌ 3๊ฐ์ง๋ก ๋ถ๋ฅ๋๋ฉฐ, ๊ณ์ด์ ๋ฐ๋ฅธ ํจํค์ง ๊ด๋ฆฌ ๋ช ๋ น์ด๊ฐ ๋ค๋ฆ ๋๋ค ๋ ๋ํ ๊ณ์ด์ yum ์ ์ฌ์ฉํ๊ณ ๋ ๋ํ ์ํฐํ๋ผ์ด์ฆ ํ๋๋ผ CentOS ๋ฐ๋น์, ์ฐ๋ถํฌ ๊ณ์ด์ apt-get ์ ์ฌ์ฉํฉ๋๋ค.
wget vs curl wget ๊ณผ curl ์ ๋ ๋ค ์น ์๋ฒ๋ก๋ถํฐ ์ปจํ ์ธ ๋ฅผ ๊ฐ์ ธ์ค๋ Linux ์ปค๋งจ๋์ ๋๋ค. wget ๊ณผ curl ์ ๊ฑฐ์ ์ ์ฌํ์ง๋ง ์กฐ๊ธ ๋ค๋ฅธ ๋ถ๋ถ์ด ์์ต๋๋ค. ๊ณตํต์ HTTP, HTTPS, FTP ํ๋กํ ์ฝ์ ํตํด ์ปจํ ์ธ ๋ฅผ ๋ค์ด๋ก๋ ํ๋ ์ปค๋งจํธ ๋ผ์ธ ํด์ ๋๋ค. HTTP POST request ๋ฅผ ์ง์ํฉ๋๋ค. (์ฆ, ์น์ฌ์ดํธ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์์ต๋๋ค.) HTTP ์ฟ ํค๋ฅผ ์ง์ํฉ๋๋ค. ์คํฌ๋ฆฝํธ์ฒ๋ผ ์ฌ์ฉ์ ์ธํฐ๋ ์ ์์ด ์ํ๋ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์คํ์์ค์ด๋ฉฐ ๋ฌด๋ฃ์ ๋๋ค. 90๋ ๋์ ์์ํ ํ๋ก์ ํธ์ ๋๋ค. (wget ์ 1995๋ , curl ์ 1996๋ ์ ์์ํ์ต๋๋ค.) metalink ๋ฅผ ์ง์ํฉ๋๋ค. ์ฐจ์ด์ wget ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ ๋๋ค. ๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ํ์ง ์์ต๋๋ค...
์ด ๊ธ์ DevEric ๋์ ๊ธ์ ์ฐธ๊ณ ํ์์ต๋๋ค. ํธ๋์ญ์ ์ propagation ์ค์ ์ด๋ Spring์์ ์ฌ์ฉํ๋ ์ด๋ ธํ ์ด์ '@Transactional'์ ํด๋น ๋ฉ์๋๋ฅผ ํ๋์ ํธ๋์ญ์ ์์์ ์งํํ ์ ์๋๋ก ๋ง๋ค์ด์ฃผ๋ ์ญํ ์ ํฉ๋๋ค. ์ด๋ ํธ๋์ญ์ ๋ด๋ถ์์ ํธ๋์ญ์ ์ ๋ ํธ์ถํ๋ค๋ฉด ์คํ๋ง์์๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๊ณ ์์๊น์? ์๋ก์ด ํธ๋์ญ์ ์ด ์์ฑ๋ ์๋ ์๊ณ , ์ด๋ฏธ ํธ๋์ญ์ ์ด ์๋ค๋ฉด ๋ถ๋ชจ ํธ๋์ญ์ ์ ํฉ๋ฅํ ์๋ ์์ ๊ฒ์ ๋๋ค. ์งํ๋๊ณ ์๋ ํธ๋์ญ์ ์์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ํธ์ถ๋ ๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ์ ํ๋ ๊ฒ์ 'ํธ๋์ญ์ ์ ์ ํ ์ค์ '์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ์ ํ ์ค์ ์ต์ ํธ๋์ญ์ ์ ์ ํ ์ค์ ์ '@Transactional'์ ์ต์ 'propagation'์ ํตํด ์ค์ ํ ์ ์์ต๋๋ค. ๊ฐ ์ต์ ์ ์๋์ ๊ฐ์ต๋..
Sims๋์ ๊ธ์ ์ฐธ๊ณ ํ์์ต๋๋ค. ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค ๋ณด๋ฉด ๋ค์ํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค. ๊ฐ์ฅ ๋ํ์ ์ธ ์๋ก๋ file์ ์ฝ์ผ๋ ค๊ณ ํ๋๋ฐ ํด๋น file์ด ์๋ ๊ฒฝ์ฐ, 0์ผ๋ก ๋๋๋ ๊ฒฝ์ฐ ๋ฑ๋ฑ.. ์ฝ๊ฒ ์ ํ ์ ์๋ ์ค๋ฅ๋ค์ด ๋ง์ด ์์ฃ . ์ด๋ฌํ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ์ '์์ธ ์ฒ๋ฆฌ'๋ผ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ผ ์ด๋ป๊ฒ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋์ง ์ดํด๋ณด๋๋ก ํฉ์๋ค. ์์ธ์ฒ๋ฆฌ != ๋ฒ๊ทธ ์, ์ผ๋จ ์ค๋ฅ๋ฅผ ๋ถ๋ฅํด ๋ด ์๋ค. ์์์ ๊ฐ๋จํ๊ฒ 2๊ฐ์ง ์ค๋ฅ๋ฅผ ๋ง์๋๋ ธ์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋ ํ์ผ์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ, ๋ ๋ฒ์งธ๋ 0์ผ๋ก ๋๋์์ ๋ ์ค๋ฅ์ ๋๋ค. ๋ ๋ค ์ค๋ฅ์ง๋ง ์์ธํ ์ดํด๋ณด๋ฉด ํน์ง์ด ์กฐ๊ธ ๋ค๋ฆ ๋๋ค. ์ฒซ ๋ฒ์งธ, ํ์ผ์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ์ ์ค๋ฅ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์์์ ํ๊ณ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผ ํ๋ ๊ฒฝ์ฐ์ ๋๋ค. ์ฆ, ..
// ๋ฐ๋ณตํด์ ํ์ํ ๋ด์ฉ ํน์ ๋ฐ๋ณตํ ๊ตฌ๋ฌธ ์ด ๋, ์ํ์ฉ ๋ณ์๋ฅผ status๋ผ๊ณ ์ง์ ํ๋ค๋ฉด ์๋์ ๊ฐ์ด ํ์ฉํ ์ ์๋ค. ${status.current} ํ์ฌ for๋ฌธ์ ํด๋นํ๋ ๋ฒํธ ${status.index} 0๋ถํฐ์ ์์ ${status.count} 1๋ถํฐ์ ์์ ${status.first} ์ฒซ ๋ฒ์งธ์ธ์ง ์ฌ๋ถ ${status.last} ๋ง์ง๋ง์ธ์ง ์ฌ๋ถ ${status.begin} for๋ฌธ์ ์์ ๋ฒํธ ${status.end} for๋ฌธ์ ๋ ๋ฒํธ ${status.step} for๋ฌธ์ ์ฆ๊ฐ๊ฐ ํ์ฉ ์ / ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ ์ (Static)์ด๋? ์ ์ (static)์ ๊ณ ์ ๋์ด๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. Static์ด๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ Static๋ณ์์ Static๋ฉ์๋๋ฅผ ๋ง๋ค ์ ์๋๋ฐ ๋ค๋ฅธ๋ง๋ก ์ ์ ํ๋์ ์ ์ ๋ฉ์๋๋ผ๊ณ ๋ ํ๋ฉฐ ์ด ๋์ ํฉ์ณ ์ ์ ๋ฉค๋ฒ๋ผ๊ณ ํฉ๋๋ค. (ํด๋์ค ๋ฉค๋ฒ๋ผ๊ณ ๋ ํฉ๋๋ค.) ์ ์ ํ๋์ ์ ์ ๋ฉ์๋๋ ๊ฐ์ฒด(์ธ์คํด์ค)์ ์์๋ ๋ฉค๋ฒ๊ฐ ์๋๋ผ ํด๋์ค์ ๊ณ ์ ๋ ๋ฉค๋ฒ์ ๋๋ค. ๊ทธ๋ ๊ธฐ์ ํด๋์ค ๋ก๋๊ฐ ํด๋์ค๋ฅผ ๋ก๋ฉํด์ ๋ฉ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ์ฌํ ๋ ํด๋์ค๋ณ๋ก ๊ด๋ฆฌ๋ฉ๋๋ค. ๋ฐ๋ผ์ ํด๋์ค์ ๋ก๋ฉ์ด ๋๋๋ ์ฆ์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ์ (Static) ๋ฉค๋ฒ ์์ฑ Static ํค์๋๋ฅผ ํตํด ์์ฑ๋ ์ ์ ๋ฉค๋ฒ๋ค์ Heap์์ญ์ด ์๋ Static์์ญ์ ํ ๋น๋ฉ๋๋ค. Static ์์ญ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๊ณต..
๊ฐ๋ฐ ์ด์๊ฐ ๋๋ถ๋ถ ๊ทธ๋ ์ง๋ง, ๊ธฐ์ ์ ์ธ ์ธก๋ฉด๋ณด๋ค ์์ธ๋ก ์์ฌ์ํต ๋ฌธ์ ๊ฐ์ ์ธ์ ์์๊ฐ ์์ธ์ด ๋ ๋๊ฐ ๋ง์ต๋๋ค. ์บ๋ฆฌ ํ๋ฆฌ์ฒผ์ "์ ๊ฐ๋ฐ์๋ ์๋ชป๋ ๊ธฐ์ ์ ํ์ ๋ฐฅ ๋จน๋ฏ์ด ํ๋?"๋ผ๋ ์ ๋ชฉ์ ๋ธ๋ก๊ทธ ๊ฒ์๊ธ์์ ๊ทธ ์์ธ์ ๋ค์ฏ ๊ฐ์ง๋ก ๋ถ๋ฅํ์ต๋๋ค. ํ๋์ฉ ์์๋ณด๊ฒ ์ต๋๋ค. ์ด ๊ธ์ ์ ๊ฐ๋ฐ์๋ ์๋ชป๋ ๊ธฐ์ ์ ํ์ ๋ฐฅ ๋จน๋ฏ์ด ํ๋? ์ Optimizing Java ๋ผ๋ ์์ ์ ์ฐธ๊ณ ํ์ฌ ์์ฑํ์์ต๋๋ค. ์ง๋ฃจํจ ๊ฐ๋ฐ์๋ ๋๋ถ๋ถ ์๊ธฐ ์ญํ ์ ์ง๋ฃจํจ์ ๋๋ผ๊ณ ๋ญ๊ฐ ์๋กญ๊ณ ๋์ ์ ์ธ ์ผ์ ์ฐพ์ ๊ฐ์ ํ์ฌ ๋๋ ์์ ๋ค๋ฅธ ๊ณณ์ผ๋ก ๋ ๋ ๊ถ๋ฆฌ๋ฅผ ํ๋ ์ฌ๋๋ ์์ต๋๋ค. ํ์ง๋ง ์ฌ๋ด์ ๋ฑํ ๋ง๋ ํ ๊ธฐํ๊ฐ ์๊ฑฐ๋ ๋ค๋ฅธ ํ์ฌ๋ก ์ด์งํ๋ ๊ฒ ์ฌ์์น ์์ ๋๋ ์๊ฒ ์ฃ . ๋ฌผ๋ก , ์ง๋ฃจํ ์ผ์์ ์ ์ฐธ๊ณ ๊ฒฌ๋ ๋ฟ๋ง ์๋๋ผ ์ธ๋ ค ๋ ์ฝ๊ณ ํธ..
์ถ์ํด๋์ค๋ abstarct๋ฅผ ์ฌ์ฉํ๊ณ ์ธํฐํ์ด์ค๋ interface๋ฅผ ์ฌ์ฉํ๋ฉด ๊ตฌํํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ธ์ ์ถ์ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ณ ์ธ์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น์? ์๋ง ๋ง์ ์ฃผ๋์ด ๊ฐ๋ฐ์๋ถ๋ค์ด ๋ช ์พํ ๋ต์ ๋ด๋์ง ๋ชปํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ ๋ํ ์ถ์ํด๋์ค์ ์ธํฐํ์ด์ค์ ์ ์ ํ ์ฌ์ฉ ์ฉ๋๋ฅผ ์ธ์งํ์ง ๋ชปํ ์ฑ ๊ฐ๋ฐ์ ํด์์ต๋๋ค. ๊ทธ๋์ ์ด๋ฒ์ ์ถ์ํด๋์ค์ ์ธํฐํ์ด์ค์ ๋ํด ์์ ๋ณด๊ณ ์ ํฉ๋๋ค. ์ถ์ํด๋์ค ์ถ์ํด๋์ค๋ ์ผ๋ฐํด๋์ค์ ๋ณ๋ฐ ๋ค๋ฅผ ๊ฒ์ด ์์ต๋๋ค. ๋จ์ง, ์ถ์ ๋ฉ์๋๋ฅผ ์ ์ธํ์ฌ ์์์ ํตํ์ฌ ์์ ํด๋์ค์์ ์์ฑํ๋๋ก ์ ๋ํ๋ ํด๋์ค์ ๋๋ค. ๊ทธ๋์ ๋ฏธ์์ฑ ์ค๊ณ๋๋ผ๊ณ ๋ ํํํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ ์ฝ๋์ ๊ฐ์ด ์์ฑํ๊ฒ ๋ฉ๋๋ค. public abstract class ํด๋์ค์ด๋ฆ{ public..
์ด๋ฒ ๊ธ์์๋ AWS EC2๋ฅผ ์ด์ฉํ์ฌ Node.js๋ฅผ ๋ฐฐํฌํด๋ณด๊ฒ ์ต๋๋ค. ์ฐ๋ถํฌ๋ฅผ ํด๋ณด์์ง ์์๋ค๋ฉด ์กฐ๊ธ ์ด๋ ค์ด ๋ถ๋ถ์ด ์์ ์๋ ์์ต๋๋ค. AWS EC2 ์์ํ๊ธฐ EC2 ๊ฐ์ ๊ฒฝ์ฐ S3์ ๋ค๋ฅด๊ฒ ๋น์ฉ์ด ๊ฝค ๋์ต๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด ๋ฐ๋์ ์ธ์คํด์ค๋ฅผ ์ค์งํด์ผ ํฉ๋๋ค. ์๋ ๊ฒฝ์ฐ ์ฒญ๊ตฌ์ ๋ณด๊ณ ์ ์ฒ๋ผ ๊น์ง ๋๋๋๋ค ใ ใ AWS EC2์ ์ ์ํ๊ณ , ์ธ์คํด์ค ์์ ๋ฒํผ์ ๋๋ฌ์ค๋๋ค. ์ฐ๋ถํฌ๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๊ธฐ์ 18.04 ๋ฒ์ ์ ์ฐ๋ถํฌ๋ฅผ ์ ํํด์ค๋๋ค. ์ธ์คํด์ค ์ ํ ์ ํ์์ ์ด๋ฏธ์ง์ ๊ฐ์ด ์ฒดํฌํ๊ณ ๊ฒํ ๋ฐ ์์ ๋ฒํผ์ ๋๋ฌ์ค๋๋ค. ์ญ์ญ ๋์ด์์ 7๋จ๊ณ์์ ๋ณด์ ๊ทธ๋ฃน ํธ์ง์ ํด๋ฆญํด์ค๋๋ค. ํ ์คํธ์ฉ์ด๊ธฐ์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑํ์์ต๋๋ค. ์ ์ธ๊ณ ๋๊ตฌ๋ ์๋ฌด ๊ณณ์์ ๋ค์ด์ฌ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฒํ ๋ฐ ์์ ..
์ด์ ๊ธ 'Route 53 ๋๋ฉ์ธ ๊ตฌ๋งค ํ ์ฐ๊ฒฐํ๊ธฐ'์์ ๋๋ฉ์ธ ๊ตฌ๋งค ํ S3์ ์ฐ๋์์ผฐ์ต๋๋ค. ํ์ง๋ง Http๋ก ์ ์๋๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ Https๋ก ๋ฐ๊ฟ๋ณด๋ ์์ ์ ํ๊ฒ ์ต๋๋ค. Https๋ก ๋ฐ๊พธ๊ธฐ ์ํด์๋ S3, CloudFront, AWS Certificate Manager, Route53 ์ ์ด์ฉํด์ผ ํฉ๋๋ค. S3๋ ์ ์ ์ธ ์น ํธ์คํ ์ด์ฌ์ EC2์ ๊ฐ์ ๋์ ์ธ ์น ํธ์คํ ์ Https๋ EC2์ Load Balancer๋ฅผ ์ด์ฉํด์ผ ํฉ๋๋ค. Route53์์ ๋๋ฉ์ธ ๊ตฌ๋งค ํ S3๋ก ๋ฐฐํฌํ๋ค๋ ๊ฐ์ ํ์ ์งํํ๊ฒ ์ต๋๋ค. AWS Certificate Manager AWS์ ์ ์ํ์ ์ Certificate Manager๋ก ์ด๋ํฉ๋๋ค. ์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ด ์๋๋ฐ ๋ฐ๋์ ๋ฏธ๊ตญ๋๋ถ(๋ฒ์ง๋์ ๋ถ๋ถ)us-east-1๋ก ..
๊ธ์๊ฐ ๊ฒ์ ์์ผ๋ก ๋ณด์ผ ์ ์ค๋ฅธ์ชฝ ์๋จ์ ๋ฌ ๋ชจ์์ ๋๋ฌ์ฃผ์ธ์ :) Amazon Route 53๋ ๋์ ๊ฐ์ฉ์ฑ๊ณผ ํ์ฅ์ฑ์ด ๋ฐ์ด๋ ํด๋ผ์ฐ๋ ์น ์๋น์ค์ ๋๋ค. ํํ์ด์ง ๊ฐ์๋ฉด ๋ ์์ธํ ๋ณด์ค ์ ์๋๋ฐ ์ด๋ฒ ๊ธ์์๋ ๋๋ฉ์ธ์ ๊ตฌ๋งคํ์ฌ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๋ ค๊ณ ํฉ๋๋ค. ์ ๊ฐ์ ๊ฒฝ์ฐ ํฌํธํด๋ฆฌ์ค๋ฅผ example.com ์ ๋๋ฉ์ธ์ ๊ฐ์ง ์น ์ฌ์ดํธ๋ก ๋ง๋ค๊ณ ์ถ์ด์ ์นดํ24, ๊ฐ๋น์ ๋ฑ์ ์์๋ณด๋ค๊ฐ AWS S3, EC2, RDS ๋ฑ AWS ๊ด๋ จํ ํด๋ผ์ฐ๋๋ฅผ ์ฌ์ฉํ ์ ์ด ์์ด์ ์ด๋ฒ์๋ AWS Route 53์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. AWS๋ 1๋ ๊ธฐ์ค ํํ 15,000์(com ๊ธฐ์ค, 12$) ์ ๋์ ๋๋ค. ์นดํ24๊ฐ 22,000์, ๊ฐ๋น์๊ฐ 13,500์ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์นดํ24์์ .com์ด ๋ฑ๋ก๋ถ..
์ดํด๋ฆฝ์ค์์ *.java๋ฅผ ๋จ์ถํค ๋๋ฌ์ ์คํ์ํฌ ์ค๋ง ์์์ง *.java ํ์ผ์ด ์ด๋ ํ ๊ณผ์ ์ ๊ฑฐ์ณ ์คํ์ด ๋๋์ง๋ ์์ง ๋ชปํ์ต๋๋ค. ๋ฐ๋ผ์ ์๋ฐ ์ปดํ์ผ๋ฌ๋ ์ด๋ค ์ญํ ์ ์ํํ๋ฉฐ, ์ด๋์ ๋ง์ด ๋ค์ด๋ณธ JVM์ ๋ฌด์์ธ์ง ๊ทธ๋ฆฌ๊ณ ์๋ฐ์์ *.java๋ฅผ ์ด๋ป๊ฒ ์ปดํจํฐ๊ฐ ์คํ์ํค๋ ์ง์ ๋ํ ๊ณผ์ ์ ์์๋ณด๋ ค๊ณ ํฉ๋๋ค. ํ๋ฆฐ ๋ถ๋ถ์ด๋ ์ง๋ฌธ ์ฌํญ์ด ์์ผ์๋ฉด ์ธ์ ๋ ์ง ๋ง์ํด์ฃผ์ธ์ :) ์ ์ฒด์ ์ธ ์๋ฐ์ ์คํ๊ณผ์ ์ ๊ทธ๋ฆผ์ ์ ์ฒด์ ์ธ ์๋ฐ์ ์คํ๊ณผ์ ์ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค. ์ฌ์ค ๋ ๊น์์ด ํ๊ณ ๋ค๋ฉด ์ด๊ฒ๋ณด๋ค ํจ์ฌ ๋ง์ ๊ฒ๋ค์ด ์กด์ฌํ์ง๋ง, ์ด๋ฒ ๊ธ์์๋ ์ด์ ๋๋ง ์์๋ณด๊ฒ ์ต๋๋ค. ํต์ฌํค์๋ *Java Compiler , *JVM , *Interpreter , *JIT compiler Java Compiler with binar..
์๋ฐ์ ์๋์๋ฆฌ๋ฅผ ๊ณต๋ถํ๋ ์ค ๋ฐ์ดํธ ํ์ผ๊ณผ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ๊ฐ๋ ์ ์์งํด์ผ๋์ ๊ด๋ จ ๊ธ์ ์ฐ๊ฒ ๋์์ต๋๋ค. Complie๊ณผ Link C์ธ์ด๋ ์ปดํ์ผ๋ฌ์ ์ํด ์์คํ์ผ(*.c)์ด ๋ชฉ์ ํ์ผ(*.obj)๋ก ๋ณํ๋ ๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ , ์ฆ 0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง ์ฝ๋๋ก ๋ณํ๋ฉ๋๋ค. ๋ชฉ์ ํ์ผ์ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ ๋ฐ์ด๋๋ฆฌ ์ฝ๋์ ํํ์ด์ง๋ง ์คํ๋ ์๋ ์์ต๋๋ค. ๊ทธ ์ด์ ๋ ์์ ํ ๊ธฐ๊ณ์ด๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๋๋ค. *์์คํ์ผ : ๊ฐ๋ฐ์๊ฐ ์์ฑํ๋ ๊ณ ๋ ๋ฒจ์ธ์ด์ธ ์์ค์ฝ๋๋ก ๊ตฌ์ฑ๋ ํ์ผ ex. *.java, *.py *๋ชฉ์ ํ์ผ : ์์คํ์ผ์ ์ปดํ์ผํด์ ์๊ธด ํ์ผ ex. ๋ฐ์ดํธ์ฝ๋, ๋ฐ์ด๋๋ฆฌ ์ฝ๋ ์ปดํ์ผ๋ฌ ์ ์ํด ๋ณํ๋ ๋ชฉ์ ํ์ผ์ ๋ง์ปค ์ ์ํด ์คํ๊ฐ๋ฅํ ์คํํ์ผ(*.exe)๋ก ๋ณํ๋ ๋ ํจ์๋ ํค๋ ํ์ผ ๋ฑ์ ์ค์ ๋ฉ๋ชจ..
์๋ฐ์คํฌ๋ฆฝํธ ๋ฟ๋ง ์๋๋ผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๋ฐฐ์ฐ๋ฉด์ ์ฒ์์๋ ๊ทธ์ ์ฝ๋ ์ง๊ธฐ์๋ง ๊ธ๊ธํ์ต๋๋ค. ๊ทธ ์ธ์ด์ ์๋์๋ฆฌ ๊ฐ์ ๊ฑด ๋ด๋ ๋๋ฌด์ง ์ดํด๊ฐ ์๊ฐ๊ธฐ์ ๊ด์ฌ์ด ์์์ต๋๋ค. ์๊ฐ์ด ์ ์ฐจ ํ๋ฌ ์ฐ์ฐํ ์๋ฐ์คํฌ๋ฆฝํธ์ ์๋์๋ฆฌ ๊ด๋ จ ๊ธ์ ๋ค์ ๋ณด๊ฒ๋์๋๋ฐ ๊ธ์ด ์ด๋ ต์ง ์๊ณ ์ดํด๊ฐ ๋๊ธฐ ์์ํ์ต๋๋ค. "๊ทธ๋ ์์ฑํ๋ ์ฝ๋๊ฐ ์ด๋์ ์ด๋ฐ์์ผ๋ก ์๋ํ๊ตฌ๋" ๋ฅผ ๊นจ๋ฌ์ผ๋ฉด์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ํด ๋ ์์ธํ ์๊ฒ ๋๊ณ ๋๋ ํ์ธต ๋ ์ฝ๋ฉ์ด ์ฌ๋ฏธ์์ด์ก์ต๋๋ค. ๊ทธ๋์ ์ด๋ฒ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์๋์๋ฆฌ์ ์์ด ํต์ฌ ์๋ฆฌ์ธ JavasScript Engine(V8), Web API, Callback Queue, ์ด๋ฒคํธ ๋ฃจํ ๊ทธ ์ค ํนํ ์ด๋ฒคํธ ๋ฃจํ ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๊ณ ํฉ๋๋ค. ํ๋ฆฐ ๋ถ๋ถ์ด๋ ์ง๋ฌธ ์ฌํญ์ด ์์ผ์๋ฉด ์ธ์ ๋ ์ง ๋๊ธ๋ก..
๋๊ตฐ๊ฐ ์ ์๊ฒ ํ๋ก์ธ์ค์ ์ค๋ ๋์ ์ฐจ์ด์ ์ ๋ํด ๋ฌผ์๋ ์ ์ด ์์๋๋ฐ, ๋ช ํํ๊ฒ ๋๋ต์ ๋ชปํ๊ฒ ๋๋ฌด ์์ฌ์์ ์ด ์ฐธ์ ํ์คํ ๊ณต๋ถํ๊ณ ๋์ด๊ฐ๋ ค ์ด ๊ธ์ ์ฐ๊ฒ ๋์์ต๋๋ค. ๊ฐ๋ ๋ค์ด ํ๊ณ ํ๊ณ ๋ค๋ฉด ๋ฐ๋ ๋๋ ์๋ ๊ฒ ๊ฐ์์ ์ด ๊ธ์ ์ดํดํ๋๋ฐ ์์ด ๊ตณ์ด ๋ถํ์ํ ๊ฐ๋ ๋ค์ ๋ํด์ ์ธ๊ธํ์ง ์๊ฒ ์ต๋๋ค. ํ๋ก์ธ์ค์ ์ค๋ ๋๋ ๋ฌด์์ผ๊น? #ํ๋ก์ธ์ค(Process)๋? ํ๋ก์ธ์ค๊ฐ ๋ฌด์์ธ์ง ํ์ ํ๊ธฐ ์ ์ ํ๋ก๊ทธ๋จ์ด๋ ๋ฌด์์ธ์ง ํ์ ํ ํ์๊ฐ ์์ต๋๋ค. ํ๋ก๊ทธ๋จ์ด๋ ๋จ์ด๋ ์ปดํจํฐ์ ๊ณต์๊ฐ ์๋์ฌ๋ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ๋ง์ด ๋ค์ด๋ดค์ ๊ฒ์ด๊ณ ์ค์ ๋ก ์ฌ์ฉ๋ ํ๋ ๋จ์ด์ผ ๊ฒ์ ๋๋ค. ํ๋ก๊ทธ๋จ ์ ์ด๋ค ์์ ์ ์คํํ ์ ์๋ ํ์ผ์ ์๋ฏธํฉ๋๋ค. ๋ฐํํ๋ฉด์ LoL.exe , Visual Studio.exe ๊ฐ์ ํ์ผ๋ค์ด ์๋๋ฐ ์ด๊ฒ๋ค์ด ํ..
๋ฆฌ์คํธ ๋ณต์ฌํ๊ธฐ ๋ณ์๋ ๊ฐ์ฒด๋ฅผ ๋ด๋ ๊ทธ๋ฆ์ด ์๋๋ผ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ด๋ฆ์ ๋๋ค. ๋ฐ๋ผ์ ๋ณ์๋ฅผ ๋ค๋ฅธ ๋ณ์์ ๋์ ํ๋ฉด ๋ ๋ณ์๋ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋ฉ๋๋ค. ๋ค์ ๋งํด, ํ๋์ ๊ฐ์ฒด๋ฅผ ๋ ๊ฐ์ ์ด๋ฆ์ด ๊ฐ๋ฆฌํค๋ ๊ฒ์ด์ง ๊ฐ์ฒด ์์ฒด๊ฐ ๋ ๊ฐ๊ฐ ๋ ๊ฒ์ ์๋๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ถ๋ณํ ๊ฐ์ฒดimmutable object์์๋ ํ ๋ณ์์ ์ ๋ฐ์ดํฐ๋ฅผ ๋์ ํด๋ ๋ค๋ฅธ ๋ณ์์ ์ํฅ์ ๋ฏธ์น์ง ์์ง๋ง, ๋ฆฌ์คํธ ๊ฐ์ ๋ณํ ๊ฐ์ฒดmutable object์์๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ์ด๋ ์ฅ์ ์ด ๋๊ธฐ๋ ํ๊ณ , ๋จ์ ์ด ๋๊ธฐ๋ ํฉ๋๋ค. ์ฐ์ ์ฌ๊ธฐ๊น์ง ์ฝ๋๋ก ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค. >>> mu_a = [2020, 'year'] >>> mu_b = mu_a >>> mu_b.append(['hi', 'hello']) >>> mu_a [2020, '..
UUID๋ Universally Unique IDentifier์ ์ฝ์๋ก, ์ ์ธ๊ณ์ ํ๋๋ฐ์ ์๋ ID๋ผ๋ ๋ป์ ๋๋ค. ์ด๋ฐ ID๋ ๊ณ ์ ํ๊ธฐ ๋๋ฌธ์ ์๋ฒ์์ ์ฌ์ฉ์๋ค์ UUID๋ฅผ ๋ถ์ฌ์ ๊ตฌ๋ถํ๋ ๋ฑ ์ฌ๋ฌ ๋ฐฉ๋ฉด์์ ์ ์ฉํ๊ฒ ์ฐ์ผ ์ ์์ต๋๋ค. UUID๊ฐ ๊ฒน์น๋ฉด ์ด์ฉ์ง? ์ด ๊ธ์ koreanhole ๋์ ๊ธ์ ๋๋ค. Intro ์ต๊ทผ UOS๊ณต์ง์ฌํญ ์ฑ์ ๋ฐฑ์๋ ์์คํ ์ ๊ต์ฒดํ๋ ์์ ์ ํ๊ณ ์์ต๋๋ค. ๊ธฐ์กด Firebase์ Firestore๋ฅผ ์ฌ์ฉํ๊ณ ์์๋๋ฐ ์ด๋ฒ์ ์๋กญ๊ฒ Nestjs๋ก ์๋ฒ๋ฅผ ์์ฑํ๋ kingofbackend.tistory.com ์ค์น $ npm install uuid uuid ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ install ํฉ๋๋ค. ์ข ๋ฅ UUID๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์์ฑ ๊ฐ๋ฅํฉ๋๋ค. v1: ํ์์คํฌํ(์๊ฐ) ๊ธฐ..
Node.js๋ฅผ ๊ฐ๋ฐํ ๋ผ์ด์ธ ๋ฌ(Ryan Dahl) ์ ์ง๋ 2018๋ 6์ Javascript ์ต๋ ์ฝํผ๋ฐ์ค์ธ JSConf 2018์์ 10 Things I Regret About Node.js ์ ๋ฐํํ์์ต๋๋ค. ๊ทธ ํ Node.js๋ฅผ ๊ฐ๋ฐํ๋ฉด์ ์๊ฒผ๋ ํํ๋ฅผ ๋ฐํ์ผ๋ก ์๋ก์ด ์๋ฒ ์ฌ์ด๋ ๋ฐํ์์ธ Deno.js๋ฅผ ๋ฐํํ์์ต๋๋ค. (Node์์ de๋ฅผ no ์์ ์ด๊ฑด๋ฐ ์ด๊ฑฐ ๋์น์ฑ๊ณ ์๋ฆ์ด.. ) ๋ผ์ด์ธ ๋ฌ์ Node.js ๋ง๋ค๋ฉด์ ์ด๋ฒคํธ ๊ธฐ๋ฐ HTTP ์๋ฒ(Event driven HTTP server)์ ์๋นํ ๋ง์ ์ฌํ์ ๊ธฐ์ธ์์ต๋๋ค. ์ค์ ๋ก Node.js๋ฅผ ๋ง๋ค๋ ๊ฐ์ฅ ์ค์ํ๊ฒ ์๊ฐํ๋ ๊ฒ์ด ์ด๋ฒคํธ ๊ธฐ๋ฐ HTTP ์๋ฒ๋ผ๊ณ ํฉ๋๋ค. ์ด์ ๋ํด์๋ ์ฌ์ ํ Node๋ ์ข์ ์๋ฒ ์ฌ์ด๋ ๋ฐํ์์ด๋ผ๊ณ ๋ง..
์ฐ๋ฆฌ๋ ๋ญ์น์๊ฒ ๊ธฐ๋ค๋ ค! ๋จน์ด! ํ๋ จ์ ๊ต์ก์ํค๊ณ ์ถ์ต๋๋ค. ๋ญ์น์ ๋ค๋ฆฌ์ ๊ฐ์์ ์ฌ๋ ค๋๊ณ ๋จน์ด!๋ผ๊ณ ํ์ ๊ฒฝ์ฐ ๋ญ์น๊ฐ ๊ฐ์์ ๋จน์์ผ๋ฉด ํ๋๋ฐ ๋ญ์น๋ ์ฃผ์ธ์ ๋ช ๋ น์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ (๋น๋๊ธฐ ๋ฐฉ์ ๋ฌธ์ ) ์ ๋ฉ๋๋ก ๊ฐ์์ ๋จน์ด๋ฒ๋ ธ์ต๋๋ค...๋ญ์น์๊ฒ ํ๋ จ(์ผ๋ฐ ์ฝ๋ฐฑํจ์)์ ์์ผ๋ณด์์ง๋ง ์ฌ์ ํ ๋ญ์น๋ ๋ง์ ๋ฃ์ง ์์ต๋๋ค. ๋ญ์น๋ ๋ง๋ชปํ๋ ๊ฐ์์ง๋ผ ํผ๋ผ ์๋ ์๊ณ ์ฐ๋ฆฌ๋ ๋์ฒํ ์ํฉ์ ๋น ์ ธ๋ฒ๋ ธ์ต๋๋คใ ใ ๊ทธ๋์ ์ฐ๋ฆฌ๋ ๋ ์ฌ์ด ํ๋ จ๋ฐฉ๋ฒ(async/await)์ผ๋ก ๋ญ์น๋ฅผ ๊ต์ก์ํค๊ณ ์ ํฉ๋๋ค!! # ๋น๋๊ธฐ์ ๋๊ธฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ๋ ๊ฐ์ฅ ์ ๊ฒฝ์จ์ผ ํ๋ ๋ถ๋ถ ์ค ํ๋๊ฐ ๋๊ธฐ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๋๋ค. ๋ถ๋ช ๋ก์ง์ ๋ง๊ฒ ์ง ๊ฑฐ ๊ฐ์๋ฐ ๊ฒฐ๊ณผ๊ฐ์ด undefined ์ด๊ฑฐ๋ ์์ ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ์ญ์คํ๊ตฌ ๋น๋๊ธฐ ๋ฌธ์ ๋ฅผ ์์ฌํด..
์ฐ๋ฆฌ๋ ๋ฐ์ดํฐ ์์ ์ด๊ณ ์๋คํด๋ ๊ณผ์ธ์ด ์๋๋งํผ ๊ณผ๊ฑฐ์ ๋นํด ๋ค์ํ ๋ฐ์ดํฐ๋ค์ด ๊ธฐํ๊ธ์์ ์ผ๋ก ๋์ด๋ฌ์ผ๋ฉฐ, ๋ฐ์ดํฐ ํ๋ํ๋๊ฐ ๊ธฐ์ ์ด๋ ๊ฐ์ธ์ ๋ชจ๋ ์์คํ ์์ฐ ์ ๋๋ค. ์ฐ๋ฆฌ๋ ๋ฐ์ดํฐ ์์ธ ์ด ์ ์๊ณ , ์์ผ๋ก๋ ๊ทธ๋ด ๊ฒ์ ๋๋ค. ๋ฐ์ดํฐ๊ฐ ๋ฐฉ๋ํด์ง๋ฉด์ ์๋ฌด๋ฆฌ ์ข์ ์๋ฒ๋ผ๊ณ ํด๋ ์ด๋ฅผ ์์ฉํ๋๋ฐ ์์ด ๋ฌด๋ฆฌ๊ฐ ์์ต๋๋ค. ๊ทธ์ ๋ฐ๋ผ ๊ท๋ชจ๊ฐ ํฐ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ํ์ฌ์ ๊ฒฝ์ฐ ์ฌ๋ฌ ๋์ ์๋ฒ๋ฅผ ๋๊ณ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ฌ ์๋ง์ ํธ๋ํฝ์ ํจ๊ณผ์ ์ผ๋ก ๋ถ์ฐํฉ๋๋ค. ์ ๋ง์ ํธ๋ํฝ์ ์ฌ๋ฌ ๋์ ์๋ฒ๋ก ๋ถ์ฐํด์ค ์ ์๋ ๊ธฐ์ ์ด ์๋ค๋ฉด ํธ๋ํฝ์ ๊ฒฐ๊ตญ ํ๋์ ์๋ฒ๋ก ์ง์ค ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ ๊ฒ ๋๋ค๋ฉด ์๋น์ค ์๋๊ฐ ์์ฒญ๋๊ฒ ๋๋ ค์ง ๊ฒ์ด๊ณ ์ต์ ์ ๊ฒฝ์ฐ ์๋ฒ๊ฐ ๋ง๋น๋์ด ์๋น์ค ์์ฒด๋ฅผ ์ ๊ณตํ ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ์ ๋..
์ด๋ฒ ๊ธ์์๋ ์๊ฒฉ์ผ๋ก ์๋ฒ์ ์ ์ํ๊ฒ ํด์ฃผ๋ OpenSSH ์๋ฒ์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. OpenSSH ์๋ฒ๋ ํ ๋ท ์๋ฒ์ ๊ธฐ๋ฅ์ด ๋์ผํ๋ค๊ณ ๋ณผ ์ ์์ผ๋ ๋ณด์์ ์์ ํ์ง ๋ชปํ๋ ํ ๋ท์ ๋นํด OpenSSH๋ ํจ์ฌ ์์ ํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค. OpenSSH๋ ๋ฐ์ดํฐ ์ ์ก ์ ์ํธํ ํ๋ค๋ ์ฐจ์ด์ ์ด ์์ต๋๋ค. # OpenSSH ์๋ฒ๋ฅผ ๊ตฌ์ถํด๋ณด์ ์ ๋ VMware workstation ํ๊ฒฝ์์ ์๋ฒ๋ฅผ ๊ตฌ์ถํ ๊ฒ์ ๋๋ค. ๋ค์ด๊ฐ๊ธฐ ์์ SSH ์๋ฒ์ ํจํค์ง ์ด๋ฆ์ "openssh-server" ์ด๊ณ ์๋น์ค(๋ฐ๋ชฌ) ์ด๋ฆ์ "sshd"์ ๋๋ค. rpm -qa openssh-server ๋ช ๋ น์ด๋ก ํ์ฌ ์ค์น๋์ด ์๋ openssh-server๋ฅผ ํ์ธํด์ค๋๋ค.(CentOS๋ ๊ธฐ๋ณธ์ ์ผ๋ก openssh๋ฅผ ์ ๊ณตํด์ค๋ค๊ณ ํฉ..
!/bin/sh hap=0 for i in 1 2 3 4 5 6 7 8 9 10 do hap=`expr $hap + $i` done echo "1๋ถํฐ 10๊น์ง์ ํฉ:"$hap hap2=0 for((i=0;i
์ฌ์ฉ์ ์ ์ํจ์ #!/bin/sh myFunction(){ echo "ํจ์ ์์ผ๋ก ๋ค์ด์์" return } echo "ํ๋ก๊ทธ๋จ์ ์์ํฉ๋๋ค." myFunction echo "ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํฉ๋๋ค." exit 0 ํจ์์ ํ๋ผ๋ฏธํฐ ์ฌ์ฉ #!/bin/sh sumFunction(){ echo "$1 $2 ๊ฐ์ ํฉ์ `expr $1 + $2` ์ ๋๋ค" } echo "ํ๋ผ๋ฏธํฐ๋ $1 ์ $2 ์ ๋๋ค" sumFunction $1 $2 #!/bin/sh myFunction(){ result=`expr $1 + $2` return "$result" } temp=$(myFunction 1 2) echo $? export ์ธ๋ถ ๋ณ์๋ก ์ ์ธํฉ๋๋ค. ์ฆ, ์ ์ธํ ๋ณ์๋ฅผ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์์๋ ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค. #!/bin..
#if ๋ฌธ if [ ์กฐ๊ฑด ] then ์ฐธ์ผ ๊ฒฝ์ฐ ์คํ fi *์ฃผ์ํ ์ : '[ ์กฐ๊ฑด ]' ์ฌ์ด์ ๊ฐ ๋จ์ด์๋ ๋ชจ๋ ๊ณต๋ฐฑ์ด ์์ด์ผ ํจ if [ ์กฐ๊ฑด ] ๋์ฐ if test ๋ ๊ฐ๋ฅ #!/bin/sh if [ "woo" = "woo" ] then echo "์ฐธ์ ๋๋ค" fi if test "woo1" = "woo1" then echo "์ฐธ2์ ๋๋ค" fi exit 0 ์กฐ๊ฑด๋ฌธ์ ๋ค์ด๊ฐ๋ ๋น๊ต ์ฐ์ฐ์ ๋ฌธ์์ด ๋น๊ต ๊ฒฐ๊ณผ "๋ฌธ์์ด1" = "๋ฌธ์์ด2" ๋ ๋ฌธ์์ด์ด ๊ฐ์ผ๋ฉด ์ฐธ "๋ฌธ์์ด1" != "๋ฌธ์์ด2" ๋ ๋ฌธ์์ด์ด ๊ฐ์ง ์์ผ๋ฉด ์ฐธ -n "๋ฌธ์์ด" ๋ฌธ์์ด์ด NULL์ด ์๋๋ฉด ์ฐธ -z "๋ฌธ์์ด" ๋ฌธ์์ด์ด NULL์ด๋ฉด ์ฐธ ์ฐ์ ๋น๊ต ๊ฒฐ๊ณผ ์์1 -eq ์์2 ๋ ์์์ด ๊ฐ์ผ๋ฉด ์ฐธ ์์1 -ne ์์2 ๋ ์์์ด ๊ฐ์ง ์์ผ๋ฉด..