Skip to content

Latest commit

ย 

History

History
79 lines (43 loc) ยท 4.72 KB

File metadata and controls

79 lines (43 loc) ยท 4.72 KB

messageConverter๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”

์Šคํ”„๋ง์ด๋ž€?

๐Ÿ”— ๊ฐ•์˜๋งํฌ : https://www.inflearn.com/course/์Šคํ”„๋ง๋ถ€ํŠธ-๊ฐœ๋…์ •๋ฆฌ/dashboard

1. ์Šคํ”„๋ง์€ MessageConverter๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ํ˜„์žฌ Json์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์˜์–ด๊ถŒ์— ์‚ฌ๋žŒ๊ณผ ํ•œ๊ตญ์‚ฌ๋žŒ์ด ๋Œ€ํ™”๋ฅผ ํ•  ๋•Œ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋Œ€ํ™” ์‹œ ๋ณด๋‚ด๋Š” ์‚ฌ๋žŒ์ด ๋ฒˆ์—ญ์„ ํ•ด์„œ ๋ณด๋‚ด๊ฑฐ๋‚˜ ๋ฐ›๋Š” ์‚ฌ๋žŒ์ด ๋ฒˆ์—ญ์„ ํ•ด์•ผํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋ถˆํŽธํ•˜๋‹ค.

๊ทธ๋ž˜์„œ ํ•œ๊ตญ๋„ ์˜์–ด์‚ฌ๋žŒ๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘๊ฐ„์–ธ์–ด๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜๋Š”๋ฐ.. ์ด๊ฒƒ์ฒ˜๋Ÿผ ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค. ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ๋ž€ ์›๋ž˜ ์ดˆ๊ธฐ์—๋Š” xml์„ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ์ด์ œ๋Š” JSON์„ ๋งŽ์ด ์“ฐ๋Š” ์ถ”์„ธ์ด๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด์ž

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์˜ˆ์‹œ๋ฅผ ๋“ค์ž๋ฉด ์ž๋ฐ” object๋ฅผ ๋˜์ง€๊ฒŒ ๋˜๋ฉด ํŒŒ์ด์ฌ object๋Š” ์ดํ•ดํ•  ์ˆ˜ ์—†๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ž๋ฐ”์˜ object์™€ ํŒŒ์ด์ฌ์˜ object๋Š” ์„œ๋กœ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ” object ์ „์†ก๋˜๊ธฐ ์ „์— ์ค‘๊ฐ„ ์–ธ์–ด์ธ JSON์œผ๋กœ ๋ฐ”๊ฟ”์ ธ์„œ ํŒŒ์ด์ฌ์ด ๋ฐ›๊ฒŒ ๋œ ํ›„ ๋‹ค์‹œ ํŒŒ์ด์ฌ object๋กœ ๋ฐ”๊พผ๋‹ค.. JSON์€ ๋ชจ๋“  ์–ธ์–ด๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘๊ฐ„ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ž๋ฐ”

class Animal{
	int num = 10;
	String name = "์‚ฌ์ž";

}

Json

{"num":10, "name":"์‚ฌ์ž"}

๐Ÿค” ๊ทธ๋ ‡๋‹ค๋ฉด messageConverter๋ž€ ๋ญ”๋ฐ..?

์ž๋ฐ” object๋ฅผ JSON ํ˜•ํƒœ๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ”๊ฟ€ ํ•„์š” ์—†์ด ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒƒ์„ MessageConverter์ด๋ผ๊ณ  ํ•œ๋‹ค.\

์š”์ฒญ ์‹œ์™€ ์‘๋‹ต ์‹œ ๋ชจ๋‘ MessageConvertor๊ฐ€ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒƒ์œผ๋กœ MessageConvertor์€ spring์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์กด์žฌํ•˜๋ฉฐ jackson์ด๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.

2. ์Šคํ”„๋ง์€ BufferedReader์™€ BufferedWriter๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ†ต์‹ ์˜ ๊ฒฝ์šฐ ์ „๊ธฐ์„ (์ „๋ฅ˜) ์ฒ˜๋Ÿผ ์ฃผ๋ฅด๋ฅต ํ๋ฅด๊ฒŒ ๋˜์–ด ์žˆ์œผ๋ฉฐ, bit ๋‹จ์œ„๋กœ 0, 1, 0, 1, 1, 1, 0 ์ด๋Ÿฐ์‹์œผ๋กœ ํ‘œํ˜„ํ•˜๊ฒŒ ๋˜์–ด ์žˆ๋‹ค.

ํ†ต์‹ ์˜ ๊ฒฝ์šฐ ์˜์–ด๊ถŒ์—์„œ ๋จผ์ € ๋ฐœ์ „ํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ.. bit ๋‹จ์œ„๋กœ ํ• ๋ ค๋‹ˆ ๋ถˆํŽธํ•ด์„œ ์˜์–ด ํ•œ๋ฌธ์ž๋กœ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ•˜์ง€? ๐Ÿค” ๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์ด 8bit = $2^8$๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, 256๊ฐ€์ง€์˜ ๋ฌธ์ž์ „์†ก๊ฐ€๋Šฅํ•˜๋‹ค. ์ฐธ๊ณ ๋กœ ํ•œ๊ธ€์€ 16bit ํ•„์š”ํ•˜๋‹ค.

๊ทธ๋ž˜์„œ 8bit์”ฉ ๋Š์–ด ์ฝ์–ด ๊ทธ๋ ‡๋‹ค๋ฉด ํ•œ ๋ฌธ์ž์”ฉ ๋ฐ›์„ ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ๋ผ๊ณ  ํ•ด์„œ 8bit = 1byte๋ผ๊ณ  ํ•œ๋‹ค. 1byte๋Š” ํ†ต์‹ ์˜ ์ตœ์†Œ๋‹จ์œ„๋กœ ๋ณธ๋‹ค.

1byte = ํ•˜๋‚˜์˜ ๋ฌธ์ž

ํ•œ๊ตญ์€ 2Byte๋กœ ์ธ์ฝ”๋”ฉํ•˜๊ณ  ์˜์–ด๊ถŒ์€ 1Byte๋กœ ํ†ต์‹ ํ•˜๊ฒŒ ๋˜๋ฉด.. ๋ฐ์ดํ„ฐ ํ†ต์‹ ์ด ๋ถˆ๊ฐ€๋Šฅ ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ž˜์„œ ์œ ๋‹ˆ์ฝ”๋“œ์—์„œ ์ •ํ•ด๋‘” ๊ฒƒ์ด UTF-8์ด๋ผ๋Š” ์ธ์ฝ”๋”ฉ์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋ฐ 3Byte ํ†ต์‹  ๋ฐฉ์‹์ด๋‹ค.

์ž๋ฐ”๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ InputStream์œผ๋กœ ์ฝ๋Š” ๋ฐ ๋ฐ”์ดํŠธ๋กœ ์ฝ๋Š”๋‹ค. ๋ฐ”์ดํŠธ๋Š” ๋ฌธ์ž๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌํ•  ๋•Œ ๋ณต์žกํ•ด์ง„๋‹ค. ๋ฌธ์ž๋กœ (char) ์บ์ŠคํŒ…ํ•ด์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š”๋ฐ.. ๋ณต์žกํ•˜๋‹ค.

๊ทธ๋ž˜์„œ ์ฒซ ๋Œ€์•ˆ์ด InputStramReader๋Š” ๋ฌธ์ž ํ•˜๋‚˜๋ฅผ ๋ฐ›๋Š”๋‹ค. ๊ทผ๋ฐ ์ด๊ฑฐ ๋˜ํ•œ ๋ฐฐ์—ด์— ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์ž๋ฅผ ์จ์„œ ๋ฐ›์•„์•ผ ํ•ด์„œ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ •ํ•ด๋‘ฌ์•ผ ํ•˜๋Š”๋ฐ.. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ž‘์€ ํฌ๊ธฐ๋ฅผ ๋ฐ›์„ ๋•Œ ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•ด์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

BufferedReader๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๊ฐ€๋ณ€๊ธธ์ด์˜ ๋ฌธ์ž๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. request.getReader()

๋ฐ์ดํ„ฐ๋ฅผ ์“ธ ๋•Œ๋„ BufferedWriter๋ฅผ ์จ์•ผ ํ•˜๋Š”๋ฐ ๋‚ด๋ ค์“ฐ๊ธฐ ๊ธฐ๋Šฅ์ด ์—†์–ด์„œ PrintWriter๋ฅผ ์“ฐ๋ฉฐ, ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ print(), println() ์ œ๊ณต ํ•ด์ค€๋‹ค.

์ฆ‰, BufferedWriter๋ž€ Byte Stream์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ ์ „์†ก ๋‹จ์œ„๊ฐ€ ๋ฌธ์ž์—ด๋กœ ๊ฐ€๋ณ€ ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ฒŒ ํ•ด์ฃผ๋Š” ํด๋ž˜์Šค์ด๋‹ค.

์ด๊ฒƒ๋“ค์„ ์ง์ ‘ ๊ตฌํ˜„ํ•  ํ•„์š”์—†๊ณ  ์–ด๋…ธํ…Œ์ด์…˜์„ ์ œ๊ณต @ResponseBadyโ‡’ BufferedWrite๊ฐ€ ๋™์ž‘, ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ๋•Œ๋Š” @RequestBody โ‡’ BufferedReader

3. ์Šคํ”„๋ง์€ ๊ณ„์† ๋ฐœ์ „์ค‘์ด๋‹ค.