โถ 1. root ๋น๋ฐ๋ฒํธ๋ฅผ ๋จผ์ ๋ณ๊ฒฝํ์ฌ ์ค๋ค. #sudo passwd root โถ 2. sshd_config ์ค์ ์ ๋ณด ๋ณ๊ฒฝ #sudo vi /etc/ssh/sshd_config :set nu ๋ฅผ ์ ๋ ฅํ์ฌ ๋ณด๊ธฐ ์ข๊ฒ ๋ผ์ธ์ ํ์. 38 ๋ผ์ธ์ "PermitRootLogin yes" ๋ถ๋ถ์ ์ฃผ์์ ํด์ ํ๊ณ ์ ์ฅ (:wq) โถ 3. ๋ฃจํธ ๊ฒฝ๋ก์ .ssh ๊ฒฝ๋ก๋ฅผ ์์ฑํ์ฌ ์ค๋ค. #sudo mkdir /root/.ssh ๋์ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ด๋ฏธ ๋๋ ํ ๋ฆฌ๊ฐ ์์ด ์์ฑ๋์ง ์์๋ค. โถ 4. ec2์ ์ ์ ์ธ์ฆํค๋ฅผ root๋ก ๋ณต์ฌํ๋ค. #sudo cp /home/ec2-user/.ssh/authorized_keys /root/.ssh โถ 5. sshd๋ฅผ ๋ฆฌ์คํํธ ํ๋ค. #sudo systemctl restart ssh..
Amazon Linux 2 OS์ EC2์์ nginx ์ค์นํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. Amazon Linux 2์์๋ yum์ ํตํ nginx ์ค์น๊ฐ ์ง์๋์ง ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ yum ์ ํตํ ์ค์น ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. sudo yum install nginx yum์ผ๋ก๋ nginx ํจํค์ง๋ฅผ ์ฐพ์ง ๋ชปํฉ๋๋ค. To use, run ์ ๋์์๋ amazon-linux-extras install : topic ๋ฅผ ์ด์ฉํ์ฌ nginx ์ค์น๋ฅผ ์งํํ๋๋ก ํ๊ฒ ์ต๋๋ค. amazon-linux-extras list ๋ช ๋ น์ด๋ฅผ ํตํด ์ค์นํ nginx๋ฅผ ์ฐพ์๋ณด๊ฒ ์ต๋๋ค. amazon-linux-extras list | grep nginx ์กฐํ๋ nginx1์ ๋ํด์ ์ค์น๋ฅผ ์งํํด ๋ณด๊ฒ ์ต๋๋ค. ..
์๋ฐ์์ ๋ณ์๋ช ์ผ๋ก ํด๋์ค๋ฅผ ์ธ์คํด์คํ ํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋ฐฉ๋ฒ 1-์ธ์๋ ์๊ณ ์์ฑ์๋ง ์๋ ํด๋์ค์๋ง ํด๋น ํด๋์ค์ ์ธ์๊ฐ์๋ ์์ฑ์๊ฐ์๋ ๊ฒฝ์ฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ Class๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. Class domainClass = Class.forName("com.femarket.domain." + domainName); Object domain = domainClass.newInstance(); ๋ฐฉ๋ฒ 2 ํด๋์ค์ ์ธ์๊ฐ์๋ ์์ฑ์๊ฐ์๋ ๊ฒฝ์ฐ์๋ ์๋ํ๋ ๋ ์์ ํ ๋ฐฉ๋ฒ์ ํด๋์ค ๊ฐ์ฒด๋ฅผ ์ฟผ๋ฆฌํ์ฌ ํด๋น Constructor๊ฐ์ฒด ๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ด ๊ฐ์ฒด์ ๋ํ newInstance()๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๋๋ค. Class clazz = Class.forName("..
kube config์์ eks ์ ๋ณด๊ฐ ์์ด์ผํด์ ์์ปค๋ ธ๋ ์์ฑ ์ ์๋ ์ ๊ทผ๊ฐ๋ฅํด์ ๋ง์คํฐ๋ ์ด์ฐจํผ aws์์ ๊ด๋ฆฌํด์ aws sts get-caller-identity ์ด๊ฑธ๋ก ๋ณธ์ธ local ์ปดํจํฐ์์ access key, secret key ์ค์ ํ๋์ง ํ์ธํ์๊ณ aws eks --region ${region_name} update-kubeconfig --name ${cluster_name} ์ด๊ฑธ๋ก kube config ํ์ผ ์ ๋ฐ์ดํธํ์ธ์ https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/managing-auth.html ํด๋ฌ์คํฐ ์ธ์ฆ - Amazon EKS ์ด ํ์ด์ง์ ์์ ์ด ํ์ํ๋ค๋ ์ ์ ์๋ ค ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ค๋ง์์ผ ๋๋ ค ์ฃ์กํฉ๋๋ค. ์ ๊น ์๊ฐ..
์๋ฐ์คํฌ๋ฆฝํธ์์ ํ์ฌ ๋ ์ง ๋ฐ ์๊ฐ์ ๊ตฌํ๊ธฐ ์ํด์๋ Date ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. Date ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ์ ๋ ์ง๋ฅผ ์ถ๋ ฅํ๋ฉด YYYY-MM-DD์ ๊ฐ์ ํ์์ ๋ ์ง ํฌ๋งท์ผ๋ก ์ถ๋ ฅ๋์ง ์๊ธฐ ๋๋ฌธ์, Date ๊ฐ์ฒด์์ ์ ๊ณตํ๋ ์ถ์ถ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ง ํฌ๋งท์ ๋ณํํ๋ ์์ ์ด ์ถ๊ฐ์ ์ผ๋ก ํ์ํ๋ค. ํ์ฌ ๋ ์ง, ์๊ฐ ๊ตฌํ๊ธฐ var today = new Date(); console.log(today); // ๊ฒฐ๊ณผ : Sun May 30 2021 15:47:29 GMT+0900 (๋ํ๋ฏผ๊ตญ ํ์ค์) // ๊ฒฐ๊ณผ : Sun May 30 2021 15:47:29 GMT+0900 (๋ํ๋ฏผ๊ตญ ํ์ค์) Date ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ ์์คํ ์ ๋ ์ง๋ฅผ ๊ฐ์ ธ์์ ์ถ๋ ฅํ๋ฉด, ํ์์์ ์ฌ์ฉํ๋ ๋ ์ง ํฌ๋งท(YYYY-MM-DD ..
ajax ์ฌ์ฉํ๋ ์ค ํ๊ฐ์ง ์๋ฌธ์ด ์๊ฒผ์ต๋๋ค. ์ JSON.stringify๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ฉด ์ ์คํ๋ง @RequestBody์์ ๋ฐ์ง ๋ชปํ๋์ง ๋ง์ ๋๋ค. ๊ทธ๋์ data : {test : "test"} ์ data : JSON.stringify์ ํ์ ๋ค์ ์ฝ์๋ก ์ฐ์ด๋ณธ ๊ฒฐ๊ณผ ์ ์๋ object์ด๊ณ ํ์๋ string์ด์์ต๋๋ค. ์ฌ๊ธฐ์ ์ํ! ํ์ต๋๋ค. ๋ด๊ฐ ํํ ๋งํ๋ json๊ณผ js์์ ์ฌ์ฉํ๋ javacscript Object๋ ๋ค๋ฅธ๊ฑฐ๊ตฌ๋! ๊ทธ๋์ ์ด๊ฑฐ์ ๋ํด ๊ธ์ ์ฐพ์๋ณธ ํ ์ ๋ง ์ ์ค๋ช ํด์ฃผ์ ๊ธ์ด ์์ด์ ๊ฐ์ ธ์๋ดค์ต๋๋ค. ์ด๊ธ์ yongseong.log ๋์ ๊ธ์ ๋๋ค. [๊ฐ๋ฐ์์] JSON๊ณผ JavaScript Object์ ์ฐจ์ด์ ์๋ ํ์ธ์. ๊น์ฉ์ฑ์ ๋๋ค.์ ๋ง ๋น์ทํ๊ฒ ์๊ฒจ๋จน์..
var data = {"name":"John Doe"} $.ajax({ type : "post", url : "/test", dataType : "json", //์๋ฒ์์ ๋ฐ์ ๋ฐ์ดํฐ ํ์ contentType: "application/json; charset=utf-8", //์๋ฒ๋ก ๋ณด๋ด๋ ๋ฐ์ดํฐ ํ์ data : JSON.stringify(data), success : function(result) { alert(result.success); }, error: function(e){ alert("fail"); } }); ๋งจ๋ ๊น๋จน์ด์ ์ ๊ฐ ๋ณด๊ธฐ ์ํด ์๋๋ค. $.ajax({ type : `http method type`, url : `url`, data : `์๋ฒ์ ์ ์กํ ๋ฐ์ดํฐ`, contentTy..
CIDR? AWS, GCP, Azure ๋ฑ ํผ๋ธ๋ฆญ ํด๋ผ์ฐ๋ ๋ฑ์ ์ฌ์ฉํ ๋ ๋คํธ์ํฌ ์ค์ ์์ VPC ๋ฐ Subnet ์ ์์ฑํ์ฌ ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ฑํ๊ฒ ๋ฉ๋๋ค. ์ด ๋ CIDR(Classless Inter-Domain Routing) ๋ธ๋ก์ ์ด์ฉํ์ฌ 10.10.1.0/24 ๋ฑ๊ณผ ๊ฐ์ด ํ์ํ๊ฒ ๋๋๋ฐ ์ฃผ๋์ด ๊ฐ๋ฐ์ ๊ผฌ๊ผฌ๋ง ์์ ์๋ AWS ์ฝ์์์ ๋คํธ์ํฌ, ์ํ๋ฆฌํฐ๊ทธ๋ฃน ๋ฑ์์ ๋ง์ด ๋ด ์์ง๋ง ์ ๋ฐฐ๋ค์ด ์๋ ค์ค ๋๋ก ๊ทธ๋ฅ Cํด๋์ค์ผ๋๋ /24, ํน์ IP๋ง ์ง์ ํ ๋๋ /32 ๋ก ์๊ณ ์ด์์์๊ณ , ์์ง๋ ๊ทธ๋ ๊ฒ ์๊ณ ์๋ ์ฌ๋๋ค์ด ๋ถ๋ช ํ ์์ ๊ฒ ๊ฐ์์ ๊ฐ๋จํ์ง๋ง ์ ํํ๊ฒ! ํฌ์คํธ๋ฅผ ์์ฑ ํด ๋ณด๋ ค ํฉ๋๋ค. ์ฐธ๊ณ ๋ก CIDR๋ ์ฌ์ด๋ ๋ผ๊ณ ์ฝ์ผ๋ฉด ๋๊ณ , ์ ํฝ์์ ๋ฏธ๊ตญ์ธ ๊ฐ๋ฐ์๊ฐ ๋ฐ์ํ๋๊ฑธ ๋ค์ด๋ณด๋ ์ธ์ด๋ ์ ๋๋ก ๋ฐ์ ํฉ..
๋๋ฏธ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ ํ๋ก์์ ์์ฑ ํ์ด์ง ํ ์คํธ์ ๊ฐ์ด ๋ง์ ์์ ๋๋ฏธ๋ฐ์ดํฐ(dummy data)๊ฐ ํ์ํ ๊ฒฝ์ฐ, ํ๋ก์์ ๋ฅผ ์์ฑํด์ ๋๋ฏธ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ ์ ์๋ค. Workbench์์ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํ๋ค. DELIMITER $$ DROP PROCEDURE IF EXISTS loopInsert$$ CREATE PROCEDURE loopInsert() BEGIN DECLARE i INT DEFAULT 1; WHILE i
๋ก๋๋ฐธ๋ฐ์๋? ๋ก๋๋ฐธ๋ฐ์๋ ์๋ฒ์ ๊ฐํด์ง๋ ๋ถํ(=๋ก๋)๋ฅผ ๋ถ์ฐ(=๋ฐธ๋ฐ์ฑ)ํด์ฃผ๋ ์ฅ์น ๋๋ ๊ธฐ์ ์ ํต์นญํ๋ค. ํด๋ผ์ด์ธํธ์ ์๋ฒํ(Server Pool, ๋ถ์ฐ ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ฑํ๋ ์๋ฒ๋ค์ ๊ทธ๋ฃน) ์ฌ์ด์ ์์นํ๋ฉฐ, ํ ๋์ ์๋ฒ๋ก ๋ถํ๊ฐ ์ง์ค๋์ง ์๋๋ก ํธ๋ํฝ์ ๊ด๋ฆฌํด ๊ฐ๊ฐ์ ์๋ฒ๊ฐ ์ต์ ์ ํผํฌ๋จผ์ค๋ฅผ ๋ณด์ผ ์ ์๋๋ก ํ๋ค. ๋ง์ฝ Scale-out์ ๋ฐฉ์์ผ๋ก ์๋ฒ๋ฅผ ์ฆ์คํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค๋ฉด ์ฌ๋ฌ ๋์ ์๋ฒ๋ก ํธ๋ํฝ์ ๊ท ๋ฑํ๊ฒ ๋ถ์ฐํด์ฃผ๋ ๋ก๋๋ฐธ๋ฐ์ฑ์ด ๋ฐ๋์ ํ์ํ๋ค. OSI 7 ๊ณ์ธต์ด๋? ๋คํธ์ํฌ ํต์ ์์คํ ์ ํฌ๊ฒ ์ผ๊ณฑ ๊ฐ์ง์ ๊ณ์ธต(OSI 7 layers, ๊ฐ๋ฐฉํ ํต์ ์ ์ํ ๊ตญ์ ํ์ค ๋ชจ๋ธ)์ผ๋ก ๋๋๋ค. ๊ฐ๊ฐ์ ๊ณ์ธต(Layer)์ด L1/L2/L3โฅโฅL7์ ํด๋นํ๋ค. ์์ ๊ณ์ธต์์ ์ฌ์ฉ๋๋ ์ฅ๋น๋ ํ์ ๊ณ์ธต์ ์ฅ..
S3 S3๋ AWS๊ฐ ์ ๊ณตํ๋ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง ์๋น์ค์ ๋๋ค. 99.999999%๋ผ๋ ๋์ ๋ด๊ตฌ์ฑ์ด ํน์ง์ธ ์คํ ๋ฆฌ์ง๋ก ๋ฏธ๋ฆฌ ์คํ ๋ฆฌ์ง ์ฉ๋ ๋ฑ์ ์ ์ํ์ง ์๊ณ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ ๊ณต๊ฐ ์ ์ฑ , ๋ฐ์ดํฐ ์ํธํ, ๋น์ฉ ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฅ๊ธฐ ๋ณด๊ดํ๊ธฐ ์ํ ๋ผ์ดํ์ฌ์ดํด ์ ์ฑ ๋ฑ์ ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ ์ฉํ ์๋น์ค์ ๋๋ค. S3์์๋ ์คํ ๋ฆฌ์ง์ ๊ธฐ๋ณธ ๋จ์๋ก '๋ฒํท'์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ์์ญ์ ์์ฑํ๊ณ ๊ทธ ์์ ํ์ผ์ ์ ์ฅํฉ๋๋ค. CloudFront CloudFront๋ AWS๊ฐ ์ ๊ณตํ๋ ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ(Content Delivery Network, CDN) ์๋น์ค์ ๋๋ค. CDN์ ์ธํฐ๋ท์์ ์น ์ฝํ ์ธ , ์ด๋ฏธ์ง, ๋์์, ์ ํ๋ฆฌ์ผ์ด์ ๋ฑ์ ๋น ๋ฅด๊ฒ ์ ์กํ๊ธฐ ์ํ ๊ตฌ์กฐ๋ก ๋์ด ์์ต๋๋ค. CloudFront๋ ์ ..
ํค๋ฐ๋์์ ์๋ ์ฝ๋๋ก ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋์ ๊ฐ์ ์๋ต์ ๋ฐ์ ์ ์์ต๋๋ค. analyzer๋ ์ปค์คํ analyzer ์ฌ์ฉํ์ต๋๋ค. tokenizer๋ nori๋ฅผ ์ฌ์ฉํ์๊ณ , filter๋ shingle๋ฅผ ์ฌ์ฉํ์์ต๋๋ค. ์ด ๊ฐ์ ์๋ฐ์์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํด์ฃผ์๋ฉด ๋ฉ๋๋ค. AnalyzeRequest request = AnalyzeRequest.withIndexAnalyzer("st_pdt", "nori_discard_1", pdt.getS_name()); AnalyzeResponse response = client.indices().analyze(request, RequestOptions.DEFAULT); List tokens = response.getTokens(); for(An..
๋ฌดํ ์คํฌ๋กค์ ์ด์ปค๋จธ์ค ๊ด๋ จ๋ ์น์ด๋ ์ฑ์ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค. ์คํฌ๋กค์ ์์น๊ฐ ์ด๋ ํ ์กฐ๊ฑด์ ์ถฉ์กฑํ๊ฒ ๋๋ฉด ์ถ๊ฐ์ ์ผ๋ก ์ํ๋ค์ ๋ถ๋ฌ์ต๋๋ค. [JavaScript] ๋ฌดํ ์คํฌ๋กค ์ ์ํ ์์น ์ ์ง ๋ฌดํ ์คํฌ๋กค ๊ธฐ๋ฅ์ ๊ตฌํํ๋๋ฐ ์์ด ๋ฐ๋์ ๋ณํ๋์ด์ผ ํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๋ฐ๋ก ๋ฌดํ ์คํฌ๋กค๋ก ๋ ๋๋ง๋ ์ํ์ ๋๋ฅด๊ณ ๋ค์ [๋ค๋ก๊ฐ๊ธฐ]๋ฅผ ํ์ ์ ์ฌ์ ํ ๊ทธ ์ํ์ ์์น๋ก ์์ผ ํ๋ค๋ ๊ฒ kingofbackend.tistory.com ๊ทธ๋ผ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ๋ฐ๋ก ์์๋ณด๊ฒ ์ต๋๋ค. ๋ฌดํ ์คํฌ๋กค ์ฝ๋์ ๋๋ค. var stopping = false; var end = false; $(window).scroll(function () { var cst = $(window).scrollTop(); var ..
๋ฌดํ ์คํฌ๋กค ๊ธฐ๋ฅ์ ๊ตฌํํ๋๋ฐ ์์ด ๋ฐ๋์ ๋ณํ๋์ด์ผ ํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๋ฐ๋ก ๋ฌดํ ์คํฌ๋กค๋ก ๋ ๋๋ง๋ ์ํ์ ๋๋ฅด๊ณ ๋ค์ [๋ค๋ก๊ฐ๊ธฐ]๋ฅผ ํ์ ์ ์ฌ์ ํ ๊ทธ ์ํ์ ์์น๋ก ์์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. [JavaScript] ๋ฌดํ ์คํฌ๋กค ๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ ๋ฌดํ ์คํฌ๋กค์ ์ด์ปค๋จธ์ค ๊ด๋ จ๋ ์น์ด๋ ์ฑ์ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค. ์คํฌ๋กค์ ์์น๊ฐ ์ด๋ ํ ์กฐ๊ฑด์ ์ถฉ์กฑํ๊ฒ ๋๋ฉด ์ถ๊ฐ์ ์ผ๋ก ์ํ๋ค์ ๋ถ๋ฌ์ต๋๋ค. ๊ทธ๋ผ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง kingofbackend.tistory.com ๋ง์ฝ, ์ด ๊ธฐ๋ฅ์ด ๊ตฌํ๋์ด ์์ง ์์ผ๋ฉด ์ํ์ ๋๋ฅด๊ณ ๋ง์ ๋ค์ง ์์ [๋ค๋ก๊ฐ๊ธฐ]๋ฅผ ๋๋ ์ ๋ ๋ค์ ์ด ์ํ์ด ๋์๋ ๊ณณ๊น์ง ์คํฌ๋กค์ ๋ด๋ ค์ผ ํฉ๋๋ค. ์ค๋์ ์ง, ์์ด๋์ด์ค์ ์ด๋ป๊ฒ ๋์ด์๋ ์ง ํ๋ฒ ๋ณด๊ฒ ์ต๋๋ค. [์ค๋์ ์ง] ์ค๋์ ์ง..
function setSessionStorage(key, value){ sessionStorage.setItem(key, value); } function getSessionStorage(key){ return sessionStorage.getItem(key); } function setJSONSessionStorage(key, value){ sessionStorage.setItem(key, JSON.stringify(value)); } function getJSONSessionStorage(key){ return JSON.parse(sessionStorage.getItem(key)); } function removeSessionStorage(key){ sessionStorage.removeItem(ke..
IAM ์ด๋? IAM(AWS Identity and Access Management)์ AWS ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค๋ฅผ ์์ ํ๊ฒ ์ ์ดํ ์ ์๋ ์น ์๋น์ค์ ๋๋ค. IAM์ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋๋ก ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ๋ ๋์์ ์ ์ดํฉ๋๋ค. ๋ฌผ๋ฆฌ ๋ฐ์ดํฐ ์ผํฐ๋ฅผ ์๊ฐํด๋ด ์๋ค. ์ถ์ ์ด ํ๊ฐ๋ ์ธ์๋ค์ ์ถ์ ์นด๋๋ฅผ ํตํด ์ถ์ ํ๊ฑฐ๋, ๋ฆฌ์คํธ์ ๋ฐฉ๋ฌธ ๊ธฐ๋ก์ ํ๊ณ ํ๊ฐ๋ฅผ ๋ฐ์์ผ ํฉ๋๋ค. IAM์ ์ด๋ฌํ ๋ฐ์ดํฐ ์ผํฐ์ ์ถ์ ๊ถํ์ ๋ถ์ฌํ๋ ์ถ์ ์นด๋๋, ๋ฐฉ๋ฌธ ํ๊ฐ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ AWS ์๋น์ค์ ๋๋ค. ๋ณด์ ์ฃผ์ฒด๊ฐ ์ธ์ฆ(Authentication)๊ณผ ๊ถํ๋ถ์ฌ(Authorization)์ ๋ฐ์ ๋ฆฌ์์ค์ ๋ํ ์์ฒญ์ ์น์ธํ๋ ๊ฒ์ด IAM์ ์ฃผ์ ์๋ ๋ฐฉ์์ ๋๋ค. AWS ๊ณ์ ์ ์ฒ์ ์์ฑํ๋ ๊ฒฝ์ฐ์๋ ์ ์ฒด AWS ์๋น..
์ด ๊ธ์ ๋์ปค ๊ณต๋ถํ ํ์ ์ ๋จ๊ธฐ๊ธฐ ์ํ ๊ธ์ ๋๋ค. $ docker run -d -p 8080:80 --name nginx-exposed --restart always nginx ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ์ธ๋ถ์์ ์ปจํ ์ด๋ ๋ด๋ถ์ ๋๋ฌํ ์ ์์ต๋๋ค. -d(detach) : ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ์ต์ -p(publish) : ์ธ๋ถ์์ ํธ์คํธ๋ก ๋ณด๋ธ ์์ฒญ์ ์ปจํ ์ด๋ ๋ด๋ถ๋ก ์ ๋ฌํ๋ ์ต์ ์ผ๋ก -p : ํ์์ ๋๋ค. * ์ฐธ๊ณ : ์ปจํ ์ด๋ ๊ด๋ จ ์ค์ ์ ์ถํ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ง์ฝ ์ค์ ์ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด ์ปจํ ์ด๋๋ฅผ ์๋กญ๊ฒ ๋ค์ ์์ฑํด์ผ ํฉ๋๋ค. ์ด๋ ๋์ปค์ ํน์ง์ผ๋ก ์ปจํ ์ด๋๋ฅผ ๋ฐฐํฌ ์ํ๋ก ์ ์งํ ์ ์๊ฒ๋ ๋์์ค๋๋ค.
์ด ๊ธ์ koreanhole ๋์ ๊ธ์ ๋๋ค. Intro ์ต๊ทผ UOS๊ณต์ง์ฌํญ ์ฑ์ ๋ฐฑ์๋ ์์คํ ์ ๊ต์ฒดํ๋ ์์ ์ ํ๊ณ ์์ต๋๋ค. ๊ธฐ์กด Firebase์ Firestore๋ฅผ ์ฌ์ฉํ๊ณ ์์๋๋ฐ ์ด๋ฒ์ ์๋กญ๊ฒ Nestjs๋ก ์๋ฒ๋ฅผ ์์ฑํ๋ ์ค์ ๋๋ค. UOS๊ณต์ง์ฌํญ์ ์๋ฒ์๋ ์ด 3๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ( department, notice, user )์ด ์์ต๋๋ค. ๊ฐ ๋ชจ๋ธ์ ๋ ์ฝ๋ ๋ง๋ค ๊ณ ์ ์ id๊ฐ์ ๋ฐ๊ธํ๋๋ฐ ๋ชจ๋ uuid(v4)๋ก ๋ฐ๊ธํ์ต๋๋ค. uuid๋ฅผ ๋ง๊ตฌ์ก์ด๋ก ๋ฐ๊ธํ๊ฒ ๋๋ฉด ํน์ ๋์ค์ ๊ฒน์น๋ uuid๊ฐ ์์ง ์์๊น? UUID ์๊ฐ uuid๋ ๋ฒ์ฉ๊ณ ์ ์๋ณ์(Universal Unique IDentifier)๋ผ๊ณ ํ๋ค. ๋คํธ์ํฌ์์ ์กด์ฌํ๋ ๊ฐ์ฒด๋ค์ ์๋ณํ๊ณ ๊ตฌ๋ณํ๊ธฐ ์ํด ๊ฐ๋ฐ ์ฃผ์ฒด๊ฐ ์ค์ค๋ก ์ด๋ฆ์ ..
์น์ ๊ฐ๋ฐํ๋ฉด ํ๋ฒ์ ๊ผญ Cors ๋ฌธ์ ๋ฅผ ๋ง๋ฅ๋จ๋ฆฝ๋๋ค. ์ฑํ ์๋ฒ๋ฅผ aws๋ก ๊ตฌ์ถํ๊ณ , ๋ก์ปฌ์์ ์ฑํ ์๋ฒ๋ฅผ ์ด์ฉํ์ฌ ์ฑํ ์ ๊ฐ๋ฐํ๊ณ ์๋๋ฐ ์ญ์๋ ๋๋ฉ์ธ์ด ๋ฌ๋ผ Cors ๋ฌธ์ ๊ฐ ๋ฐ์ํ์์ต๋๋ค. Node.js ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ค 'Cors'๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ง๋ง Socket.io์์ ๋ฐ์ํ ๋ฌธ์ ๋ผ์ ์ด๊ฑธ๋ก๋ ํด๊ฒฐํ ์ ์์ต๋๋ค. ๊ทธ๋์ ๊ตฌ๊ธ๋ง์ ํด๋ณธ ๊ฒฐ๊ณผ Socker.io ๊ณต์๋ฌธ์์ ๋คํํ ์ ์ค๋ช ๋์ด ์์ต๋๋ค. "socket.io": "^4.1.3" ๋ฒ์ ๊ธฐ์ค์ ๋๋ค. const io = require("socket.io")(server, { cors: { origin: "*", methods: ["GET", "POST"] } }); ์ ์ฝ๋๋ฅผ server-side์ ์์ฑํด์ฃผ์๊ณ , client-side์๋ ์..
์ด ๊ธ์ ๋์ปค ๊ณต๋ถํ ํ์ ์ ๋จ๊ธฐ๊ธฐ ์ํ ๊ธ์ ๋๋ค. ์ด๋ฏธ์ง๋ ๋ ์ง์คํธ๋ฆฌ๋ผ๊ณ ํ๋ ์ ์ฅ์์ ๋ชจ์ฌ์์ต๋๋ค. ๋ ์ง์คํธ๋ฆฌ๋ ๋์ปค ํ๋ธ์ผ์๋ ์๊ณ , ๋ด๋ถ์ ๊ตฌ์ถํ ๋ ์ง์คํธ๋ฆฌ์ผ ์๋ ์์ต๋๋ค. ๋ง์ฝ ๋ณ๋์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ๋ช ์ํ์ง ์์ผ๋ฉด ๋์ปค ํ๋ธ์์ ์ด๋ฏธ์ง๋ฅผ ์ฐพ์ต๋๋ค. $ docker search nginx ์ ๋ช ๋ น์ด๋ก nginx์ ๋ํ ์ด๋ฏธ์ง๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. INDEX : ์ด๋ฏธ์ง๊ฐ ์ ์ฅ๋ ๋ ์ง์คํธ๋ฆฌ์ ์ด๋ฆ์ ๋๋ค. NAME : ๊ฒ์๋ ์ด๋ฏธ์ง ์ด๋ฆ์ ๋๋ค. ๊ณต์ ์ด๋ฏธ์ง๊ฐ ์๋๋ผ๋ฉด '๋ ์ง์คํธ๋ฆฌ ์ฃผ์/์ ์ฅ์ ์์ ์/ ์ด๋ฏธ์ง ํํ' ์ ๋๋ค. DESCRIPTION : ์ด๋ฏธ์ง์ ๋ํ ์ค๋ช ์ ๋๋ค. STARS : ์ข์์ ๊ฐฏ์์ ๋๋ค. OFFICAL : ์ด๋ฏธ์ง์ ํฌํจ๋ ์ ํ๋ฆฌ์ผ์ด์ , ๋ฏธ๋ค์จ์ด ๋ฑ์ ๊ฐ๋ฐํ ์ ์ฒด์์ ๊ณต์์ ์ผ๋ก ์ ๊ณตํ..
์ด ๊ธ์ ๊น์ข ๋ฏผ(kimjmin@gmail.com)๋์ ๊ธ์ ๋๋ค. ๋ฌด๋จ ๋ณต์ /์์ ์ ๊ธํฉ๋๋ค. Elasticsearch๋ ๋น ๋ฅธ ๊ฒ์์ ์ํด ๊ฒ์์ ์ฌ์ฉ๋ ํ ๋ค์ ๋ฏธ๋ฆฌ ๋ถ๋ฆฌํด์ ์ญ ์ธ๋ฑ์ค์ ์ ์ฅํฉ๋๋ค. ํ์ง๋ง ๊ณผํ ์ฉ์ด์ง ๊ฒ์ ๊ฐ์ ํน์ ํ ์ฌ์ฉ ์ฌ๋ก์ ๋ฐ๋ผ ํ ์ด ์๋ ๋จ์ด์ ์ผ๋ถ๋ง ๊ฐ์ง๊ณ ๋ ๊ฒ์ํด์ผ ํ๋ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. RDBMS์ LIKE ๊ฒ์ ์ฒ๋ผ ์ฌ์ฉํ๋ wildcard ์ฟผ๋ฆฌ๋ regexp (์ ๊ท์) ์ฟผ๋ฆฌ๋ ์ง์์ ํ์ง๋ง, ์ด๋ฐ ์ฟผ๋ฆฌ๋ค์ ๋ฉ๋ชจ๋ฆฌ ์๋ชจ๊ฐ ๋ง๊ณ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ Elasticsearch์ ์ฅ์ ์ ํ์ฉํ์ง ๋ชปํฉ๋๋ค. ์ด๋ฐ ์ฌ์ฉ์ ์ํด ๊ฒ์ ํ ์ ์ผ๋ถ๋ง ๋ฏธ๋ฆฌ ๋ถ๋ฆฌํด์ ์ ์ฅ์ ํ ์ ์๋๋ฐ ์ด๋ ๊ฒ ๋จ์ด์ ์ผ๋ถ๋ฅผ ๋๋ ๋ถ์๋ฅผ NGram ์ด๋ผ๊ณ ํฉ๋๋ค. ๋ณดํต์ unigram(์ ๋๊ทธ๋จ ..
์ด ๊ธ์ ์ฟ ๋ฒ๋คํฐ์ค ๊ณต๋ถํ ํ์ ์ ๋จ๊ธฐ๊ธฐ ์ํ ๊ธ์ ๋๋ค. $ kubectl get pod pod-name -o yaml ์ ๋ช ๋ น์ด๋ ํ๋์ ๋ํ yaml ํ์ผ ๋ด์ฉ์ ๋ณด์ฌ์ค๋๋ค. $ kubectl get pods pod-name -o yaml > pod.yaml ๋ฐ๋ผ์ ์์ ๋ช ๋ น์ด๋ฅผ ํ๊ฒ ๋๋ฉด ์ถํ ํด๋น ํ๋๋ฅผ ์์ฑํ๊ธฐ ์ฉ์ดํฉ๋๋ค.
์ด ๊ธ์ ์ฟ ๋ฒ๋คํฐ์ค ๊ณต๋ถํ ํ์ ์ ๋จ๊ธฐ๊ธฐ ์ํ ๊ธ์ ๋๋ค. ์ฟ ๋ฒ๋คํฐ์ค์์ ํ๋ ์์ฒด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ํ๋๋ฅผ ์๋ ๋ณต๊ตฌํด์ ํ๋๊ฐ ํญ์ ๋์ํ๋๋ก ๋ณด์ฅํ๋ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. deployment๋ก ์์ฑํ ์ค๋ธ์ ํธ์ ๊ทธ๋ฅ ํ๋ ์ค๋ธ์ ํธ 2๊ฐ๊ฐ ์๊ณ , ์ด๋ฅผ ์ญ์ ํ๋ค๊ณ ํ์ ์ kubectl get pods ๋ช ๋ น์ด๋ก์ค๋ธ์ ํธ๋ค์ ํ์ธํด๋ณด๋ฉด deployment ์ค๋ธ์ ํธ๋ง ์ด์์์ต๋๋ค. deployment ์์ ์๋ replicat์ ์ ์ํด์ ํ๋์ ๊ฐฏ์๋ฅผ ์ ์งํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ deployment๋ก ์์ฑํ ํ๋๋ค์ ์ญ์ ๋๋ ๋ค์ ์์ฑ์ด ๋ฉ๋๋ค. age๋ฅผ ๋ด๋ ๋ค์ ์์ฑ๋๊ฑธ ์ ์ ์์ต๋๋ค. ํ์ง๋ง ๊ทธ๋ฅ ํ๋๋ ์ด๋ฅผ ๊ด๋ฆฌํ๋ ์ปจํธ๋กค๋ฌ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋๋ณต๊ตฌ๊ฐ ๋ณด์ฅ๋์ง ์์ต๋๋ค. *์ฐธ๊ณ : ์ปจํธ๋กค๋ฌ๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ..
์ด ๊ธ์ ์ฟ ๋ฒ๋คํฐ์ค ๊ณต๋ถํ ํ์ ์ ๋จ๊ธฐ๊ธฐ ์ํ ๊ธ์ ๋๋ค. ๋ฐฐํฌํ ํ๋์ ์ ๊ทผ ํ๊ธฐ ์ํด์๋ $ kubectl exec -it nginx-pod -- /bin/bash ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ฃผ์ด์ผ ํฉ๋๋ค. ์๋ 2๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์์ ๋ก ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. $ kubectl exec -it nginx-pod ls -l /run $ kubectl exec -it nginx-pod -- ls -l /run ์ฒซ๋ฒ์งธ ๋ช ๋ น์ด๋ -l ์ต์ ์ exec์ ์ต์ ์ผ๋ก ์ธ์ํ๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ฐ๋ผ์ ๋๋ฒ์งธ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด ์๋ํ๋๋ก /run์ ๊ถํ์ ๋ณผ ์ ์์ต๋๋ค. ์ด์ฒ๋ผ ๊ตณ์ด ํ์ํ์ง ์์๋ exec๋ฅผ ์ฌ์ฉํ ๋ ๋ช ์์ ์ผ๋ก '--'๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฌ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
distro-stable version ์ค์น (apt) ๊ฐ๋จํ๊ฒ apt๋ฅผ ์ด์ฉํด ์ค์นํด๋ณด๊ฒ ์ต๋๋ค. $ sudo apt update $ sudo apt install nodejs $ sudo apt install npm ๊ทธ๋ฐ๋ฐ ๋ฒ์ ์ด ๋๋ฌด ๋ฎ์ต๋๋ค. ์ต์ ๋ฒ์ ์ ๋ฐ๊ธฐ ์ํด PPA(Personal package archive)๋ฅผ ์ฌ์ฉํด๋ณด๊ฒ ์ต๋๋ค. PPA๋ก ์ค์น NodeSource์ ์ํด ๊ด๋ฆฌ๋๋ PPA์์ ์ข ๋ ์ต์ ๋ฒ์ ์ ๋ฐ์๋ณด๊ฒ ์ต๋๋ค. ๊ฒ์๋ฌผ ์์ฑ ์ผ์ ๊ธฐ์ค LTS ๋ฒ์ ์ 12.18.3, Latest ๋ฒ์ ์ 14.7.0์ธ๋ฐ Latest์ธ 14๋ฒ์ ์ผ๋ก ์ค์นํด๋ณด๊ฒ ์ต๋๋ค. $ curl -sL https://deb.nodesource.com/setup_14.x -o nodesource_14_setup.sh ์ค..
์ด ๊ธ์ ์ฟ ๋ฒ๋คํฐ์ค ๊ณต๋ถํ ํ์ ์ ๋จ๊ธฐ๊ธฐ ์ํ ๊ธ์ ๋๋ค. ๊ธฐ๋ณธ ์ค๋ธ์ ํธ๋ก ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ ์ ์์ง๋ง ํ๊ณ๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ณ ์ ๊ธฐ๋ณธ ์ค๋ธ์ ํธ ์ธ ๋ค์ํ ์ค๋ธ์ ํธ๋ค์ด ์กด์ฌํ๋๋ฐ ์ด๋ฒ์ ๋ํ๋ก์ด๋จผํธ ์ค๋ธ์ ํธ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ๋ํ๋ก์ด๋จผํธ ๋ํ๋ก์ด๋จผํธ๋ ํ๋ง๋๋ก ํ๋ + ๋ ํ๋ฆฌ์นด์ ์ ๋๋ค. * ์ฐธ๊ณ : ๋ ํ๋ฆฌ์นด์ ์ ํ๋์ ์๋ฅผ ๋ณด์ฅํด์ฃผ๋ ์ค๋ธ์ ํธ์ ๋๋ค. ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์์์ API ์๋ฒ์ ์ปจํธ๋กค๋ฌ ๋งค๋์ ๋ ๋จ์ํ ํ๋์ ๊ฐ์๊ฐ ์๋ ๋ํ๋ก์ด๋จผํธ์ฒ๋ผ ๋ค์ํ ์ค๋ธ์ ํธ๋ฅผ ๊ฐ์ํฉ๋๋ค. ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ ๋ ์ฌ์ฉํ๋ ๋ช ๋ น์ด๋ก๋ ๊ธฐ๋ณธ์ ์ผ๋ก create, apply ์ ์ฌ์ฉํฉ๋๋ค. ๋ํ๋ก์ด๋จผํธ๋ก ์์ฑํ ํ๋๋ฅผ ๋๋ฆฌ๊ณ ์ถ์ผ๋ฉด scale ๋ช ๋ น์ด๋ฅผ ๋ค์ ์ณ์ผํ์ง๋ง yaml์ ์ฌ์ฉํ์ฌ ๋ํ..
์ด ๊ธ์ ์ฟ ๋ฒ๋คํฐ์ค ๊ณต๋ถํ ํ์ ์ ๋จ๊ธฐ๊ธฐ ์ํ ๊ธ์ ๋๋ค. ์ค๋ธ์ ํธ๋? ํ๋์ ๋ํ๋ก์ด๋จผํธ๋ ์คํ๊ณผ ์ํ๊ฐ์ ๊ฐ์ง๋ ๋ฐ ์ด๋ฌํ ํ๋์ ๋ํ๋ก์ด๋จผํธ๋ฅผ ๊ฐ๋ณ ์์ฑ์ ํฌํจํด ๋ถ๋ฅด๋ ๋จ์๊ฐ ์ค๋ธ์ ํธ์ ๋๋ค. * ์ฐธ๊ณ : ํ๋๋ ์ค๋ธ์ ํธ์ด๋ค. ๊ธฐ๋ณธ ์ค๋ธ์ ํธ ๊ธฐ๋ณธ ์ค๋ธ์ ํธ์ ์ข ๋ฅ๋ก๋ ํ๋, ๋ค์์คํ์ด์ค, ๋ณผ๋ฅจ, ์๋น์ค์ ๋๋ค. ํ๋ ์ฟ ๋ฒ๋คํฐ์ค์์ ์คํ๋๋ ์ต์๋จ์์ ๋๋ค. ๋ ๋ฆฝ์ ์ธ ๊ณต๊ฐ๊ณผ IP๋ฅผ ๊ฐ์ง๋ฉฐ, ํ๋ ์ด์์ ์ปจํ ์ด๋๋ฅผ ๊ฐ์ง์ง๋ง ๋ณดํต 1 ํ๋ 1 ์ปจํ ์ด๋ ๊ตฌ์กฐ์ ๋๋ค. ๋ค์์คํ์ด์ค ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์์ ์ฌ์ฉ๋๋ ๋ฆฌ์์ค๋ค์ ๊ตฌ๋ถํด ๊ด๋ฆฌํ๋ ๊ทธ๋ฃน์ ๋๋ค. ๋ณผ๋ฅจ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋๋ ์ด๋์ ์์๋๋ ๊ฐ๋ ์ด ์๋์ง๋ง ํ๋๊ฐ ์ฌ๋ผ์ง๋๋ผ๋ ๋ณด์กด ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ์ค๋ธ์ ํธ์ ๋๋ค. * ์ฐธ๊ณ : ํ๋๋ ์ธ์ ๋ ์ฃฝ์์ ์๋ ์ค๋ธ์ ํธ์ ๋๋ค...
์ด ๊ธ์ ์ฟ ๋ฒ๋คํฐ์ค ๊ณต๋ถํ ํ์ ์ ๋จ๊ธฐ๊ธฐ ์ํ ๊ธ์ ๋๋ค. ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ ๋ ๋ช ๋ น์ด๋ง์ผ๋ก ํ๊ณ๊ฐ ์์ด yaml์ ์คํ์ ์์ฑ ํ ์์ฑํฉ๋๋ค. ์์ฑํ yaml ํ์ผ ๊ธฐ์ค์ผ๋ก run, create, apply๋ก ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๋๋ฐ create, apply์ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค. run๊ณผ create ๋น๊ต run์ ํ๋ 1๊ฐ๋ง ์์ฑํ๊ณ ๊ด๋ฆฌํด์ค๋๋ค. create๋ ๊ทธ๋ฃน ๋ด ํ๋ 1๊ฐ๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํด์ค๋๋ค. run์ผ๋ก ์์ฑํ ํ๋๋ ์ด์ฝํ์ด1๊ฐ์ด๊ณ , create๋ก ์์ฑํ ํ๋๋ ์ด์ฝํ์ด ๋ฐ์ค ์์ ์๋ ์ด์ฝํ์ด1๊ฐ์ ๋๋ค. create๊ณผ apply ๋น๊ต ์ค๋ธ์ ํธ๊ฐ ๋ํ๋ก์ด๋จผํธ ์ผ ๊ฒฝ์ฐ replicas ๋ฅผ ์ง์ ํด์ฃผ์ด์ ํ๋์ ๊ฐฏ์๋ฅผ ๋ณด์ฅ๋ฐ์ ์ ์์ต๋๋ค. ๋ง์ฝ create๋ฅผ ์ด์ฉํ์ฌ ๋ํ๋ก์ด๋จผํธ ์์ฑํ์ ๊ฒฝ์ฐ y..