1213 - 1219
# 1213 - 1219
# 1213 - StopWatch
Spring์ StopWatch ํด๋์ค๋ ์ฌ๋ฌ๊ฐ ์์ ์ ์๊ฐ์ ์ธก์ ํด์ฃผ๋ฉฐ, ์ด ์์์๊ฐ๊ณผ ๊ฐ๊ฐ์ ์ด๋ฆ๋ถ์ธ ์์ ๋ค์ ์์๋ ์์ฐ์ ํ์ํด์ค๋ค. System.nanoTime()์ ์ฌ์ฉ์ ๊ฐ์ถ๊ณ ์ดํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ผ ๋ฟ๋ง ์๋๋ผ ๊ณ์ฐ ์ค๋ฅ์ ๊ฐ๋ฅ์ฑ๋ ์ค์ฌ์ค๋ค.
- ์์ ์ฝ๋
import org.springframework.util.StopWatch;
public class StopWatchClass {
public static void main(String[] args) {
// StopWatch ์์ฑ
StopWatch stopwatch = new StopWatch();
// ํ์ด๋จธ ์์
stopwatch.start();
// ์์
fibonacci(45);
// ํ์ด๋จธ ์ข
๋ฃ
stopwatch.stop();
// ๊ฒฐ๊ณผ ๋ถ์
System.out.println(stopwatch.prettyPrint());
}
public static int fibonacci(int n) {
if (n == 0)
return 0;
if (n == 1)
return 1;
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
// 1 sec = 1,000 ms = 1,000,000 ฮผs = 1,000,000,000 ns
// 45๊ฐ์ ํผ๋ณด๋์น ์์ด์ ๊ณ์ฐํ๋๋ฐ ์ด 3.82 ์ด.
- Recursive, Dynamic Programming
import org.springframework.util.StopWatch;
public class StopWatchClass2 {
static final int number = 45;
static long[] memo= new long[number+1];
public static void main(String[] args) {
StopWatch stopwatch = new StopWatch("fibonacci");
// 1๋ฒ ์์
stopwatch.start("recursive");
fibonacci(number);
stopwatch.stop();
// 2๋ฒ ์์
stopwatch.start("DP");
fibonacciDp(number);
stopwatch.stop();
// ๊ฒฐ๊ณผ ๋ถ์
System.out.println(stopwatch.prettyPrint());
}
public static long fibonacci(int n) {
if (n == 0)
return 0;
if (n == 1)
return 1;
return fibonacci(n - 1) + fibonacci(n - 2);
}
public static long fibonacciDp(int n){
if(n==0)
return 0;
if(n==1)
return 1;
if(memo[n] != 0) {
return memo[n];
}else {
return memo[n] = fibonacciDp(n-1) + fibonacciDp(n-2);
}
}
}
# 1215 - .map()๊ณผ .flatMap()
# .map()
.map()์ ๋จ์ผ ์คํธ๋ฆผ ์์๋ฅผ ๋งคํ์ํจ ํ ๋งคํ์ํจ ๊ฐ์ ๋ค์ ์คํธ๋ฆผ์ผ๋ก ๋ณํํ๋ ์ค๊ฐ ์ฐ์ฐ์ ๋ด๋นํ๋ค. ๊ฐ์ฒด์์ ์ํ๋ ์์๋ฅผ ์ฃผ์ถํ๋ ์ญํ ์ ํ๋ค.
# .flatMap()
.flatMap()์ Array๋ Object๋ก ๊ฐ์ธ์ ธ ์๋ ๋ชจ๋ ์์๋ฅผ ๋จ์ผ ์์ ์คํธ๋ฆผ์ผ๋ก ๋ฐํํ๋ค. .map()์ ์ ๋ ฅํ ์์๋ฅผ ๊ทธ๋๋ก ์คํธ๋ฆผ์ผ๋ก ๋ฐํํ์ง๋ง, .flatMap()์ ์ ๋ ฅํ ์์๋ฅผ ๊ฐ์ฅ ์์ ๋จ์์ ๋จ์ผ ์คํธ๋ฆผ์ผ๋ก ๋ฐํํ๋ค.
- witheoutFlatMap.java
String[][] sample = new String[][]{
{"a", "b"}, {"c", "d"}, {"e", "a"}, {"a", "h"}, {"i", "j"}
};
//without .flatMap()
Stream<String> stream = sample.stream()
.filter(alpha -> "a".equals(alpha[0].toString() || "a".equals(alpha[1].toString())))
stream.forEach(alpha -> System.out.println("{"+alpha[0]+", "+alpha[1]+"}"));
// output
{a, b}
{e, a}
{a, h}
- withFlatMap.java
String[][] sample = new String[][]{
{"a", "b"}, {"c", "d"}, {"e", "a"}, {"a", "h"}, {"i", "j"}
};
//without .flatMap()
Stream<String> stream = sample.stream()
.flatMap(array -> Arrays.stream(array))
.filter(x-> "a".equals(x));
stream.forEach(System.out::println);
// output
a
a
a
# 1218 - AWS ์ธํ๋ผ ๊ตฌ์ถ
# ์ ํต์ธํ๋ผ์ ๋น๊ต
์ ํต์ธํ๋ผ | AWS |
---|---|
๋คํธ์ํฌ | VPC |
๋ณด์์ ์ฑ | SECURITY CROUP |
L4 | ELB |
์๋ฒ | EC2 |
DNS | ROUTE 53 |
DB | RDS |
์คํ ๋ฆฌ์ง | S3 |
CDN | CloudFront |
NAT | NAT |
๋ฐฐํฌ์์คํ | OpsWorks |
์ฅ์ ์๋ฆผ | SNS |
์๋ฒ์ ๊ทผ๋ฐฉ์ | VPN |
# vpc๋
VPC(Virtual Private Cloud)๋ ์ฌ์ฉ์๊ฐ ์ ์ํ๋ ๊ฐ์ฅ์ ๋คํธ์ํฌ ์ด๋ค. VPC๋ฅผ ํตํด ์ธ์คํด์ค๊ฐ ์ํ๋ ๋คํธ์ํฌ๋ฅผ ๊ตฌ๋ถํ์ฌ ๊ฐ ๋คํธ์ํฌ์ ๋ง๋ ์ค์ ์ ๋ถ์ฌํ ์ ์๋ค. AWS๋ VPC์ ์ค์์ฑ์ ๊ฐ์กฐํ์ฌ 2019๋ ๋ถํฐ ๋ชจ๋ ์๋น์ค์ VPC๋ฅผ ์ ์ฉํ๋๋ก ํ๊ณ , ์ธ์คํด์ค ์์ฑ์ฑ ์๋์ผ๋ก default VPC์ ์ธ์คํด์ค๊ฐ ๋ฐฐ์น๋๋ค.
์ฌ์ค IP ๋์ญ
- 10.0.0.0 ~ 10.255.255.255(10/8 prefix)
- 172.16.0.0 ~ 172.31.255.255(182.16/12 prefix)
- 192.168.0.0 ~ 192.168.255.255(192.168/16 prefix)
VPC์์ ํ๋ฒ ์ค์ ๋ IP ๋์ญ์ ์์ ํ ์ ์์ผ๋ฉฐ ๊ฐ๊ฐ์ VPC๋ ๋ ๋ฆฝ์ ์ด๊ธฐ ๋๋ฌธ์ ์๋ก ํต์ ํ ์ ์๋ค. ๋ง์ฝ ํต์ ์ ์ํ๋ค๋ฉด VPCํผ์ด๋ง ์๋น์ค๋ฅผ ํตํด VPC๊ฐ์ ํธ๋ํฝ์ ๋ผ์ฐํ ํ ์ ์๋๋ก ์ค์ ํ ์ ์๋ค.