Skip to content

Latest commit

ย 

History

History
115 lines (78 loc) ยท 4.75 KB

File metadata and controls

115 lines (78 loc) ยท 4.75 KB

5์žฅ ์›น ์„œ๋ฒ„

  • ์–ด๋–ป๊ฒŒ ์›น ์„œ๋ฒ„๊ฐ€ HTTP ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•œ๋‹ค.
  • HTTP ํ†ต์‹ ์„ ์ง„๋‹จํ•ด์ฃผ๋Š” ๊ฐ„๋‹จํ•œ ์›น ์„œ๋ฒ„๋ฅผ ์ž‘์„ฑํ•ด๋ณธ๋‹ค.

์›น ์„œ๋ฒ„๊ฐ€ ํ•˜๋Š” ์ผ

  1. ์ปค๋„ฅ์…˜์„ ๋งบ๋Š”๋‹ค - ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘์†์„ ๋ฐ›์•„๋“ค์ด๊ฑฐ๋‚˜, ์›์น˜์•Š๋Š” ํด๋ผ์ด์–ธํŠธ๋ผ๋ฉด ๋‹ซ๋Š”๋‹ค.
  2. ์š”์ฒญ์„ ๋ฐ›๋Š”๋‹ค - HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ๋„คํŠธ์›Œํฌ๋กœ๋ถ€ํ„ฐ ์ฝ์–ด๋“ค์ธ๋‹ค.
  3. ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค - ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ํ•ด์„ํ•˜๊ณ  ํ–‰๋™์„ ์ทจํ•œ๋‹ค.
  4. ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•œ๋‹ค - ๋ฉ”์‹œ์ง€์—์„œ ์ง€์ •ํ•œ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•œ๋‹ค.
  5. ์‘๋‹ต์„ ๋งŒ๋“ ๋‹ค - ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋Œ๋ ค์ค€๋‹ค.
  6. ์‘๋‹ต์„ ๋ณด๋‚ธ๋‹ค - ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋Œ๋ ค์ค€๋‹ค
  7. ํŠธ๋žœ์žญ์…˜์„ ๋กœ๊ทธ๋กœ ๋‚จ๊ธด๋‹ค - ๋กœ๊ทธํŒŒ์ผ์— ํŠธ๋žœ์žญ์…˜ ์™„๋ฃŒ์— ๋Œ€ํ•œ ๊ธฐ๋ก์„ ๋‚จ๊ธด๋‹ค

web.server package์— web server๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ๊ตฌ๋™ ํ›„ ๋ธŒ๋ผ์šฐ์ €์—์„œ localhost:8080/index.html ๋ฅผ ์˜ฌ๋ ค ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ์กด์— builder pattern์„ ์ง์ ‘ ๊ตฌํ˜„ํ–ˆ๋˜ ๋ถ€๋ถ„์„ lombok์„ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์— ๋Œ€ํ•œ ์กฐ์น˜๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

https://docs.spring.io/spring/docs/3.0.0.M4/spring-framework-reference/html/ch15s02.html


  1. ์ปค๋„ฅ์…˜์„ ๋งบ๋Š”๋‹ค ServerSocket์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

ClientSocket vs ServerSocket

ServerSocket์—๋Š” shutdownInput์ด๋ž€ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š”๋ฐ, 4์žฅ์—์„œ gracefully shutdown๊ณผ ์—ฐ๊ด€๋œ ๊ฐœ๋…์ด๋ผ ํ•จ๊ป˜ ๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค. https://stackoverflow.com/questions/15206605/purpose-of-socket-shutdownoutput


  1. ์š”์ฒญ ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ 

์š”์ฒญ์ค„์„ ํŒŒ์‹ฑํ•˜์—ฌ ์š”์ฒญ ๋ฉ”์„œ๋“œ, ์ง€์ •๋œ ๋ฆฌ์†Œ์Šค์˜ ์‹๋ณ„์ž(URI), ๋ฒ„์ „๋ฒˆํ˜ธ๋ฅผ ์ฐพ๋Š”๋‹ค. ๋ฉ”์‹œ์ง€ ํ—ค๋”๋“ค์„ ์ฝ๋Š”๋‹ค. ํ—ค๋”์˜ ๋์„ ์˜๋ฏธํ•˜๋Š” ๋นˆ ์ค„์„ ์ฐพ์•„๋‚ธ๋‹ค. ์š”์ฒญ ๋ณธ๋ฌธ์ด ์žˆ๋‹ค๋ฉด ์ฝ์–ด๋“ค์ธ๋‹ค. (๊ธธ์ด๋Š” Content-Length ํ—ค๋”๋กœ ์ •์˜๋œ๋‹ค.)

๊ด€๋ จํ•˜์—ฌ web.protocol.http.message ํŒจํ‚ค์ง€์˜ ๋‚ด์šฉ์„ ํ™•์ธํ•ด๋ด๋„ ์ข‹๋‹ค. ํŠนํžˆ ResponseMessageFactory ํด๋ž˜์Šค์—์„œ ์‘๋‹ต ํŒจํ‚ท์„ ๋งŒ๋“ค๋ฉฐ ํ•ด๋‹น ๋ถ€๋ถ„์„ ์ž‘์„ฑํ•˜์˜€์œผ๋‹ˆ ํ™•์ธํ•ด๋ด๋„ ์ข‹๊ฒ ๋‹ค.

public static void response(ResponseMessage message, DataOutputStream dos) throws IOException {
        String responseLine = getResponseLine(message);
        String headers = getHeader(message);
        dos.writeBytes(responseLine);
        dos.writeBytes(headers);
        dos.write(message.getEntityBody().getBody(), 0, message.getEntityBody().getBody().length);
        dos.flush();
    }

์ปค๋„ฅ์…˜ ์ž…๋ ฅ/์ถœ๋ ฅ ์ฒ˜๋ฆฌ ์•„ํ‚คํ…์ฒ˜ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ์›น ์„œ๋ฒ„, ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค์™€ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค ์›น์„œ๋ฒ„ ๋“ฑ์— ๋Œ€ํ•œ ๋น„๊ต๋Š” Apache MPM vs Nginx๋กœ ๋Œ€์ฒดํ•œ๋‹ค.


  1. ์š”์ฒญ ์ฒ˜๋ฆฌ

https://docs.spring.io/spring/docs/3.0.0.M4/spring-framework-reference/html/ch15s02.html

์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋Š” DispatcherServlet์˜ ๋™์ž‘๋ฐฉ์‹์— ์˜๊ฐ์„ ์–ป์–ด ์ž‘์„ฑํ•˜์˜€๋‹ค. ํ˜„์žฌ๋Š” RequestResolver class์—์„œ index.html,style.css ๋“ฑ ํŒŒ์ผ์— ๋Œ€ํ•œ ์š”์ฒญ์ธ์ง€ /users์™€ ๊ฐ™์ด Controller์— ๋Œ€ํ•œ ์š”์ฒญ์ธ์ง€๋ฅผ ํŒ๋‹จํ•˜๋ฉฐ ๊ทธ ์ดํ›„ ControllerResolver, ResourceResolver๊ฐ€ URL์— ๋งž๋Š” Controller๋ฅผ ๋ฆฌํ„ดํ•˜๊ฑฐ๋‚˜, ํŒŒ์ผ์„ ์ฝ์–ด ๋ฆฌํ„ดํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์„ค๊ณ„ํ•˜์˜€๋‹ค.


  1. ๋ฆฌ์†Œ์Šค์˜ ๋งคํ•‘๊ณผ ์ ‘๊ทผ (1) Docroot Apache web server๋Š” DocumentRoot๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์„œ๋ฅผ ์ฝ์œผ๋ฉฐ ๊ทธ ์ƒ์œ„์˜ ๊ฒฝ๋กœ๋Š” ์ฝ๊ธฐ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋„๋ก, Directory listing์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋„๋ก ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.
<VirtualHost *:80>
  DocumentRoot /data/www/hub
  ServerName www.brainbackdoor.com
  <Location />
      RedirectMatch /(.*)$ https://www.brainbackdoor.com/$1
  </Location>
  ErrorLog "|/usr/sbin/cronolog /data/log/httpd/`hostname`/woowa.brainbackdoor.com/woowa.brainbackdoor.com_error_log_%Y%m%d"
  CustomLog "|/usr/sbin/cronolog /data/log/httpd/`hostname`-time/woowa.brainbackdoor.com/woowa.brainbackdoor.com-%Y%m%d-%H" securityteam
</VirtualHost>

(2) DirectoryIndex

์›น์„œ๋ฒ„์˜ ๋””๋ ‰ํ† ๋ฆฌ ์ ‘๊ทผ์‹œ์— DirectoryIndex์—์„œ ์ง€์ •ํ•œ ํŒŒ์ผ(index.html ๋“ฑ)์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

(3) ๋™์  ์ปจํ…์ธ  ๋ฆฌ์†Œ์Šค ๋งคํ•‘

ํŠน์ • ์š”์ฒญ์— ๋Œ€ํ•ด ScriptAlias ์†์„ฑ์„ ํ†ตํ•ด CGI ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŠน์ •ํ•œ ์œ„์น˜์—์„œ๋งŒ ์ œ๊ณตํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

(4) ์ ‘๊ทผ์ œ์–ด

์›น ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ IP ์ฃผ์†Œ์— ๊ทผ๊ฑฐํ•˜์—ฌ ์ ‘๊ทผ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ณ  ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋Š” ๋ฐ์— ์žˆ์–ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ฌผ์–ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.


  1. ์‘๋‹ต ๋งŒ๋“ค๊ธฐ

(1) ์‘๋‹ต ์—”ํ„ฐํ‹ฐ : ResponseMessage

  • ์‘๋‹ต ๋ณธ๋ฌธ์˜ MIME ํƒ€์ž…์„ ์„œ์ˆ ํ•˜๋Š” Content-Type ํ—ค๋” (๋ฏธ๊ตฌํ˜„)
  • ์‘๋‹ต ๋ณธ๋ฌธ์˜ ๊ธธ์ด๋ฅผ ์„œ์ˆ ํ•˜๋Š” Content-Length ํ—ค๋”
  • ์‹ค์ œ ์‘๋‹ต ๋ณธ๋ฌธ์˜ ๋‚ด์šฉ

(2) ๋ฆฌ๋‹ค์ด๋ ‰์…˜

  • Location ์‘๋‹ตํ—ค๋”๋ฅผ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•œ๋‹ค.