week1 - violet-mj/be-was-2024 GitHub Wiki
index.html ๋ฐํ ํ๊ธฐ
- java Concurrent
- ๊ธฐ์กด Java Thread ๋ชจ๋ธ
- ์ค๋ ๋๊ฐ ํ์ํ ๋ ๋ง๋ค ์์ฑํ๊ณ ์ ๊ฑฐํ๋ค.
- ์ค๋ ๋๋ฅผ ์์ฑํ๋ ๋น์ฉ์ ๋งค์ฐ ํฌ๋ค.
- Concurrent ํจํค์ง
- ์ค๋ ๋ ํ์ ๋ง๋ค์ด ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํ๋ค.
- ์ค๋ ๋๋ฅผ ๋ง๋ค์ด ๋๊ณ ๊ฐ์ ธ๋ค ์ฐ๊ธฐ๋ง ํ๋ฉด ๋๋ฏ๋ก ์ค๋ ๋ ์์ฑ, ์ ๊ฑฐ ๋น์ฉ์ด ๋ค์ง ์์
- ์๋ฐ์ ์ค๋ ๋ ๋ชจ๋ธ
- ์๋ฐ๋ os thread์ platform thread(java์์ ๋ง๋ ์ค๋ ๋)๊ฐ ์ผ๋์ผ๋ก ๋งค์นญ๋๋ค.
- ์ด๋ os๊ฐ thread๋ฅผ ์ค์ผ์ฅด๋ง ํ๊ธฐ ๋๋ฌธ์ ํจ์จ์ด ๋ฎ๋ค.
- os ์ค๋ ๋๋ ์ค๋ ๋ ์์ฑ ์ ์ง ๋น์ฉ์ด ๋น์ธ๊ธฐ ๋๋ฌธ์ ํจ์จ์ด ์ข์ง ์์
- ์ปจํ ์คํธ ์ค์์นญ ๋น์ฉ์ด ๋น์ธ๋ค.
- virtual thread
- JVM์์์ ์ค์ผ์ฅด๋ง ๋๋ ๊ฒฝ๋ํ ์ค๋ ๋๋ฅผ ๋งํจ.
- Virtual Thread๋ flatform thread ์์์ ์ปจํ ์คํธ ์ค์์นญ ํ๋ฏ๋ก ๋งค์ฐ ๋น ๋ฅด๋ค.
- ๊ธฐ์กด Java Thread ๋ชจ๋ธ
- BufferedInputStream
- InputStream์ ๋ณดํต 1Byte์ฉ ์ฝ๋๋ค.
- ์ด๋ฐ ๊ณผ์ ์ด ๋ฐ๋ณต๋๋ฉด ๋ง์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ ์ ์๋ค.
- Buffer๋ฅผ ๋ง๋ค์ด ์ค๊ฐ์์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์์ ๋ณด๋ด๋๋ก ํ์.
2. ๋ค์ํ MimeType ์ง์ํ๊ธฐ
ํ์ฅ์์์ MimeType์ผ๋ก ๋ณํ
- ์ฐ์ ๊ฒฝ๋ก์์ ํ์ผ ํ์ฅ์๋ฅผ ๋ถ๋ฆฌํ๋ค.
public class PathParser {
public String fileExtExtract(String fileName) {
int pointPos = fileName.lastIndexOf(".");
if(pointPos == -1) {
throw new IllegalArgumentException("ํ์ผ ํ์ฅ์๊ฐ ์กด์ฌํ์ง ์๋ ํ์ผ ์ด๋ฆ์
๋๋ค.");
}
return fileName.substring(pointPos);
}
}
- HashMap์ ์ด์ฉํ์ฌ ํ์ผ ์ด๋ฆ๊ณผ MimeType์ ๋งคํํ์๋ค.
public class MimeTypeMapper {
private Map<String, MimeType> mimeTypeMapper;
public MimeTypeMapper() {
mimeTypeMapper = new HashMap<>() {{
put(".html", MimeType.HTML);
put(".css", MimeType.CSS);
put(".js", MimeType.JAVASCRIPT);
put(".svg", MimeType.SVG);
put(".ico", MimeType.ICO);
put(".png", MimeType.PNG);
put(".jpg", MimeType.JPG);
}};
}
public MimeType getMimeType(String ext) {
if(mimeTypeMapper.containsKey(ext)) {
return mimeTypeMapper.get(ext);
}
throw new IllegalArgumentException("ํ์ฅ์์ ๋งคํ๋๋ mimeType์ด ์์ต๋๋ค.");
}
}
- response์
content-type
ํค๋์ MimeType์ ์์ฑํด์ฃผ์๋ค.
dos.writeBytes("Content-Type: " + mimeType + "\r\n");
- ๊ตฌํ ๋ฐฉ๋ฒ
- Enum์ ์ด์ฉํ์ฌ ๊ตฌํํ๊ธฐ
- MimeType์ ์์ ๊ฐ์ผ๋ก ๋๋๋ ๊ฒ์ด ์๋๋ผ ๋ณ์๋ก ๊ฐ์ง ์ ์์ด ๊ฐ๋ ์ฑ์ด ์ข๋ค.
- ๋ชจ๋ MimeType์ ์ํํด์ผ ๋๋ค๋ ๋จ์ ์ด ์์
- HashMap์ ์ด์ฉํ์ฌ ๊ตฌํํ๊ธฐ
- ํด์ฑ์ ํ๋ ๋น์ฉ์ด ๋ฐ์ํ ์ ์์
- switch๋ฌธ์ ์ด์ฉํ์ฌ ๊ตฌํํ๊ธฐ
- ์ง์ํ๋
Content-Type
์ด ๋์ด๋๋ค๋ฉด ์ฝ๋๊ฐ ๋๋ฌด ๊ธธ์ด์ง ๊ฐ๋ฅ์ฑ์ด ์กด์ฌ
- ์ง์ํ๋
- Enum์ ์ด์ฉํ์ฌ ๊ตฌํํ๊ธฐ
MimeType
- ๋ฏธ๋์ด ํ์ ์ด๋ ๋ฌธ์, ํ์ผ ๋๋ ๋ฐ์ดํธ ์งํฉ์ ์ฑ๊ฒฉ๊ณผ ํ์
type/subtype
์ฒ๋ผ ์ฌ๋์๋ก ๊ตฌ๋ถ๋ ๋ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.- type: ๋ฐ์ดํฐ ํ์ ์ด ์ํ๋ ์ผ๋ฐ ์นดํ ๊ณ ๋ฆฌ
- subtype: ์ ํํ ์ข ๋ฅ์ ๋ฐ์ดํฐ
type/subtype;parameter=value
์ฒ๋ผ ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.charset
: ๋ฌธ์์ ์ฌ์ฉ๋๋ ๋ฌธ์ ์ธํธq
: client๊ฐ ์ ํธํ๋ mimeType์ ์ฐ์ ์์
Accept Header
- ํด๋ผ์ด์ธํธ๊ฐ ์ดํด ๊ฐ๋ฅํ ์ปจํ ์ธ ํ์ ์ด ๋ฌด์์ธ์ง๋ฅผ ์๋ ค์ค๋๋ค.
- ์ฝํ
์ธ ํ์์ ํตํด, ์๋ฒ๋ ์ ์ ์ค ํ๋๋ฅผ ์ ํํ๊ณ ์ฌ์ฉํ๋ฉฐ
Content-Type
์๋ต ํค๋๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ ํ๋ ํ์ ์ ์๋ ค์ค๋๋ค.- ์ฝํ
์ธ ํ์
- ํด๋ผ์ด์ธํธ์๊ฒ ์ ํฉํ ์์์ ์ ๊ณตํ๋ ๊ฒ
- ํด๋ผ์ด์ธํธ์ ํจ๊ป ์๋ก์ ์ ์ฅ ์ฐจ์ด๋ฅผ ์ค์ฌ๋๊ฐ๋ฉฐ ๊ฑฐ๋ํ ์์์ ๊ฒฐ์ ํ๋ค.
- ์ฝํ
์ธ ํ์
Content-Type
- ๋ฆฌ์์ค์ media type์ ๋ํ๋ด๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ฐํ๋ ์ปจํ ์ธ ์ ์ปจํ ์ธ ์ ํ์ด ์ค์ ๋ก ๋ฌด์์ธ์ง๋ฅผ ์๋ ค์ค๋๋ค.
Enum Map vs Hash Map
-
HashMap
- ํด์ฑ์ ํ๋ ๊ณผ์ ์ด ์์ผ๋ฏ๋ก ์ถ๊ฐ์ ์ธ ์ฐ์ฐ์ด ์กด์ฌ
- ํด์ ์ถฉ๋์ด ์ผ์ด๋๋ ๊ณผ์ ์์ ์ฑ๋ฅ์ด ์ ํํ ์ ์๋ค.
-
EnumMap
- ๋ด๋ถ์ ์ผ๋ก Array๋ฅผ ์ฌ์ฉํจ.
- enum์ ์ ์ธํ ์์๋๋ก ์ ์ฅ
- oridinal()์ ์ด์ฉํ์ฌ ์์๋ฅผ ๋ฐํ ๋ฐ์ ์ ์๋ค.
- get ํจ์
- ๋ฐฐ์ด์ ํตํด ์ง์ ์ ์ผ๋ก ์ ๊ทผํ ์ ์๋ค.
public V get(Object key) { return (isValidKey(key) ? unmaskNull(vals[((Enum)key).ordinal()]) : null); }
- ๋ด๋ถ์ ์ผ๋ก Array๋ฅผ ์ฌ์ฉํจ.
-
Http์
Accept
์Content-Type
์ ๋ํด ๊ณต๋ถํ๋ ์๊ฐ์ด ๋์๋ค. -
ํ์ฅ์์ MimeType์ ๋งคํํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉฐ ๋ค๋ฅธ ๋ถ๋ค๊ณผ ๋ค๋ฅธ ๋ฐฉ์์ ๊ตฌํ์ ๋ณด๊ณ ์ด๋ค ์ฅ๋จ์ ์ด ์์์ง ๊ณ ๋ฏผํด๋ณด๋ ๊ณ๊ธฐ๊ฐ ๋์๋ค.
-
HashMap
๊ณผEnumMap
๋ฅผ ๋น๊ตํด๋ณด๋ ์๊ฐ์ ๊ฐ์ง ์ ์์๋ค.
GET์ผ๋ก ํ์๊ฐ์
- Request ์์ฑ์์์ ๋ณต์กํ ๋ก์ง์ ๋ฃ์ง ๋ง์
- unit test๋ ์์ธํ๊ฒ ์์ฑํ์
- ํ์ ๊ฐ์ ๋ก์ง ์์ฑ ์ 302 HttpCode ๋ฐํ
- redirect ๋ฐํ ์ location ํค๋ ์ถ๊ฐ ํ์
ํผ๋๋ฐฑ
- ์ปค๋ฐ ๋ฉ์์ง๋ ์ ํํ๊ณ ์์ธํ๊ฒ ์์ฑํ์
- ๋ณ์ ์ด๋ฆ์ ๋ค๋ฅธ ์ฌ๋์ด ์ ์ฝ์ ์ ์๊ฒ ์ ํ์.
- .gitignore ์์ฑํ์.
- .idea, gradle/wrapper์ ๊ฐ์ ํ์ผ์ git์์ ๊ด๋ฆฌํ ํ์ ์๋ค.
System.out.println
์ ์ฝ๋์์ ๋ฃ์ง ๋ง์.- HTTP ํ์ค ๋ฌธ์(RFC)๋ฅผ ์ ์ดํด๋ณด์.
- Header๋ ํญ์ ๊ณต๋ฐฑ์ ํฌํจํ์ง ์๋๋ค.
- ": " ์๋ ":"์ผ๋ก๋ response๋ ์ ์๋ํ๋ค.
- unit test๋ ์์ธ ์ํฉ์ ์ต๋ํ ์ฒ๋ฆฌํ ์ ์๋๋ก ๊ฒฌ๊ณ ํ๊ฒ ์์ฑํด๋ผ
- String์ด ์๋ ์์๋ฅผ ์ฌ์ฉํด์ ์์ฑํ์. ์ฌ๋์ ์๋ฒฝํ์ง ์๋ค.
- logger๋ฅผ ์ฌ์ฉํ ๋ ํด๋น ํด๋์ค๋ฅผ ํท๊ฐ๋ฆฌ์ง ๋ง์.