์ด ๊ธ์ ์ ์๊ถ์ ์๋ฆฌ๋ฐค ๋์๊ฒ ์์ต๋๋ค. "์ํธํ ํต์ " ๋ญ๊ฐ ํ ๋ฆฌ์ฐ๋ ๋ธ๋ก๋ฒ์คํฐ ์ฐ์ ์คํ์ด ์ก์ ์ํ์์๋ ๋์ฌ๋ฒํ ๋จ์ด์ฃ ํ์ง๋ง ์๊ฐ ์ธ๋ก ์ฐ๋ฆฌ ์ผ์์ํ์์ ๋ง์ด ์ฌ์ฉํ๊ณ ์์ด์. ๊ทธ ๋ํ์ ์ธ ์๊ฐ https ์ฃ https ๋ ๊ธฐ์กด์ ์ธํฐ๋ท ๋ฐฉ์(http)์ ๋ณด์์ ๊ฒฐํฉํ ๊ฒ์ด๊ณ , ์ค๋์ ๊ทธ "๋ณด์" ์ด ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋์ง์ ๋ํด ๊ณต๋ถํ ๊ฑฐ์์. 1. ๊ทธ "๋ณด์"์ด ๋ญ๋ฐ ์ํธํ ํต์ ์ด ๊ฐ๋ฅํ ๊ฒ์ผ๊น? ์ํธํ ํต์ ์ SSL(๋๋ TLS)๋ผ๋ ํ๋กํ ์ฝ์ ์ฌ์ฉํด์ ์ธ์ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ๋ ๊ฒ์ ์๋ฏธํด์. ์ฐ๋ฆฌ๊ฐ ์ฒ์ ๋ง๋ ์ฌ๋๊ณผ ์ธ์ฌํ ๋ฏ ์ฌ์ฉ์์ ์น์๋ฒ๊ฐ ์ํธํ ํต์ ์ ํ ๋ ์ธ์ฌํ๋ฉฐ ์ด๋ค ์ํธํ๋ฅผ ์ฌ์ฉ ํ ๊ฒ์ธ์ง ์๊ธฐ๋ฅผ ๋๋์ฃ . ์ด๋ฌํ ๊ณผ์ ์ SSL Handshake๋ผ๊ณ ์นญํด์. ๋ฒ์ธ์ ์ธ ์๊ธฐ๋ก h..
TCP ์ UDP๋ ์ ๋ขฐ์ฑ vs ์ ์์ฑ ์ ํน์ง์ ๋๊ณ tcp์ udp๋ฅผ ์ด์ฉํ๋ ์๋น์ค ๋ค์ด ๊ฐ๋ฆฐ๋ค. TCP๋ - HTTP, Email, FIle transfer UDP๋ - DNS, Broadcasting ๋๋ฉ์ธ ์ด๋ฆ๊ณผ IP์ฃผ์๋ฅผ ์๋ก ๋ณํํ๋ ์ญํ ์ ํ๋ DNS๋ ์ UDP์ ์ํด ์์๊น? UDP์ ํน์ง UDP๋ ํธ๋์คํฌํธ ๊ณ์ธต ํ๋กํ ์ฝ์ด ํ ์ ์๋ ์ต์ ๊ธฐ๋ฅ์ผ๋ก ๋์ ์ฆ, ๋ค์คํ/์ญ๋ค์คํ ๊ธฐ๋ฅ๊ณผ ๊ฐ๋จํ ์ค๋ฅ ๊ฒ์ฌ ๊ธฐ๋ฅ์ ์ ์ธํ๋ฉด IP์ ์๋ฌด๊ฒ๋ ์ถ๊ฐํ์ง ์๋๋ค. ๊ทธ๋์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๊ฐ TCP๋์ ์ UDP๋ฅผ ์ ํํ๋ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฑฐ์ IP์ ์ง์ ํต์ ํ๋ ๊ฒ tcp์ ๋นํด ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ๊ณ ์๊ธฐ์ DNS์๋น์ค๊ฐ ์ฌ์ฉํ๊ธฐ ์ ํฉํ๋ค. ์ฐ๊ฒฐ์ ์์ ๊ณผ ๋ ์ค์ ์ด ์๋ค๋ ์ ๋ง์ฝ dns๊ฐ ..
์ด ๋ฌธ์ ๋ ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ์์ mysql ํจ์ค์๋ ํ๋ฌ๊ทธ์ธ "caching_sha2_password"์ ์ํํ์ง ๋ชปํด์ ์๊ธฐ๋ ์ค๋ฅ์ ๋๋ค. ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ ์ ์๋๋ก ์ ์ ์ ํจ์ค์๋ Plusin์ ๋ฐ๊ฟ์ค์๋ค. mysql์ ์ ์ํ์๊ณ , ์๋์ ๊ฐ์ด ์์ ํฉ๋๋ค. mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Xptmxm1212!@'; ์์ ์ด ์๋ฃ ๋์๋ค๋ฉด, ์๋ ์ฌ์ง๊ณผ ๊ฐ์ด Plugin์ด ๋ณ๊ฒฝ๋์์๊ฑฐ์์ :) mysql> SELECT Host,User,plugin,authentication_string FROM mysql.user;
1. ec2 ์ ์ ํ cd/etc/mysql/mysql.conf.d ๋ก ์ด๋ํฉ๋๋ค. 2. sudo vi mysqld.cnf 3. bind-address 127.0.0.1 ๊ฐ ์ ํ์ค ๋งจ์์ # ๋ฅผ ๋ฃ์ด ์ฃผ์์ฒ๋ฆฌ ํด์ฃผ๊ธฐ 4. mysql ์ ์(sudo /usr/bin/mysql -u root -p) 5. ์ธ๋ถ์ ์ ํ์ฉ sql๋ฌธ ์ ๋ ฅ mysql> create user 'root'@'%' identified by '[password]'; mysql> grant all privileges on *.* to 'root'@'%' with grant option; 'root' ๋์ ์ ์ ์ด๋ฆ์ ๋ฃ์ด์ฃผ์๋ฉด๋๊ณ , %๋ ๋ชจ๋ ๊ณณ์์ ์ ์ ํ์ฉ์ด๋ผ๋ ๋ป์ ๋๋ค. 6. mysql ์ฌ์์ํ๊ธฐ sudo service mysql res..
์ด๋ฒ ๊ธ์ ์งํํ๋ ค๋ฉด ๋จผ์ ์ ํ๋์ด์ผ ํ ์์ ์ด ์์ต๋๋ค. ๋ํ aws, k8s์ ๋ํ ๊ธฐ์ด ์ง์์ด ์์ผ๋ฉด ์ด๋ ค์ธ ์ ์์ต๋๋ค. -k8s 1.19๋ฒ์ -aws cli ์ค์น ํ aws์ ์ก์ธ์ค ํ๊ธฐ -eksctl ์ค์น -์๋์ ๊ฐ์ vpc ๊ตฌ์ถ ์ 3๊ฐ์ง ์ ํ์์ ์ด ๋์๋ค๋ ๊ฐ์ ํ์ ์งํํฉ๋๋ค. k8s ํด๋ฌ์คํฐ ์์ฑ ์ฐ์ ํผ๋ธ๋ฆฟ ์๋ธ๋ท 3๊ฐ๋ฅผ ๊ฐ์ง๋ VPC๋ฅผ ํตํด EKS๋ฅผ ์ด์ฉํ์ฌ k8s ํด๋ฌ์คํฐ๋ฅผ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค. $ eksctl create cluster -f create-cluster.yaml ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ์ฌ k8s ํด๋ฌ์คํฐ๋ฅผ ์์ฑํฉ๋๋ค. * create-cluster.yaml apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: "..
๋ฆฌ๋ ์ค์์คํ ์๋ ์ฌ์ฉ์๋ฅผ ์์ฑํ๋ฉด ์๋์ผ๋ก ์ฌ์ฉ์๋ช ๊ณผ ๊ฐ์ ๊ทธ๋ฃน์ด ์์ฑ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ฆฌ๋ ์ค์์๋ ์์ ์ ๊ณ์ ์ด๋ฆ๊ณผ ๋์ผํ ๊ทธ๋ฃน์ ๋ฐ๋์ ์ํ๊ฒ ๋๋ฉฐ, ํน์ ๊ทธ๋ฃน์ ๋ง๋ค์ด์ ๊ธฐ์กด์ ์ฌ์ฉ์๋ค์ด ์์๋๊ฒ ํ ์๋ ์์ต๋๋ค. ๊ทธ๋ฃน ์ถ๊ฐ - groupadd groupadd ๋ช ๋ น์ด๋ก ์์ฑ๋๋ ๊ทธ๋ฃน์ ํน๋ณํ ์ต์ ์ด ์ฃผ์ด์ง์ง ์๋ ํ GID๋ 499 ๊น์ง๋ ํ ๋น๋์ง ์๋๋ค. ์ฆ, GID ๊ฐ 500 ์ด์์ธ ๊ทธ๋ฃน๋ค ๊ฐ์ด๋ฐ ๊ฐ์ฅ ๋ฎ์ GID ๋ฒํธ๋ก ๊ทธ๋ฃน์ ์์ฑํ๊ฒ ๋๋ค( -r ์ต์ ์ฌ์ฉ์์๋ ์์ธ). BASH $ groupadd teamzezz ์๋ฌด ์ต์ ์์ด ์๋ก์ด ๊ทธ๋ฃน์ ์์ฑํ๋ฉด ๊ธฐ์กด์ ์๋ ๊ทธ๋ฃน์ ๋ง์ง๋ง ๋ฒํธ ๋ค์๋ฒํธ๋ฅผ GID ๋ก ํ ๋นํ์ฌ teamzezz ๋ผ๋ ๊ทธ๋ฃน์ด ์์ฑ๋๋ค. BASH grep teamzezz /e..
โถ 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 ๋ฐ๋ผ์ ์์ ๋ช ๋ น์ด๋ฅผ ํ๊ฒ ๋๋ฉด ์ถํ ํด๋น ํ๋๋ฅผ ์์ฑํ๊ธฐ ์ฉ์ดํฉ๋๋ค.