myway00 / Implement-Tomcat-By-Myself

์Šคํ”„๋ง ๋ถ€ํŠธ ๋‚ด๋ถ€์˜ ํ†ฐ์บฃ์ด ์–ด๋–ค ๋™์ž‘์„ ํ•˜๋Š”์ง€ ํ˜ธ๊ธฐ์‹ฌ์„ ๊ฐ–๊ณ  ํ†ฐ์บฃ์„ ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ํ•œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.
0 stars 0 forks source link

๐Ÿ’กCatalina์˜ Socket ์—ฐ๊ฒฐ ๋ฐ Thread ๊ด€๋ฆฌ ๋ฐฉ๋ฒ• (How? Why ? ) #9

Open myway00 opened 1 year ago

myway00 commented 1 year ago

tomcat/src/main/java/org/apache/catalina/connector/Connector.java

์ฃผ์„์„ ๋‹ฌ๊ณ , ๋ถ„์„ํ•˜๋ฉด์„œ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ Catalina ๊ฐ€ Socket ์—ฐ๊ฒฐ์„ ํด๋ผ์ด์–ธํŠธ์™€ ๋งตํ•‘ํ•˜๊ณ , Thread๋ฅผ ํ• ๋‹นํ•˜๋Š”์ง€ ์™„์ „ ์ดํ•ดํ•ฉ์‹œ๋‹ค.

์ˆœ์„œ ๋ฉ”์„œ๋“œ๋ช… ์—ญํ• 
1 createServerSocket ์ง€์ •๋œ ํฌํŠธ ๋ฒˆํ˜ธ์™€ ์ ‘์† ํ—ˆ์šฉ ์ˆ˜๋กœ ServerSocket์„ ์ƒ์„ฑ
2 start Connector๋ฅผ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰ํ•˜๊ณ  ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์„ค์ •
3 run ์„œ๋ฒ„๊ฐ€ ์ •์ง€๋˜์ง€ ์•Š์€ ๋™์•ˆ ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘์† ์š”์ฒญ์„ ์ฒ˜๋ฆฌ , Runnable ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„
4 connect ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘์† ์š”์ฒญ์„ ๋ฐ›์•„๋“ค์ด๊ณ  process ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
5 process ํด๋ผ์ด์–ธํŠธ์™€์˜ ์†Œ์ผ“ ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ Http11Processor๋กœ ์ „๋‹ฌ
6 stop ์„œ๋ฒ„๋ฅผ ์ •์ง€์‹œํ‚ค๊ณ  ServerSocket์„ ๋‹ซ์Œ

? Runnable vs Thread

Thread๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ , ์™œ Runnable์„ ์„ ํƒํ–ˆ์„๊นŒ?

myway00 commented 1 year ago

private final ServerSocket serverSocket ์˜ TCP/IP ํ†ต์‹ ์—์„œ์˜ ์—ญํ• 

1. Server vs Server Socket

ํด๋ž˜์Šค | ์—ญํ•  -- | -- ServerSocket | - ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์†Œ์ผ“
- ์ง€์ •ํ•œ ํฌํŠธ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ ์š”์ฒญ์ด ์˜ค๊ธฐ๋ฅผ ๋Œ€๊ธฐ
- ์š”์ฒญ์ด ์˜ค๋ฉด ํด๋ผ์ด์–ธํŠธ์™€ ์—ฐ๊ฒฐ์„ ๋งบ๊ณ  ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ์™€ ํ†ต์‹ ํ•˜๋Š” ์ƒˆ ์†Œ์ผ“์„ ์ƒ์„ฑ Socket | - ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์—ฐ๊ฒฐ ์š”์ฒญํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์†Œ์ผ“
- ์„œ๋ฒ„์™€์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ๋‹ด๋‹น

2. ์†Œ์ผ“ ์—ฐ๊ฒฐ ๊ณผ์ •

์„œ๋ฒ„ | ๋ฐฉํ–ฅ | ํด๋ผ์ด์–ธํŠธ -- | -- | -- ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›๊ธฐ ์œ„ํ•œ ์ค€๋น„๋ฅผ ํ•œ๋‹ค.(ServerSocket) | ย  | ย  ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ๋“ค์ธ๋‹ค. (accept) | <- | ์„œ๋ฒ„์— ์ ‘์† ์š”์ฒญ์„ ํ•œ๋‹ค. (Socket) ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅ ํ•œ๋‹ค. (BufferedReader) | <- | ์„œ๋ฒ„์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค. (ย BufferedWriter ) ํด๋ผ์ด์–ธํŠธ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค. (ย BufferedWriter ) | -> | ์„œ๋ฒ„๊ฐ€ ๋ณด๋‚ธ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ( BufferedReader ) ์ข…๋ฃŒ ํ•œ๋‹ค. ( socket.close() ) | ย  | ์ข…๋ฃŒ ํ•œ๋‹ค. ( socket.close() )
myway00 commented 1 year ago

private final ExecutorService executorService ์˜ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ ์‹œ ์—ญํ• 

Q ) Task๋Š” ๋ญ๋กœ ๊ด€๋ฆฌ๊ฐ€ ๋˜๋‚˜?


myway00 commented 1 year ago

ํ˜„์žฌ Tomcat ๋ฒ„์ „์—์„œ๋Š” NIO Connector ๋ฐฉ์‹

Acceptor (socket fd) ์—์„œ ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ ๋ฐฉ์‹์œผ๋กœ ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋œ socket connection์ด ์žˆ๋‹ค๋ฉด, ์ด connection ์„ poller (ํ) ์—์„œ ๊บผ๋‚ด์„œ, thread ์—๊ฒŒ ์ง€์ •ํ•ด์ค€๋‹ค.

BIO VS NIO