Home Basic Confusing Questions โ…ข ๐Ÿคทโ€โ™‚๏ธ
Post
Cancel

Basic Confusing Questions โ…ข ๐Ÿคทโ€โ™‚๏ธ

Servlet๊ณผ Spring์˜ ์ฐจ์ด

์„œ๋ธ”๋ฆฟ์€ http์˜ ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
ํ•˜๋‚˜์˜ ์š”์ฒญ์ด์™”์„๋•Œ ์‘๋‹ต์„ ์ฃผ๋Š” ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋œ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ์š”์ฒญ๋งˆ๋‹ค ์„œ๋ธ”๋ฆฟ์„ ์ •์˜ํ•ด์•ผํ•˜๋Š” ๋‹จ์ ์ด ์žˆ์—ˆ๊ณ  ๊ทธ๋ž˜์„œ ๋‚˜์˜จ๊ฐœ๋…์ด ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์ž…๋‹ˆ๋‹ค. spring์€โ€ฆ

์ •๊ทœํ™”์˜ ์žฅยท๋‹จ์ 

์ •๊ทœํ™”๋ž€?
DB์˜ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ด์ƒํ˜„์ƒ์„ ์ค„์ผ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ๊ณผ๋„ํ•œ ์ •๊ทœํ™”๋กœ ์ธํ•ด ๋ณต์žกํ•œ ๊ตฌ์กฐ์™€ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋กœ๋“œ๋ฒจ๋Ÿฐ์‹ฑ L7๊ณผ L4์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ณด์‹œ์˜ค

L4 ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์€ IP ์ฃผ์†Œ์™€ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. L4 ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋Š” OSI ๋ชจ๋ธ์˜ 4๊ณ„์ธต(์ „์†ก ๊ณ„์ธต)์—์„œ ๋™์ž‘ํ•˜๋ฉฐ, TCP ๋ฐ UDP์™€ ๊ฐ™์€ ์ „์†ก ๊ณ„์ธต ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

L7 ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋Š” HTTP ๋ฐ HTTPS์™€ ๊ฐ™์€ ์‘์šฉ ๊ณ„์ธต ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. L7 ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋Š” ํŠธ๋ž˜ํ”ฝ์˜ ๋‚ด์šฉ์— ๋”ฐ๋ผ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, L7 ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋Š” URL, ์ฟ ํ‚ค, ํ—ค๋” ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋žœ๋ค์ ‘๊ทผ, ์ˆœ์ฐจ์ ‘๊ทผ์˜ ์žฅยท๋‹จ์ 

๋žœ๋ค์ ‘๊ทผ(Random Access)๊ณผ ์ˆœ์ฐจ์ ‘๊ทผ(Sequential Access)์€ ์ปดํ“จํ„ฐ์—์„œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

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

์ˆœ์ฐจ์ ‘๊ทผ์€ ๋ฐ์ดํ„ฐ์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์•Œ์ง€ ๋ชปํ•ด๋„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฒ€์ƒ‰, ์ˆ˜์ •์— ์žˆ์–ด ๋งค์šฐ ๋Š๋ฆฝ๋‹ˆ๋‹ค.

ArrayList()์™€ Vector์˜ ์ฐจ์ด

ArrayList์™€ vector์˜ ์ฐจ์ด๋Š” thread safe ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. vetor๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ synchronized๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ์—๋”ฐ๋ผ ์†๋„๊ฐ€ ๋Š๋ ค์ง‘๋‹ˆ๋‹ค. ๋˜ํ•œ ๋™์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ• ๋‹นํ• ๋•Œ๋งˆ๋‹ค ArrayList๋Š” 50% ์ฆ๊ฐ€ํ•˜๋Š” ๋ฐ˜๋ฉด vector๋Š” 100% ์šฉ๋Ÿ‰์„ ์ฆ๊ฐ€ ์‹œํ‚จ๋‹ค.

์‘์ง‘๋„์™€ ๊ฒฐํ•ฉ๋„์— ๋Œ€ํ•œ ์„ค๋ช…

์‘์ง‘๋„๋Š” ๋†’์„์ˆ˜๋ก ๊ฒฐํ•ฉ๋„๋Š” ๋‚ฎ์„ ์ˆ˜๋ก ์ข‹๋‹ค
์‘์ง‘๋„๋Š” ์–ผ๋งˆ๋‚˜ ๋ชจ๋“ˆ ์†์˜ ์ฝ”๋“œ๋“ค์ด ๋‹จ์ผํ•œ ๋ชฉ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š”์ง€์˜ ์—ฌ๋ถ€

์‘์ง‘๋„์˜ ์ข‹์€์˜ˆ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
    public int subtract(int a, int b) {
        return a - b;
    }
    public int multiply(int a, int b) {
        return a * b;
    }
    public int divide(int a, int b) {
        return a / b;
    }
}

๋ฉ”์„œ๋“œ๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋˜์–ด์žˆ๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•จ.

์‘์ง‘๋„์˜ ๋‚˜์œ์˜ˆ
ํ•˜๋‚˜์˜ class์—์„œ get, set์ด ์žˆ๊ณ  ๋ถˆ๋ถ„๋ช…ํ•œ ๋ฉ”์†Œ๋“œ์™€ ๋ณต์žกํ•œ ๋ฆฌํ„ด๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ตฌ์กฐ๋ฅผ ์˜ˆ๋กœ ๋“ค์ˆ˜ ์žˆ๋‹ค.

๊ฒฐํ•ฉ๋„๋Š” ๋ชจ๋“ˆ๊ฐ„์˜ ์˜์กด์„ฑ์„ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ DI ์ฃผ์ž…๋ฐ›์•„ ํ•˜๋Š”๊ฒŒ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์€ ์„ค๊ณ„

SOAP์™€ REST API์˜ ์ฐจ์ด

๋‘˜๋‹ค ์›น์„œ๋น„์Šค ๋ฐฉ์‹์ด์ง€๋งŒ, SOAP์€ XML ๊ธฐ๋ฐ˜์˜ ๋ฉ”์‹œ์ง€ ๊ตํ™˜์„ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.
SOAP์€ WSDL (Web Services Description Language)์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์„ค๋ช…ํ•˜๊ณ , ์„œ๋น„์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ XML๋กœ ์ •์˜ํ•˜๋ฉฐ, SOAP ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SOAP๋Š” ๋ณด์•ˆ๊ณผ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ๋ณต์žกํ•˜๊ณ  ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋Š๋ฆฌ๊ณ , ๊ตฌํ˜„์ด ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

REST๋Š” HTTP ํ”„๋กœํ† ์ฝœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋˜๋Š” API์ž…๋‹ˆ๋‹ค. REST๋Š” URL์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์ •์˜ํ•˜๋ฉฐ, HTTP ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์…˜์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
REST๋Š” ๊ฒฝ๋Ÿ‰ํ™”๋œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฅธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

REST๋Š” ๋ณด์•ˆ๊ณผ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์ด SOAP๋ณด๋‹ค ์ œํ•œ์ ์ด์ง€๋งŒ, ๊ตฌํ˜„์ด ์‰ฝ๊ณ  ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.SOAP๋Š” ๋ณด์•ˆ์ด๋‚˜ ๋ณต์žกํ•œ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์ ํ•ฉํ•˜๋ฉฐ, REST๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฅธ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

JDK JRE JVM ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…

JDK๋Š” ์ž๋ฐ” ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํŒจํ‚ค์ง€์ด๋ฉฐ,
JRE๋Š” ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ด๋ฉฐ,
JVM์€ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์ƒ ๋จธ์‹ ์ž…๋‹ˆ๋‹ค

Spring๊ณผ Springboot ์ฐจ์ด

Spring

  • ๋‹ค์–‘ํ•œ ๋ชจ๋“ˆ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ง€์›ํ•˜์—ฌ ์œ ์—ฐ์„ฑ์ด ๋†’๋‹ค.
  • DI, AOP, MVC ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๋™์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ORM ํ”„๋ ˆ์ž„์›Œํฌ์ธ Hibernate์™€ ์—ฐ๋™ํ•˜์—ฌ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋‹จ์ :

  • ์„ค์ •์ด ๋ณต์žกํ•˜๊ณ , ๊ธฐ๋Šฅ์ด ๋ณต์žกํ•œ ๋งŒํผ ํ•™์Šต์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐฐํฌ ๋ฐ ์šด์˜์— ์žˆ์–ด์„œ๋„ ์„œ๋ฒ„์˜ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์„ค์ •ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋œ๋‹ค.
  • ์ดˆ๊ธฐ ์„ธํŒ…๊ณผ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์ด ๋ฒˆ๊ฑฐ๋กญ๋‹ค.

Spring Boot

  • Spring์˜ ์„ค์ •์„ ์ž๋™ํ™”ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์†์‰ฝ๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.
  • ๋‚ด์žฅ๋œ ํ†ฐ์บฃ, Jetty ๋“ฑ์˜ WAS๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด, ๋ฐฐํฌ์™€ ์‹คํ–‰์ด ๊ฐ„ํŽธํ•˜๋‹ค.
  • ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ๋‚˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋“ฑ์˜ ๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ดํ•‘ ๋ฐ ๊ฐœ๋ฐœ์— ์ ํ•ฉํ•˜๋‹ค.

๋‹จ์ 

  • ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.
  • Spring์˜ ๊ธฐ๋Šฅ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ชจ๋‘ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์–ด, ๋ถˆํ•„์š”ํ•œ ๋ถ€๋ถ„๋„ ํ•จ๊ป˜ ๋‚ด์žฅ๋˜์–ด ๋ฌด๊ฑฐ์šธ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ธฐ์กด์˜ Spring Framework์— ๋น„ํ•ด ๊ณ ๊ธ‰ ์„ค์ •์ด๋‚˜ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค.
Call by value ์™€ Call by reference

์ด ๋‘˜์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹์ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์ง€์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
Call by value๋Š” ๊ฐ’์— ์˜ํ•œ ํ˜ธ์ถœ์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ์ธ์ž๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด๋„, ํ˜ธ์ถœํ•œ ์ธก์˜ ๋ณ€์ˆ˜ ๊ฐ’์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž๋ฐ”๊ฐ€ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์ž…๋‹ˆ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
public static void swapByValue(int x, int y) {
    int temp = x;
    x = y;
    y = temp;
}

public static void main(String[] args) {
    int a = 10;
    int b = 20;
    swapByValue(a, b);
    System.out.println("a=" + a + ", b=" + b);
}

call by reference๋Š” ์ฐธ์กฐ์— ์˜ํ•œ ํ˜ธ์ถœ์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ์ธ์ž๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ณ€์ˆ˜์˜ ์ฐธ์กฐ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด, ํ˜ธ์ถœํ•œ ์ธก์˜ ๋ณ€์ˆ˜ ๊ฐ’๋„ ํ•จ๊ป˜ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
public static void swapByReference(int[] arr) {
    int temp = arr[0];
    arr[0] = arr[1];
    arr[1] = temp;
}

public static void main(String[] args) {
    int[] arr = {10, 20};
    swapByReference(arr);
    System.out.println("arr[0]=" + arr[0] + ", arr[1]=" + arr[1]);
}

web server์™€ was์˜ ์ฐจ์ด

Web Server: ์ •์ ์ธ ์ฝ˜ํ…์ธ  ์ฒ˜๋ฆฌ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋Œ€์ฒด๋กœ WAS๋ณด๋‹ค ๋น ๋ฆ…๋‹ˆ๋‹ค.
WAS: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ์›น ์„œ๋ฒ„๋ณด๋‹ค ๋Š๋ฆฝ๋‹ˆ๋‹ค.
Web Server๋Š” ์ฃผ๋กœ ์ •์ ์ธ ์ฝ˜ํ…์ธ  ์ฒ˜๋ฆฌ์— ์ค‘์ ์„ ๋‘๋ฉฐ, WAS๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ ๋“ฑ์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€ ์„œ๋ฒ„๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์กฐํ•ฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

API vs ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ vs Framework ์ฐจ์ด

API: ๋‹ค๋ฅธ SW์—์„œ ๊ฐœ๋ฐœ์ค‘์ธ sw๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ •์˜๋œ interface์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‰ฝ๊ฒŒ ์ด์šฉํ•˜๋„๋ก ๋งŒ๋“  ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ฝ”๋“œ์˜ ๋ชจ์Œ์ด๊ณ  ๊ฐœ๋ฐœ์ž์— ์˜ํ•ด ํŠน์ • ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•ด์ฃผ๋Š”๊ฒƒ.

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

๋ถˆ๋ณ€๊ฐ์ฒด ๊ฐ€๋ณ€ ๊ฐ์ฒด

๋ถˆ๋ณ€๊ฐ์ฒด ๊ฐ์ฒด ์ƒ์„ฑ ์ดํ›„ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด = String, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ์ฒด๋ฅผ ๊ณต์œ ํ• ์ˆ˜ ์žˆ๋‹ค.
๊ฐ€๋ณ€๊ฐ์ฒด ๊ฐ์ฒด ์ƒ์„ฑ์ดํ›„ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜์žˆ๋Š” ๊ฐ์ฒด = ArrayList, ์Šค๋ ˆ๋“œ safe ํ•˜์ง€์•Š๋‹ค.

์ง๋ ฌํ™” vs ์—ญ์ง๋ ฌํ™”

์ง๋ ฌํ™” : ์ž๋ฐ” ์‹œ์Šคํ…œ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€์˜ ์ž๋ฐ” ์‹œ์Šคํ…œ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ”์ดํŠธ(byte) ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ์ˆ .
์บ์‹œ์™€ ์„œ๋ธ”๋ฆฟ ์„ธ์…˜์„ ์˜ˆ๋กœ ๋“ค์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง๋ ฌํ™”๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ :
์ง๋ ฌํ™” ๋ฐ์ดํ„ฐ๋Š” ํƒ€์ž…, ํด๋ž˜์Šค ๋ฉ”ํƒ€์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋ฏ€๋กœ ์‚ฌ์ด์ฆˆ๊ฐ€ ํฌ๋‹ค. ํŠธ๋ž˜ํ”ฝ์— ๋”ฐ๋ผ ๋น„์šฉ ์ฆ๊ฐ€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— JSON ํฌ๋งท์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค

์ด์ง„ํƒ์ƒ‰ ์‹œ๊ฐ„๋ณต์žก๋„

์ด์ง„ ํƒ์ƒ‰์€ ์ •๋ ฌ์ด ๋˜์–ด์žˆ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์—, ์ค‘์•™๋ถ€ํ„ฐ ๊ฐ’์„ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.
O(logn) ๋น„๊ต๋กœ ์›ํ•˜๋Š” ๊ฐ’์„ ์ฐพ์•„ ๊ฐˆ ์ˆ˜ ์žˆ์Œ. ์ด๋กœ ์ธํ•ด ์‚ฝ์ž…, ์‚ญ์ œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ๋“ฑ ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์ด ํ•„์š”ํ•จ.

๋ณ‘ํ•ฉ ์ •๋ ฌ, ํ€ต์ •๋ ฌ

๋‘˜๋‹ค divide & conquer ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ๋‘˜๋‹ค ํ‰๊ท  ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(nlogn)์ž…๋‹ˆ๋‹ค.
ํ€ต์ •๋ ฌ์˜ ์ตœ์•…์ผ ๊ฒฝ์šฐ์—๋Š” O(n^2)์ด๊ณ  ๋ณ‘ํ•ฉ์€ ํ•ญ์ƒ nlogn ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
์ž๋ฐ”๋Š” ARRAY์˜ ๊ฒฝ์šฐ ๋“€์–ผ ํ”ผ๋ด‡, Collections์—๋Š” Tim sort๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.(๋ณ‘ํ•ฉ์ •๋ ฌ+์‚ฝ์ž…์ •๋ ฌ)

ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ, ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ

ํ”„๋กœ์„ธ์Šค ๋Š” OS์— ์‹คํ–‰๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€ ์‹คํ–‰ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•˜๋ฉฐ, ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›์•„ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ IPC๋ฅผ ์ด์šฉํ•ด ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ํ†ต์‹ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

IPC(Inter-Process Communication)๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

IPC(Inter-Process Communication)๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ธฐ์ˆ ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ํ†ต์‹ ์„ ํ•  ๋•Œ๋Š” IPC๋ฅผ ์ด์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ€์ง„ ์ž์›์„ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜, ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

IPC ๊ธฐ์ˆ ์—๋Š” ํŒŒ์ดํ”„, ๋ฉ”์‹œ์ง€ ํ, ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
ํŒŒ์ดํ”„(Pipe)๋Š” ์ผ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ถ€๋ชจ์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ํ†ต์‹ ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
e.g) ๋ถ€๋ชจ P -> ์ž์‹ P or ์ž์‹ P -> ๋ถ€๋ชจ P

๋ฉ”์‹œ์ง€ ํ(Message Queue)๋Š” ์šฐํŽธํ•จ๊ณผ ๊ฐ™์€ ์—ญํ• ๋กœ, ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ํ์— ๋ณด๋‚ด๊ณ  ๋ฐ›์•„์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
e.g) , ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋“ฑ์˜ ๊ฒฝ์šฐ์— ๋ฉ”์‹œ์ง€ ํ๊ฐ€ ์‚ฌ์šฉ

๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ(Shared Memory)๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋ฉด, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—์„œ๋„ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
e.g) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์—์„œ ๋‹ค๋ฅธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜, ์›น ์„œ๋ฒ„์—์„œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋“ฑ์˜ ๊ฒฝ์šฐ์— ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ

IPC๋ฅผ ์ด์šฉํ•˜๋ฉด, ๊ฐ๊ฐ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์ด ๊ฐ€๋Šฅํ•ด์ง€๋ฏ€๋กœ, ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ˜‘๋ ฅ์ด ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์—์„œ ๋‹ค๋ฅธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜, ์›น ์„œ๋ฒ„์—์„œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋“ฑ์˜ ๊ฒฝ์šฐ์— IPC๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ฎคํ…์Šค ์„ธ๋งˆํฌ์–ด ๋ชจ๋‹ˆํ„ฐ๋ฝ

๋ฎคํ…์Šค ๋ฝ๊ณผ ์–ธ๋ฝ์„ ํ†ตํ•ด ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋™๊ธฐํ™” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.
์ž„๊ณ„ ๊ตฌ์—ญ(critical section)์— ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ์ง„์ž…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
๋ฎคํ…์Šค๋Š” ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ์ž„๊ณ„ ๊ตฌ์—ญ์— ์ง„์ž…ํ•˜๋„๋ก ๋ณด์žฅํ•˜์ง€๋งŒ, ๊ณต์œ  ์ž์›์— ๋Œ€ํ•œ ๋™๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ์„ธ๋งˆํฌ์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

๋ชจ๋‹ˆํ„ฐ ๋ฝ์€ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ƒํ˜ธ ๋ฐฐ์ œ๋ฅผ ์œ„ํ•œ ๋™๊ธฐํ™” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.
๋ชจ๋‹ˆํ„ฐ ๋ฝ์€ ์ž๋ฐ”์—์„œ synchronized ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.
๋ชจ๋‹ˆํ„ฐ ๋ฝ์€ ๋ฉ”์†Œ๋“œ๋‚˜ ๋ธ”๋ก ๋‹จ์œ„๋กœ ์ ์šฉ๋˜๋ฉฐ, ๋ฝ์„ ์–ป์€ ์Šค๋ ˆ๋“œ๋งŒ ์ž„๊ณ„ ๊ตฌ์—ญ์— ์ง„์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ชจ๋‹ˆํ„ฐ ๋ฝ์€ ๋ฎคํ…์Šค์™€ ๋‹ฌ๋ฆฌ ๋Œ€๊ธฐ ์ค‘์ธ ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

This post is licensed under CC BY 4.0 by the author.

Index... ๋žœ๋ค Io, ์ˆœ์ฐจ IO

Spring์šฉ์–ด,์›น์„œ๋ฒ„ ๊ทธ๋ฆฌ๊ณ  Spring MVC