์ฐ์ํํ
ํฌ์ฝ์ค ๋ ๋ฒจ 4 ๋ฏธ์
์ค ์์ฒญ์ ํค๋์ ๋ฐ๋๋ฅผ ํ์ฑํด์ผ ํ๋ ์ํฉ์ด ์๊ฒผ๋ค. ๊ทธ๋์ HTTP ์์ฒญ์ ์ฒซ ์ค์ธ ์์ฒญ ๋ผ์ธ(Request Line)์ ํ์ฑํ๋ ๊ฒ์ฒ๋ผ BufferedReader์ readLine()์ ๋ฐ๋ณตํด์ ํ์ฑํ๋ ค๊ณ ํ๋ค. ๊ทธ๋ฐ๋ฐ, ์ด์ํ๊ฒ ์๊พธ ์๋ต์ด ์ค์ง ์๊ณ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฌดํ ๋ก๋ฉ์ ๋น ์ง๊ณ ์๋ ๊ฒ์ด๋ค.
// ํ์ฑ์ ์ํ ์ฝ๋ ์ผ๋ถ
String tmp;
while ((tmp = bufferedReader.readLine()) != null) {
// ํ์ฑ์ ์ฒ๋ฆฌํ๋ ์ฝ๋ ...
}

๊ทธ๋์ ์ด๋ฅผ ํ์
ํ๊ธฐ ์ํด ์๋ฒ์ ํ์ฑ์ด ์ ๋๊ณ ์๋์ง ๋ก๊ทธ๋ฅผ ๋จ๊ฒจ ํ์ธํด๋ดค๋ค. ๊ทธ๋ฐ๋ฐ ํ์ฑ ๊ด๋ จ ๋ก๊ทธ๊ฐ ๋จ์ง๋ ์๋ ๊ฒ์ด๋ค! ์ฌ๋ฐ๋ ์ ์ ๋ค์ ์๋ก๊ณ ์นจํ๊ฑฐ๋ ๋ค๋ฅธ ์์ฒญ์ ๋ณด๋ด๋ฉด ๊ทธ์ ์์ผ ํ์ฑ ๊ด๋ จ ๋ก๊ทธ๊ฐ ์ซ๋ฅด๋ฅต ๋์๋ค๋ ์ ์ด๋ค. ๊ทผ๋ฐ ์ฌ๊ธฐ์ ํ ๊ฐ์ง ์๋ฌธ์ด ๋ค์๋ค. ๋ถ๋ช
์ฒซ ์ค์ธ ์์ฒญ ๋ผ์ธ์ ํ์ฑํ ๋๋ ๋ฌธ์ ์์๋ ๊ฒ์ด ์ฌ๋ฌ ๊ฐ๋ฅผ ํ์ฑํ๋ ค๊ณ ํ๋ ๋ฌธ์ ๊ฐ ๋๋ ๊ฒ์ด ์๋๊ฐ?
๊ทธ๋์ while ๋ฌธ์ ์ ์ ์ง์ฐ๊ณ , ์ฐ์ํด์ 3๊ฐ๋ง ์ฝ์ด๋ณด๊ธฐ๋ก ํ๋ค.

์์์ธ๋ก ๋ฌธ์ ์์ด ์ ๋์๋ค. ๊ทธ๋์ ์์ฒญ ํค๋๊น์ง๋ ์ ์ฝ์ ์ ์๋ ๊ฒ์ผ๋ก ์ถ์ธก์ ํ๊ณ , ์์ฒญ ๋ฐ๋๋ฅผ ์ฝ์ ๋ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ ๊ฒ ๊ฐ์๋ค. ๊ทธ๋์ ๋จผ์ readLine()์ด ์ด๋ค ๋ฐฉ์์ผ๋ก ํ ์ค์ ์ฝ๋์ง ์ฐพ์๋ณด๊ธฐ ์ํด ๊ณต์ ๋ฌธ์๋ฅผ ์ฐพ์๋ณด์๋ค.

์ค๋ช ์ ํด์ํด๋ณด๋ฉด, readLine()์ ์ค์ ๋์ LF(’\n’), CR(’\r’) ๋๋ CRLF(’\r\n’)๋ก ํ๋จํ๊ณ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ๊ทธ๋ ๋ค๋ฉด ํค๋์ ๊ฒฝ์ฐ์๋ CR, LF ๋๋ CRLF๊ฐ ์ค ๋์ ๋ถ์ง๋ง Body์ ๊ฒฝ์ฐ์๋ ๋ญ๊ฐ ์ด๋ฌํ ์ฒ๋ฆฌ๊ฐ ์๋๊ณ ์๋ ๊ฒ ๊ฐ์๋ค. ๊ทธ๋์ ํ ๊ฐ์ง ์คํ์ ์๋ํด๋ดค๋ค. ๋ฐ๋ก Body์ ์๋์ ์ผ๋ก ์ค์ ๋์ ์๋ฏธํ๋ ๋ฌธ์๋ฅผ ๋ฃ๋ ๊ฒ์ด๋ค.


์ญ์ ์์๋๋ก ์ ์๋ํ๊ณ , ์ด๋ฅผ ํ์คํ๊ฒ ๋งค๋ญ์ง๊ธฐ ์ํด์ HTTP ๋ช ์ธ๋ฅผ ์ดํด๋ณด์๋ค.

๋ฏธ์
์์ HTTP/1.1์ ๊ธฐ์ค์ผ๋ก ํ๊ณ ์๊ธฐ์ ์ด์ ๋ํ ๋ช
์ธ๋ฅผ ๋ดค๋๋ฐ, Message Format์ด ๊ทธ๋ฆผ์ฒ๋ผ ๋์ด์์๋ค. ํด์ํด๋ณด๋ฉด ํค๋์ ๊ฐ ์ค์๋ ๋์ ๊ฐํ์ ์๋ฏธํ๋ CRLF๊ฐ ๋ค์ด๊ฐ๋๋ก ๋์ด ์์ผ๋ฉฐ, ํค๋์ ๋ฐ๋ ์ฌ์ด์๋ CRLF๋ก ์๋ก ๊ณต๊ฐ์ ๋ถ๋ฆฌํ๋ค. ๊ทธ ํ message-body๊ฐ ๋ค์ด๊ฐ๋๋ฐ ์ฌ๊ธฐ์๋ CRLF๊ฐ ๋ค์ด๊ฐ์ผ ํ๋ค๋ ๊ท์น์ด ์๋ค! ๊ทธ๋ ๋ค๋ฉด, HTTP์ ๊ฐ ํค๋๋ค์ CRLF๊ฐ ๋ช
์ธ์ ์ง์ ๋์ด ์์ด ํ ์ค์ ์ฝ์ ์ ์์ง๋ง, HTTP ๋ฐ๋๋ ๋ฐ๋ ๊ฐ์ ๋ฐ๋ผ CR, LF ํน์ CRLF๊ฐ ์์ ์ ์๊ธฐ ๋๋ฌธ์ BufferedReader ์
์ฅ์์๋ ์ด๋๊น์ง ์ฝ์ด์ผ ํ ์ง ํ๋จํ ์ ์๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ์์ฒญ์ด ์ฒ๋ฆฌ๋์ง ๋ชปํ๊ณ ๋ฌดํ ๋๊ธฐ์ ๋น ์ง๊ฒ ๋ ๊ฒ์ด๋ค.
์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์ด๋ฒ ๋ฏธ์
์์๋ BufferedReader์ read() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค. ํนํ, Body๊ฐ ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด Content-Length๋ ํจ๊ป ๋๊ฒจ์ฃผ๋ฏ๋ก ์ด๋ฅผ ์ด์ฉํด ํ์ฑํ๋๋ก ํ๋ค.
String length = requestHeader.getHeader("Content-Length");
int contentLength = Integer.parseInt(length);
char[] buffer = new char[contentLength];
bufferedReader.read(buffer, 0, contentLength);
String requestBody = new String(buffer);
HTTP์ ๋ํ ์ง์์ด ์ ๋ง ์ค์ํ ๊ฒ ๊ฐ๋ค.
'๊ฐ๋ฐ > ์ฐ์ํํ ํฌ์ฝ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์ค์ต์ ํตํ ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ(TDD) (1) | 2025.11.21 |
|---|---|
| ๋ฌธ์์ด ๊ณ์ฐ๊ธฐ๋ฅผ ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ(TDD)๋ก ์งํํ๋ฉฐ ๋๋ ์ (2) | 2025.10.26 |
| ์ฐํ ์ฝ ๋ ๋ฒจ 2 ํ๊ณ (4) | 2025.06.13 |
| ์ฐํ ์ฝ ๋ ๋ฒจ 2์์์ ์ธ ๋ฒ์งธ ๋ฏธ์ ํ๊ณ (17) | 2025.06.01 |
| ์๋น์ค ํ ์คํธ ๊ฐ์ ํ๊ธฐ (6) | 2025.05.26 |