0628 - 0704
# 0628 - 0704
# 0628 - ๋ฆฌ๋ ์ค ๋คํธ์ํฌ ๊ด๋ จ
# ๋ผ์ฐํ ์ค์
- ์์ ์ ์ฉ
$ route add -net ์์ดํผ netmask ๋ท๋ง์คํฌ dev ์ฅ์น๋ช
- ์๊ตฌ ์ ์ฉ
$ vi /etc/sysconfig/network-scripts/route-์ฅ์น๋ช
// ์์ฑ
ADDRESS0=์์ดํผ
NETMASK0=๋ท๋ง์คํฌ
GATEWAY0=๊ฒ์ดํธ์จ์ด
// ์ฌ์์
$ systemctl restart network
- ํ์ธ
$ route
# DNS ์ค์
$ vi /etc/resolv.conf
// ์์ฑ
nameserver ์์ดํผ
// ์ฌ์์
$ systemctl restart network
# 0629 - ํฌ์๋ ํ๋ก์(forward proxy) ๋ฆฌ๋ฒ์ค ํ๋ก์(reverse proxy)์ ์ฐจ์ด
์ํ์น ์น์๋ฒ(apache web server)์๋ mod_proxy๋ผ๋ ๋ชจ๋์์ forward proxy์ reverse proxy ๋ ๊ฐ์ง ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ nginx๋ ํ์ํ ๊ธฐ๋ฅ๋ง ์ ๊ณตํ๋ ๊ณ ์ฑ๋ฅ ์น ์๋ฒ์ ๋ง๊ฒ reverse proxy ๊ธฐ๋ฅ๋ง ์ ๊ณตํ๋ค.
# Forward Proxy
์ฌ์ฉ์ <=> ํฌ์๋ ํ๋ก์ ์๋ฒ <=> ์ธํฐ๋ท <=> ์๋ฒ
ํฌ์๋ ํ๋ก์๋ ๋๊ฐ ์บ์ ๊ธฐ๋ฅ์ด ์์ผ๋ฏ๋ก ์์ฃผ ์ฌ์ฉ๋๋ ์ปจํ ์ธ ๋ผ๋ฉด ์๋ฑํ ์ฑ๋ฅ ํฅ์์ ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฉฐ ์ ํด์ง ์ฌ์ดํธ๋ง ์ฐ๊ฒฐํ๊ฒ ์ค์ ํ๋ ๋ฑ ์น ์ฌ์ฉ ํ๊ฒฝ์ ์ ํ ํ ์ ์์ผ๋ฏ๋ก ๋ณด์์ด ๋งค์ฐ ์ค์ํ ๊ธฐ์ ํ๊ฒฝ๋ฑ์์ ์ฌ์ฉ.
# Reverse Proxy
์ฌ์ฉ์ <=> ์ธํฐ๋ท <=> ๋ฆฌ๋ฒ์ค ํ๋ก์ ์๋ฒ <=> ์๋ฒ
๋ฆฌ๋ฒ์ค ํ๋ก์๋ก ์น ์๋ฒ๋ฅผ ์ค์ ํ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ์น ์๋น์ค์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ฉด ๋ฆฌ๋ฒ์ค ํ๋ก์๋ ์ด ์์ฒญ์ ๋ฐ์์ ๋ด๋ถ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ํ์ ์ด ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ๋ค.
- ์ฅ์
- ๋ณด์ : DMZ์กด ์ฌ์ฉ์ผ๋ก ๋ณด์ ๊ฐํ
- ์๋์ ์์ ์ฑ : Cache Server๋ SSL ํ๋์จ์ด ๊ฐ์๊ธฐ ์ฐ๋ ๋ฑ ์ํคํ ์ฒ ์ธก๋ฉด์์ ์ฑ๋ฅ ํฅ์์ ํ๊ธฐ์ ์ฉ์ด
- ์ ๋ขฐ์ฑ ์ฆ๋ : ๋ฆฌ๋ฒ์ค ํ๋ก์๋ฅผ cluster๋ก ๊ตฌ์ฑํ๋ฉด ๊ฐ์ฉ์ฑ์ ๋์ผ ์ ์๊ณ ์ฌ์ฉ์์์ ๋ฐ๋ผ Web Server๋ WAS๋ฅผ ์ ์ฐํ๊ฒ ๋๋ฆด ์ ์๋ ์ฅ์ , ๋ฆฌ๋ฒ์ค ํ๋ก์ ์์ L4๋ load balancer๋ฅผ ๋ถ์ด๋ฉด Round Robin, Least connection ๋ฑ ์ํฉ์ ๋ง๋ ๋ถ๋ฐฐ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํด ์๋น์ค ์ ๋ขฐ์ฑ์ ๋์
# 0630 - ๋ฐฐํฌ ์ ๋ต์ ์ข ๋ฅ
# ๋กค๋ง(Rolling)
์ผ๋ฐ์ ์ธ ๋ฐฐํฌ๋ฅผ ์๋ฏธํ๋ฉฐ, ๋จ์ํ๊ฒ ์๋ฒ๋ฅผ ๊ตฌ์ฑํ์ฌ ๋ฐฐํฌํ๋ ์ ๋ต์ด๋ค. ๋ค์ ๋งํด ๊ตฌ ๋ฒ์ ์์ ์ ๋ฒ์ ์ผ๋ก ํธ๋ํฝ์ ์ ์ง์ ์ผ๋ก ์ ํํ๋ ๋ฐฐํฌ์ด๋ค. ๊ด๋ฆฌ๊ฐ ํธํ์ง๋ง, ๋ฐฐํฌ ์ค ํ์ชฝ ์ธ์คํด์ค์ ์๊ฐ ๊ฐ์๋๋ฏ๋ก ์๋ฒ ์ฒ๋ฆฌ ์ฉ๋์ ๋ฏธ๋ฆฌ ๊ณ ๋ คํด์ผ ํ๋ค.
# ๋ธ๋ฃจ ๊ทธ๋ฆฐ(Blue Green)
๊ตฌ ๋ฒ์ ์ ๋ธ๋ฃจ, ์ ๋ฒ์ ์ ๊ทธ๋ฆฐ์ด๋ผ๊ณ ํด์ ๋ถ์ฌ์ง ์ด๋ฆ์ด๋ค. ์ ๋ฒ์ ์ ๋ฐฐํฌํ๊ณ ์ผ์ ํ ์ ํํ์ฌ ๋ชจ๋ ์ฐ๊ฒฐ์ ์ ๋ฒ์ ์ ๋ฐ๋ผ๋ณด๊ฒ ํ๋ ์ ๋ต์ด๋ค. ๊ตฌ ๋ฒ์ , ์ ๋ฒ์ ์๋ฒ๋ฅผ ๋์์ ๋๋ํ ๊ตฌ์ฑํ์ฌ ๋ฐฐํฌ ์์ ์ ํธ๋ํฝ์ด ์ผ์ ํ ์ ํ๋๋ค. ๋น ๋ฅธ ๋กค๋ฐฑ์ด ๊ฐ๋ฅํ๊ณ , ์ด์ํ๊ฒฝ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์ค์ ์๋น์ค ํ๊ฒฝ์ผ๋ก ์ ๋ฒ์ ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๋ค. ๋จ ์ด๋ฐ ๊ตฌ์ฑ์ ์์คํ ์์์ด ๋๋ฐฐ๋ก ํ์ํ์ฌ ๋น์ฉ์ด ๋ ๋ง์ด ๋ฐ์ํ๋ค.
# ์นด๋๋ฆฌ(Canary)
์นด๋๋ฆฌ ๋ฐฐํฌ์ ๋ํ ์ค๋ช
์ ์์ ์นด๋๋ฆฌ์ ๋ํ ์ด์์ ์์๋ณด์. Canary์ ์ฌ์ ์ ์๋ฏธ์๋ ์นด๋๋ฆฌ์๋ผ๋ ์์ด๋ค. ์นด๋๋ฆฌ์๋ ์ ๋
๊ฐ์ค์ ๊ต์ฅํ ๋ฏผ๊ฐํ ๋๋ฌผ๋ก ์ํ ๊ด์ฐ์์ ์ ๋
๊ฐ์ค ๋์ถ์ ์ํ์ ์๋ฆฌ๋ ์ฉ๋๋ก ์ฌ์ฉ๋์ด์๋ค. ๋ฏธ๋ฆฌ ์ํ์ ๊ฐ์งํ๊ธฐ ์ํจ์ด๋ค.
์นด๋๋ฆฌ ๋ฐฐํฌ๋ ์ํ์ ๋น ๋ฅด๊ฒ ๊ฐ์งํ ์ ์๋ ๋ฐฐํฌ ์ ๋ต์ด๋ค. ์ง์ ํ ์๋ฒ ๋๋ ํน์ user์๊ฒ๋ง ๋ฐฐํฌํ๋ค๊ฐ ์ ์์ ์ด๋ฉด ์ ์ฒด๋ฅผ ๋ฐฐํฌํ๋ค. ์๋ฒ์ ํธ๋ํฝ ์ผ๋ถ๋ฅผ ์ ๋ฒ์ ์ผ๋ก ๋ถ์ฐํ์ฌ ์ค๋ฅ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋ค. ์ด๋ฐ ์ ๋ต์ A/B ํ
์คํธ๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง์ ์ ์ฉํ๋ค. ํธ๋ํฝ์ ๋ถ์ฐ์ํฌ ๋๋ ๋ผ์ฐํ
์ ๋๋ค ํ๊ฒ ํ ์ ์๊ณ , ์ฌ์ฉ์๋ก ๋ถ๋ฅํ ์๋ ์๋ค.
# 0701 - L4 ๋ก๋๋ฐธ๋ฐ์ vs L7 ๋ก๋๋ฐธ๋ฐ์
# L4(Transport Layer)?
์ฃผ๋ก Round Robin ๋ฐฉ์์ ์ฌ์ฉํ๋ฉฐ, ๋คํธ์ํฌ ๊ณ์ธต(IP, IPX)์ด๋ ํธ๋์คํฌํธ ๊ณ์ธต(TCP, UDP)์ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๋ก๋๋ฅผ ๋ถ์ฐ์ํจ๋ค.
# L7(Application Layer)?
์ ํ๋ฆฌ์ผ์ด์
๊ณ์ธต(HTTP, FTP, SMTP)์์ ๋ก๋๋ฅผ ๋ถ์ฐํ๊ธฐ ๋๋ฌธ์ HTTP ํค๋, ์ฟ ํค ๋ฑ๊ณผ ๊ฐ์ ์ฌ์ฉ์์ ์์ฒญ์ ๊ธฐ์ค์ผ๋ก ํน์ ์๋ฒ์ ํธ๋ํฝ ๋ถ์ฐํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
์ฝ๊ฒ ๋งํด ํจํท์ ๋ด์ฉ์ ํ์ธํ๊ณ ๊ทธ ๋ด์ฉ์ ๋ฐ๋ผ ๋ก๋๋ฅผ ํน์ ์๋ฒ์ ๋ถ๋ฐฐํ๋ ๊ฒ์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค. URL์ ๋ฐ๋ผ ๋ถํ๋ฅผ ๋ถ์ฐ์ํค๊ฑฐ๋, HTTP ํค๋์ ์ฟ ํค๊ฐ์ ๋ฐ๋ผ ๋ถํ๋ฅผ ๋ถ์ฌํ๋ ๋ฑ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ณด๋ค ์ธ๋ถํํด ์๋ฒ์ ์ ๋ฌํ ์ ์๋ค. ๋ํ L7 ๋ก๋๋ฐธ๋ฌ์์ ๊ฒฝ์ฐ ํน์ ํ ํจํด์ ์ง๋ ๋ฐ์ด๋ฌ์ค๋ฅผ ๊ฐ์งํด ๋คํธ์ํฌ๋ฅผ ๋ณดํธํ ์ ์์ผ๋ฉฐ, Dos/DDoS์ ๊ฐ์ ๋น์ ์์ ์ธ ํธ๋ํฝ์ ํํฐ๋งํ ์ ์์ด ๋คํธ์ํฌ ๋ณด์๋ถ์ผ์์๋ ํ์ฉ๋๋ค.
# ๋น๊ต
# ๋ก๋๋ฐธ๋ฐ์ ์๊ณ ๋ฆฌ์ฆ?
- Round Robin(์์ฐจ๋ฐฉ์)
: ์์ฒญ์ ์์๋๋ก ๊ฐ ์๋ฒ์ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐํ๋ ๋ฐฉ์
์๋ฒ ์ปค๋ฅ์ ์๋ ์๋ต์๊ฐ์ ์๊ด์์ด ๋ชจ๋ ์๋ฒ๋ฅผ ๋์ผํ๊ฒ ์ฒ๋ฆฌ, ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ๋นํด์ ๊ฐ์ฅ ๋น ๋ฅด๋ค. - IP ํด์ ๋ฐฉ์(IP Hash Method)
: ํด๋ผ์ด์ธํธ์ IP ์ฃผ์๋ฅผ ํน์ ์๋ฒ๋ก ๋งคํํ์ฌ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์, ์ฌ์ฉ์์ IP๋ฅผ ํด์ฑํด ๋ก๋๋ฅผ ๋ถ๋ฐฐํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ํญ์ ๋์ผํ ์๋ฒ๋ก ์ฐ๊ฒฐ๋๋ ๊ฒ์ ๋ณด์ฅํ๋ค. - Least Connection(์ต์์ ์๋ฐฉ์)
: ์๋ฒ์ ์ฐ๊ฒฐ๋์ด ์๋ Connection ๊ฐ์๋ง ๊ฐ๊ณ ๋จ์๋น๊ตํ์ฌ ๊ฐ์ฅ ์ ์๊ณณ์ผ๋ก ์ฐ๊ฒฐ - Weighted Least Connections(๊ฐ์ค์น ์ต์์ ์๋ฐฉ์)
: ์๋ฒ์ ๋ถ์ฌ๋ Weight ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก Connection ์์ ๊ฐ์์ ๊ฐ์ด ๊ณ ๋ คํ์ฌ ํ ๋น - Fastest Response Time(์๋ต์๊ฐ๋ฐฉ์)
: ๊ฐ์ฅ ๋นจ๋ฆฌ ์๋ตํ๋ ์๋ฒ์ ์ด์ฉ์ ์๊ตฌ๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ. ์๋ต์๊ฐ์ ๊ฐ ์๋ฒ๊ฐ ํจํท ํํ์ ์๊ตฌ๋ฅผ ์ก์์ ํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํ ๊ฒ์ด๋ค. - Adaptive(์ต์๋๊ธฐ๋ฐฉ์)
: Open ๋๋ Pending(๊ณ๋ฅ์ค์ธ) ์ปค๋ฅ์ ์ ์ ๊ฒ ๊ฐ์ง๊ณ ์๋ ์๋ฒ๋ก ๋คํธ์ ์ปค๋ฅ์ ๋ฐฉํฅ์ ์ง์ ํ๋ค. Pending ์ปค๋ฅ์ ์ Full TCP Handshake๋ฅผ ์์ฑํ์ง ์์ ๊ฒ์ผ๋ก, ์ด๊ฒ์ ์ด๋น ํด๋ผ์ด์ธํธ Thread์ ์๊ฐ ์ฆ๊ฐํ ๋ ๋์ฑ ์ ์ํ๋๋ค.
# 0703 - ์๋ฐ ๋๋ค์
# ๋๋ค ํํ์(Lambda Expressions)
# ๋๋ค์์ด๋?
์๋ณ์ ์์ด ์คํ๊ฐ๋ฅํ ํจ์
- ๋ฉ์๋๋ฅผ ํ๋์ ์์ผ๋ก ํํํ๋ ๊ฒ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
- ๋๋ค์์ผ๋ก ํํํ๋ฉด return์ด ์์ด์ง๋ฏ๋ก ๋๋ค์์ anonymous function(์ต๋ช ํจ์)์ด๋ผ๊ณ ๋ ํ๋ค.
# ๋๋ค์์ ์ฅ๋จ์
์ฅ์
- ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค ์ ์๋ค.
- ๊ฐ๋ ์ฑ์ด ํฅ์๋๋ค.
- ๋ฉํฐ์ฐ๋ ๋ํ๊ฒฝ์์ ์ฉ์ดํ๋ค.
- ํจ์๋ฅผ ๋ง๋ค๋ ๊ณผ์ ์์ด ํ๋ฒ์ ์ฒ๋ฆฌํ๊ธฐ์ ์์ฐ์ฑ์ด ๋์์ง๋ค.
๋จ์
- ๋๋ค๋ก ์ธํ ๋ฌด๋ช ํจ์๋ ์ฌ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- ๋๋ฒ๊น ์ด ๋ง์ด ๊น๋ค๋ก๋ค.
- ๋๋ค๋ฅผ ๋ฌด๋ถ๋ณํ๊ฒ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ํด๋ฆฐํ์ง ๋ชปํ๋ค.
- ์ฌ๊ท๋ก ๋ง๋ค ๊ฒฝ์ฐ ๋ถ์ ํฉํ๋ค.
# ๋๋ค์ ์ฌ์ฉ๋ฒ
(๋งค๊ฐ๋ณ์) -> ํํ ๋ฐ๋
(๋งค๊ฐ๋ณ์) -> { ํํ ๋ฐ๋ }
() -> { ํํ๋ฐ๋ }
() -> ํํ ๋ฐ๋
- ๊ธฐ๋ณธ ์์
LeagueOfLegend, Setting
@FunctionalInterface
interface Setting {
void setup();
}
public class LeagueOfLegend {
public void running(Setting setting) {
setting.setup();
System.out.println("LeagueOfLegend running");
}
}
lambdaSample
public class lambdaSample {
public static void main(String[] args) {
LegueOfLegend leagueOfLegend = new LegueOfLegend();
leagueOfLegend.running(new Setting() {
@Override
public void setup() {
System.out.println("leagueOfLegend is setup");
}
});
}
}
=> ๊ฒฐ๊ณผ
leagueOfLegend is setup
LeagueOfLegend running
- ๋๋ค์์ lambdaSample
public class lambdaSample {
public static void main(String[] args) {
LeagueOfLegend leagueOfLegenda = new LeagueOfLegend();
leagueOfLegend.running(() -> System.out.println("leagueOfLegend is setup"));
}
}
=> ๊ฒฐ๊ณผ
leagueOfLegend is setup
LeagueOfLegend running
# @FunctionalInterface
- Java8 ์ด์ ์์๋ ์๋ฐ์์ ๊ฐ์ด๋ ๊ฐ์ฒด๊ฐ ์๋ ํ๋์ ํจ์๋ฅผ ๋ณ์์ ๋ด์๋๋ ๊ฒ์ ํ์ฉ๋์ง ์์๋ค.
- Java8์์ ๋๋ค์์ด ์ถ๊ฐ๋๊ณ ํ๋์ ๋ณ์์ ํ๋์ ํจ์๋ฅผ ๋งคํํ ์ ์๋ค.
์์
@FunctionalInterface
public interface Funtional {
public int calc(int a, int b);
}
- 1๊ฐ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง ๊ฒ์ด Functional interface ์ด๋ค. Single Abstract Method(SAM)์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๊ธฐ๋ํ๋ค.
- @FunctionalInterface๋ฅผ ์ง์ ํ๊ฒ๋๋ฉด ์ด ์ธํฐํ์ด์ค๊ฐ ํจ์ํ ์ธํฐํ์ด์ค๋ผ๊ณ ๋ช ์๋ฅผ ํด์ฃผ๊ณ ์ปดํ์ผ๋ฌ๊ฐ SAM ์ฌ๋ถ๋ฅผ ์ฒดํฌํ ์ ์๋๋ก ํ๋ค.
์์ 2 - Various ์ฌ์ฉ
Functional add = (int a, int b) -> {return a + b};
Functional add1 = (int a, int b) -> a + b;
Functional add2 = Integer::sum;
- ์ด ์์ ๋ ๋ชจ๋ ๊ฒฐ๊ณผ๋ ๊ฐ๋ค.
int result = add.calc(1, 1) + add1.calc(2, 2) + add2.calc(3, 3);
// ๊ฒฐ๊ณผ 12