Skip to content

Latest commit

ย 

History

History
65 lines (41 loc) ยท 4.11 KB

File metadata and controls

65 lines (41 loc) ยท 4.11 KB

Multichat Java Interview Notes

์ด ๋ฌธ์„œ๋Š” Java Socket ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ํ†ต์‹  ์‹œ์Šคํ…œ์„ ๋ฉด์ ‘์—์„œ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ฆฌ์ž…๋‹ˆ๋‹ค.

1. ํ”„๋กœ์ ํŠธ ํ•œ ์ค„ ์„ค๋ช…

Java Socket๊ณผ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์„ ํ™œ์šฉํ•ด ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์‹œ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•œ ํ•™์Šต ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

2. ์ฒ˜์Œ ๋ฌธ์ œ

  • ์ฒ˜์Œ์—๋Š” ์†Œ์ผ“ ์—ฐ๊ฒฐ ํ›„ ๋ฌธ์ž์—ด์„ ๋ณด๋‚ด๋ฉด ์ฑ„ํŒ…์ด ์•ˆ์ •์ ์œผ๋กœ ๋™์ž‘ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์‹œ์— ์ ‘์†ํ•˜๊ฑฐ๋‚˜ ๊ธด ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ๋•Œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ž˜๋ฆฌ๊ฑฐ๋‚˜ ๊นจ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์–ด๋–ค ํด๋ผ์ด์–ธํŠธ, ์–ด๋–ค ์Šค๋ ˆ๋“œ์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋Š”์ง€ ๋กœ๊ทธ๊ฐ€ ๋ถ€์กฑํ•ด ์›์ธ์„ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค.

3. ๋‚ด๊ฐ€ ํ•œ ๋ชฉํ‘œ

  • ํด๋ผ์ด์–ธํŠธ๋งˆ๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„ ๊ตฌ์กฐ ๋งŒ๋“ค๊ธฐ
  • ์—ฐ๊ฒฐ, ๋ฉ”์‹œ์ง€ ์ „์†ก, ์ข…๋ฃŒ ์ด๋ฒคํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ
  • ์ˆ˜์‹  ๋ฒ„ํผ์—์„œ ์™„์ „ํ•œ ๋ฉ”์‹œ์ง€ ๋‹จ์œ„๋งŒ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ฐœ์„ ํ•˜๊ธฐ
  • ํŒ€์›์ด ๊ฐ™์€ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๋กœ๊ทธ ์ฒด๊ณ„ ์ •๋ฆฌํ•˜๊ธฐ

4. ๊ตฌํ˜„ ๊ณผ์ •

  • ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ์„ ๋ฐ›์œผ๋ฉด ํด๋ผ์ด์–ธํŠธ๋ณ„ ์ฒ˜๋ฆฌ ์Šค๋ ˆ๋“œ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฉ”์‹œ์ง€ ์œ ํ˜•์„ ๊ตฌ๋ถ„ํ•ด ์—ฐ๊ฒฐ, ์ „์†ก, ์ข…๋ฃŒ ํ๋ฆ„์„ ๋‚˜๋ˆด์Šต๋‹ˆ๋‹ค.
  • ๋กœ๊ทธ์—๋Š” ์Šค๋ ˆ๋“œ ID, ์‹œ๊ฐ„, ์ด๋ฒคํŠธ ์œ ํ˜•์„ ํฌํ•จํ•˜๋„๋ก ๊ธฐ์ค€์„ ๋งž์ท„์Šต๋‹ˆ๋‹ค.
  • ๊ธด ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜๋‰˜์–ด ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•ด ์ˆ˜์‹  ๋ฒ„ํผ ๋ˆ„์ ๊ณผ ๋ฉ”์‹œ์ง€ ๋‹จ์œ„ ์ฒ˜๋ฆฌ ๊ธฐ์ค€์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

5. ๋ง‰ํ˜”๋˜ ์ 

  • TCP๋Š” ๋ฉ”์‹œ์ง€ ๊ฒฝ๊ณ„๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ ๋ณด๋‚ธ ๋ฉ”์‹œ์ง€๊ฐ€ ํ•œ ๋ฒˆ์— ๊ทธ๋Œ€๋กœ ๋„์ฐฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์‹œ์— ์ ‘์†ํ•˜๋ฉด ๋กœ๊ทธ ์ˆœ์„œ๊ฐ€ ์„ž์—ฌ ๋ฌธ์ œ ๋ฐœ์ƒ ์ง€์ ์„ ์ฐพ๊ธฐ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋งˆ๋‹ค ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์€ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ, ์ ‘์†์ž๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ๋ฆฌ์†Œ์Šค ๋ถ€๋‹ด์ด ์ปค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • ๋ฉ”์‹œ์ง€ ์ˆ˜์‹  ์‹œ ๋ฒ„ํผ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ˆ„์ ํ•˜๊ณ  ์™„์ „ํ•œ ๋‹จ์œ„๋งŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋กœ๊ทธ ๊ธฐ์ค€์„ ํ†ต์ผํ•ด ์Šค๋ ˆ๋“œ๋ณ„ ๋™์ž‘์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ–ฅํ›„ ๊ฐœ์„  ๋ฐฉํ–ฅ์œผ๋กœ Thread Pool๊ณผ Java NIO๋ฅผ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

7. ๋ฉด์ ‘์—์„œ ๋งํ•  ํฌ์ธํŠธ

TCP ๋ฉ”์‹œ์ง€ ๊ฒฝ๊ณ„

TCP๋Š” ์ŠคํŠธ๋ฆผ ๊ธฐ๋ฐ˜์ด๋ผ์„œ send ํ•œ ๋ฒˆ์ด receive ํ•œ ๋ฒˆ๊ณผ 1:1๋กœ ๋Œ€์‘๋œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ˆ˜์‹  ๋ฒ„ํผ๋ฅผ ๋ˆ„์ ํ•˜๊ณ , ๋ฉ”์‹œ์ง€ ๊ธธ์ด๋‚˜ ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™„์ „ํ•œ ๋ฉ”์‹œ์ง€๋งŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์ฒ˜๋ฆฌ

ํด๋ผ์ด์–ธํŠธ๋ณ„ ์Šค๋ ˆ๋“œ ๋ฐฉ์‹์€ ๊ตฌํ˜„๊ณผ ์ดํ•ด๊ฐ€ ์‰ฝ์ง€๋งŒ, ์ ‘์†์ž๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์Šค๋ ˆ๋“œ ์ƒ์„ฑ ๋น„์šฉ๊ณผ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋น„์šฉ์ด ์ปค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด Thread Pool์ด๋‚˜ Java NIO๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋กœ๊ทธ ๊ธฐ์ค€

๋™์‹œ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋กœ๊ทธ ์ˆœ์„œ๊ฐ€ ์„ž์ด๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์Šค๋ ˆ๋“œ ID, ์‹œ๊ฐ„, ์ด๋ฒคํŠธ ์œ ํ˜•์„ ํ†ต์ผํ•ด์„œ ๊ธฐ๋กํ•ด์•ผ ์–ด๋А ์—ฐ๊ฒฐ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

8. ๋‹ค์‹œ ํ•œ๋‹ค๋ฉด ๊ฐœ์„ ํ•  ์ 

  • Thread Pool ์ ์šฉ
  • Java NIO ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ
  • ๋ฉ”์‹œ์ง€ ํ”„๋กœํ† ์ฝœ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
  • ํด๋ผ์ด์–ธํŠธ ์žฌ์ ‘์† ์ฒ˜๋ฆฌ
  • ์„œ๋ฒ„ ์ข…๋ฃŒ ์‹œ ์—ฐ๊ฒฐ ์ •๋ฆฌ ํ๋ฆ„ ๋ณด๊ฐ•

9. 30์ดˆ ๋‹ต๋ณ€ ์˜ˆ์‹œ

Java Socket์œผ๋กœ ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์‹œ์— ์ ‘์†ํ•˜๋Š” ์ฑ„ํŒ… ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋ฉด ๊ทธ๋Œ€๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, TCP๋Š” ์ŠคํŠธ๋ฆผ ๊ธฐ๋ฐ˜์ด๋ผ ๊ธด ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜๋‰˜์–ด ์ˆ˜์‹ ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜์‹  ๋ฒ„ํผ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ˆ„์ ํ•˜๊ณ  ์™„์ „ํ•œ ๋ฉ”์‹œ์ง€ ๋‹จ์œ„๋งŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ ์Šค๋ ˆ๋“œ ID์™€ ์ด๋ฒคํŠธ ์œ ํ˜•์„ ๋กœ๊ทธ์— ๋‚จ๊ฒจ ๋™์‹œ ์ ‘์† ์ƒํ™ฉ์—์„œ๋„ ๋ฌธ์ œ๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ ๋‹ค์‹œ ํ•œ๋‹ค๋ฉด Thread Pool์ด๋‚˜ Java NIO๋ฅผ ์ ์šฉํ•ด ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์„ ๊ฐœ์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.