0912 ~ 0918
# 0912 ~ 0918
# 0913 - HTTP์ ์งํ ๊ณผ์
- HTTP/1.1: ASCII over TCP
- HTTP/2: Binary Multiplexed over SPDY(TCP)
- HTTP/3: Binary over Multiplexed QUIC(UDP)
# HTTP/1.1
- ์ฐ๊ฒฐ ์ํ ์ ์ง
- ํ์ดํ๋ผ์ด๋
- HOLB ๋ฌธ์
- ํค๋ ์ค๋ณต ๋ฌธ์
- HTTPS/RESTful API์ ํ์
# HTTP/2
- TCP ๊ธฐ๋ฐ์ SPDY ํ๋กํ ์ฝ -> HTTPS ๊ฐ์
- ์ด์ง ํ๋กํ ์ฝ(๋ฐ์ด๋๋ฆฌ ํ๋ ์ด๋ฐ)
- ์คํธ๋ฆผ, ๋ฉ์์ง, ํ๋ ์์ผ๋ก ๊ตฌ๋ถ
- ๋ฉํฐํ๋ ์ฑ(์๋ต ๋ค์คํ) -> HOLB ๋ฌธ์ ํด๊ฒฐ
- HPACK -> ํค๋ ์ค๋ณต ๋ฌธ์ ํด๊ฒฐ
- ์๋ฒ ํธ์
- ์คํธ๋ฆผ ๋ณ ์ฐ์ ์์ ์ค์
- TCP ์์ฒด์ HOLB ๋ฌธ์
# HTTP/3
- UDP ๊ธฐ๋ฐ์ QUIC ํ๋กํ ์ฝ
- ๋ ๋ฆฝ ์คํธ๋ฆผ -> TCP HOLB ๋ฌธ์ ํด๊ฒฐ
- QPACK -> ํค๋ ์์ถ ๋ฌธ์ ๊ฐ์
- ์บ์ฑ์ ์ด์ฉํ ORTT
- ์๋ฒ ํธ์
- ์คํธ๋ฆผ ๋ณ ์ฐ์ ์์
- Connection ID ๊ธฐ๋ฐ
- TLS -> HTTPS ๊ฐ์
# 0914 - ๋นํธ ์ฐ์ฐ
# ๋นํธ ๋จ์ ์ฐ์ฐ(bitwise operation)
์ปดํจํฐ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋นํธ(bit) ๋จ์๋ก ํํํ๊ณ ์ฒ๋ฆฌํ๋ค.
๊ณผ๊ฑฐ์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋นํธ ๋จ์ ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ, ๋ณต์กํ ์ฐ์ฐ์ ํจ์ฌ ๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์ํํด์ผ๋ง ํ๋ค.
ํ์ง๋ง ํ๋์จ์ด์ ๋ฐ๋ฌ๋ก ์ด์ ๋ ๋นํธ ๋จ์๊น์ง ์๊ฐํ์ง ์๋๋ผ๋, ์ถฉ๋ถํ ๋น ๋ฅธ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ ์๊ฒ ๋๋ค.
๊ทธ๋ฌ๋ ์์ง๋ ํ๋์จ์ด ๊ด๋ จ ํ๋ก๊ทธ๋๋ฐ์ด๋ ์์คํ
ํ๋ก๊ทธ๋๋ฐ๋ฑ ์ ํ๋ ์์์ ๊ฐ์ง ์์คํ
์ ์ํ ํ๋ก๊ทธ๋จ์์๋ ๋นํธ ๋จ์์ ์ฐ์ฐ์ด ์์ฃผ ์ฌ์ฉ๋๊ณ ์๋ค.
์ด๋ฌํ ๋นํธ ๋จ์ ์ฐ์ฐ์ ํตํด ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ค์ด๊ฑฐ๋, ์ฑ๋ฅ์ ํฅ์์ ๊ธฐ๋ํ ์ ์๋ค.
# ๋นํธ ์ฐ์ฐ์
๋นํธ ์ฐ์ฐ์๋ ๋นํธ(bit) ๋จ์๋ก ๋
ผ๋ฆฌ ์ฐ์ฐ์ ํ ๋ ์ฌ์ฉํ๋ ์ฐ์ฐ์์ด๋ค.
๋ํ, ์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ์ผ๋ก ์ ์ฒด ๋นํธ๋ฅผ ์ด๋์ํฌ ๋์๋ ์ฌ์ฉํ๋ค.
- ~ : ๋นํธ๋ฅผ 1์ด๋ฉด 0์ผ๋ก, 0์ด๋ฉด 1๋ก ๋ฐ์ ์ํด. (๋นํธ NOT ์ฐ์ฐ)
- & : ๋์๋๋ ๋นํธ๊ฐ ๋ชจ๋ 1์ด๋ฉด 1์ ๋ฐํํจ. (๋นํธ AND ์ฐ์ฐ)
- | : ๋์๋๋ ๋นํธ ์ค์์ ํ๋๋ผ๋ 1์ด๋ฉด 1์ ๋ฐํํจ. (๋นํธ OR ์ฐ์ฐ)
- ^ : ๋์๋๋ ๋นํธ๊ฐ ์๋ก ๋ค๋ฅด๋ฉด 1์ ๋ฐํํจ. (๋นํธ XOR ์ฐ์ฐ)
- << : ์ง์ ํ ์๋งํผ ๋นํธ๋ค์ ์ ๋ถ ์ผ์ชฝ์ผ๋ก ์ด๋์ํด. (left shift ์ฐ์ฐ)
: ์ง์ ํ ์๋งํผ ๋นํธ๋ค์ ์ ๋ถ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์ํด. (right shift ์ฐ์ฐ)
# ๋นํธ์ฐ์ฐ ๊ด๋ จ ์ฉ์ด
# ๋นํธ ํ๋(bit field)
์ธ์ ํ ๋นํธ๋ค์ ์ฐ์์ ์ธ ๊ณต๊ฐ
ex)
- char : 8bit(1byte) ๋นํธ ํ๋๋ฅผ ๊ฐ๋ ์๋ฃํ
- int, float : 32bit(4byte) ๋นํธ ํ๋๋ฅผ ๊ฐ๋ ์๋ฃํ
# ๋นํธ ํ๋๊ทธ(bit flag)
๋นํธ ํ๋์์ ๋นํธ๋ค์ ์ํ๊ฐ์ ํ์ธ ํ๊ธฐ ์ํ ํน์ ๊ฐ
(๊น๋ฐ์ ํตํด ์ด๋ค ์ํ๋ฅผ ํ์ธํ๋ฏ์ด, bit๋ฅผ ํตํด ์ด๋ค ์ํ๋ฅผ ํ์ธ ํ๋ค๋ ์๋ฏธ)
๋นํธ ํ๋๊ทธ๋ ํน์ ์ํ๊ฐ์ ํ์ธํ๊ฑฐ๋, ๋นํธ๋ฅผ ์กฐ์ํ๋๋ฐ ์ฌ์ฉ ๋ ์ ์๋ค.
ํ๋๊ทธ(flag)๋ผ๊ณ ๋ ํ๋ค. ๊ตณ์ด ๊ตฌ๋ถํ์๋ฉด ์ด๊ฐ์ ๋ค์๊ณผ ๊ฐ์ ์ฐจ์ด๊ฐ ์์ ์ ์๋ค.
- bit flag : ํน์ ๋จ์ผ ๋นํธ ๊ฐ์ด 1๋ก ์ธํ ๋์ด ์๋ ๊ฒฝ์ฐ
- flag : 1๊ฐ ์ด์์ bit๊ฐ์ด 1๋ก ๋์ด ์๋ ๊ฒฝ์ฐ, bit flag๋ฅผ ๊ฒฐํฉํด์ ํ๋์ ์๋ก์ด flag๋ฅผ ๋ง๋ค ์ ์๋ฐ.
# ๋นํธ๋ง์คํธ(bit masking)
๋นํธ ์ฐ์ฐ์ ์ฌ์ฉ๋๋ ํ๋๊ทธ
์ฆ, ํ๋๊ทธ์ธ๋ฐ ํน์ ์ฐ์ฐ์ ์ฌ์ฉ๋ ๋ ๋ง์คํฌ๋ผ๊ณ ๋ ํ๋ค.
๋ง์คํฌ๋ฅผ ์ฌ์ฉํ ๋นํธ ์ฐ์ฌ์ '๋นํธ ๋ง์คํน'์ด๋ผ๊ณ ํ๋ค.
ํ์ฉ ์
์ด๋ฏธ์ง ๋ง์คํน, IP ์ฃผ์์ mask ๊ฐ, ํด์ ํ
์ด๋ธ
# 0918 - ReflectionTestUtils๋ฅผ ํตํ private ๋ฉ์๋ ํ ์คํธ
private ๋ฉ์๋๋ฅผ ํ ์คํธ ํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ ๋๊ฐ์ง๊ฐ ์๋ค.
- ์คํ๋ง ํ ์คํธ ์ ํธ
- ์๋ฐ lang์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ
# ReflectionTestUtils
ReflectionTestUtils is a collection of reflection-based utility methods. You can use these methods in testing scenarios where you need to change the value of a constant, set a non-public field, invoke a non-public setter method, or invoke a non-public configuration or lifecycle callback method when testing application code for use cases such as the following:
@Component
@Getter
public class ReflectionTestUtilsComponent {
private int privateValue;
private int privateMethod(int a, int b) {
privateValue += a;
privateValue += b;
return privateValue;
}
}
- private ๋ณ์ ์ฃผ์
static void setField(Class<?> targetClass, String name, Object value)
static void setField(Class<?> targetClass, String name, Object value, Class<?> type)
static void setField(Object targetObject, Class<?> targetClass, String name, Object value, Class<?> type)
static void setField(Object targetObject, String name, Object value)
static void setField(Object targetObject, String name, Object value, Class<?> type)
@Test
public void testPrivateValue() {
ReflectionTestUtils.setField(reflectionTestUtilsComponent, "privateValue", 100);
// ReflectionTestUtils.setField(๋์ ๊ฐ์ฒด, "๋ณ์๋ช
", ์ํ๋ ๊ฐ);
Assertions.assertEquals(100, reflectionTestUtilsComponent.getPrivateValue());
}
- private ๋ฉ์๋ ํ ์คํธ
static <T> T invokeMethod(Class<?> targetClass, String name, Object... args)
static <T> T invokeMethod(Object targetObject, Class<?> targetClass, String name, Object... args)
static <T> T invokeMethod(Object target, String name, Object... args)
@Test
public void testPrivateMethod() {
ReflectionTestUtils.setField(reflectionTestUtilsComponent, "privateValue", 100);
// ReflectionTestUtils.setField(๋์ ๊ฐ์ฒด, "๋ณ์๋ช
", ์ํ๋ ๊ฐ);
Assertions.assertEquals(103, (Integer) ReflectionTestUtils.invokeMethod(reflectionTestUtilsComponent, "privateMethod", 1, 2));
// ReflectionTestUtils.invokeMethod(๋์ ๊ฐ์ฒด, "๋ฉ์๋(ํจ์)๋ช
", ์ธ์);
Assertions.assertEquals(103, reflectionTestUtilsComponent.getPrivateValue());
}