Home > CS > 2024 > πŸ’Ύ [CS] Java λ°±μ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ„œλ²„λ₯Ό μ‹€ν–‰μ‹œμΌœ APIλ₯Ό λ™μž‘μ‹œν‚€κΈ°κΉŒμ§€ ν•˜λ“œμ›¨μ–΄μ μœΌλ‘œ μΌμ–΄λ‚˜λŠ” 일

πŸ’Ύ [CS] Java λ°±μ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ„œλ²„λ₯Ό μ‹€ν–‰μ‹œμΌœ APIλ₯Ό λ™μž‘μ‹œν‚€κΈ°κΉŒμ§€ ν•˜λ“œμ›¨μ–΄μ μœΌλ‘œ μΌμ–΄λ‚˜λŠ” 일
CS

πŸ’Ύ [CS] Java λ°±μ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ„œλ²„λ₯Ό μ‹€ν–‰μ‹œμΌœ APIλ₯Ό λ™μž‘μ‹œν‚€κΈ°κΉŒμ§€ ν•˜λ“œμ›¨μ–΄μ μœΌλ‘œ μΌμ–΄λ‚˜λŠ” 일.

Java λ°±μ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ„œλ²„λ₯Ό μ‹€ν–‰μ‹œν‚€κ³  APIκ°€ λ™μž‘ν•˜κΈ°κΉŒμ§€λŠ” μ†Œν”„νŠΈμ›¨μ–΄μ™€ ν•˜λ“œμ›¨μ–΄κ°€ κΈ΄λ°€ν•˜κ²Œ μƒν˜Έμž‘μš©ν•©λ‹ˆλ‹€.
ν•˜λ“œμ›¨μ–΄ μΈ‘λ©΄μ—μ„œλŠ” CPU, λ©”λͺ¨λ¦¬(RAM), λ””μŠ€ν¬, λ„€νŠΈμ›Œν¬ μΉ΄λ“œ(NIC)와 같은 컴퓨터 λΆ€ν’ˆλ“€μ΄ μ€‘μš”ν•œ 역할을 ν•˜λ©°, μ΄λŸ¬ν•œ λΆ€ν’ˆλ“€μ΄ μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€μ— λŒ€ν•΄ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.

πŸ™‹β€β™‚οΈ μ„œλ²„λ₯Ό μ‹€ν–‰μ‹œμΌœ APIλ₯Ό λ™μž‘μ‹œν‚€κΈ°κΉŒμ§€ μΌμ–΄λ‚˜λŠ” 일 - Spring

1️⃣ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ 및 μ„œλ²„ μ‹œμž‘.

1.1 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ°”μ΄λ„ˆλ¦¬ λ‘œλ”©.

  • λ””μŠ€ν¬(HDD/SDD)
    • λ¨Όμ €, Java μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜λ©΄ λ””μŠ€ν¬(HDDλ‚˜ SDD)에 μ €μž₯된 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œμ™€ 라이브러리(JAR 파일 λ“±)κ°€ λ””μŠ€ν¬μ—μ„œ RAM으둜 λ‘œλ“œλ©λ‹ˆλ‹€.
      • λ””μŠ€ν¬ μ»¨νŠΈλ‘€λŸ¬κ°€ λ””μŠ€ν¬μ˜ νŠΉμ • 섹터에 μ €μž₯된 ν”„λ‘œκ·Έλž¨ νŒŒμΌμ„ μ°Ύμ•„μ„œ μ½μ–΄μ˜΅λ‹ˆλ‹€.
      • λ©”λͺ¨λ¦¬ 컨트둀러λ₯Ό 톡해 데이터λ₯Ό RAM으둜 λ³΅μ‚¬ν•©λ‹ˆλ‹€.

1.2 JVM μ‹œμž‘.

  • Java μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ Java Virtual Machine(JVM) μ—μ„œ μ‹€ν–‰λ˜λ―€λ‘œ, JVM λ°”μ΄λ„ˆλ¦¬λ„ λ””μŠ€ν¬μ—μ„œ RAM으둜 λ‘œλ“œλ˜κ³ , JVM이 μ‹œμž‘λ©λ‹ˆλ‹€.
    • JVM은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ°”μ΄νŠΈμ½”λ“œ(.class 파일) λ₯Ό 읽어듀여 μ‹€ν–‰ν•  μ€€λΉ„λ₯Ό ν•©λ‹ˆλ‹€.

1.3 CPU와 λ©”λͺ¨λ¦¬μ˜ μ—­ν• .

  • CPUλŠ” 이제 λ©”λͺ¨λ¦¬μ— 적재된 JVMκ³Ό μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œλ₯Ό μ²˜λ¦¬ν•˜κΈ° μ‹œμž‘ν•©λ‹ˆλ‹€.
    • JVM이 λ°”μ΄νŠΈμ½”λ“œλ₯Ό κΈ°κ³„μ–΄λ‘œ λ³€ν™˜(JIT 컴파일링) ν•˜μ—¬ CPUκ°€ 이해할 수 μžˆλŠ” λͺ…λ ΉμœΌλ‘œ μ „ν™˜λ©λ‹ˆλ‹€.
    • ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œκ°€ μƒμ„±λ˜κ³ , CPUλŠ” μŠ€λ ˆλ“œλ₯Ό 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œλ₯Ό 순차적으둜 μ‹€ν–‰ν•©λ‹ˆλ‹€.
    • μ΄λ•Œ, CPU의 λ ˆμ§€μŠ€ν„°μ™€ μΊμ‹œ λ©”λͺ¨λ¦¬κ°€ 자주 μ‚¬μš©λ˜λŠ” 데이터λ₯Ό λ³΄κ΄€ν•˜κ³ , RAMμ—μ„œ 직접 κ°€μ Έμ˜€λŠ” λ°μ΄ν„°λŠ” λ²„μŠ€λ₯Ό 톡해 μ „λ‹¬λ©λ‹ˆλ‹€.

2️⃣ μž„λ² λ””λ“œ μ›Ή μ„œλ²„ μ‹€ν–‰ (예: Tomcat)

2.1 λ„€νŠΈμ›Œν¬ μ΄ˆκΈ°ν™”.

  • μ„œλ²„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‹œμž‘λ˜λ©΄, λ„€νŠΈμ›Œν¬ μΈν„°νŽ˜μ΄μŠ€ μΉ΄λ“œ(NIC) κ°€ λ„€νŠΈμ›Œν¬ 연결을 μ„€μ •ν•˜κ³  μ§€μ •λœ 포트(예: 8080)λ₯Ό 톡해 μ™ΈλΆ€μ—μ„œ λ“€μ–΄μ˜€λŠ” HTTP μš”μ²­μ„ 받을 수 μžˆλ„λ‘ μ€€λΉ„ν•©λ‹ˆλ‹€.
    • μ„œλ²„λŠ” IP μ£Όμ†Œμ™€ 포트 번호λ₯Ό λ°”μΈλ”©ν•˜κ³ , λ„€νŠΈμ›Œν¬ 톡신을 μœ„ν•΄ μ†ŒμΌ“(Socket) 을 μ—½λ‹ˆλ‹€.
      • μ΄λŠ” λ„€νŠΈμ›Œν¬ μΈν„°νŽ˜μ΄μŠ€ μΉ΄λ“œμ™€ κ΄€λ ¨λœ ν•˜λ“œμ›¨μ–΄ λ ˆλ²¨μ—μ„œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

2.2 λ©€ν‹°μŠ€λ ˆλ“œ 처리.

  • μ„œλ²„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ λ©€ν‹°μŠ€λ ˆλ”©μ„ 톡해 λ™μ‹œ μš”μ²­μ„ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.
    • CPU의 코어와 μŠ€λ ˆλ“œκ°€ μƒμ„±λ˜μ–΄ μ—¬λŸ¬ μ‚¬μš©μžμ˜ μš”μ²­μ„ λ™μ‹œμ— μ²˜λ¦¬ν•©λ‹ˆλ‹€.
      • λ©€ν‹°μ½”μ–΄ CPUλŠ” μ—¬λŸ¬ μš”μ²­μ„ λ³‘λ ¬λ‘œ μ²˜λ¦¬ν•˜μ—¬ μ„±λŠ₯을 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.
    • CPUλŠ” μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ„ 톡해 μŠ€λ ˆλ“œκ°„μ˜ μž‘μ—… μ „ν™˜μ„ κ΄€λ¦¬ν•˜λ©°, 각 μš”μ²­μ— λŒ€ν•΄ λ©”λͺ¨λ¦¬μ™€ CPU μ‹œκ°„μ„ ν• λ‹Ήν•©λ‹ˆλ‹€.

3️⃣ ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­ 처리.

3.1 λ„€νŠΈμ›Œν¬ μΈν„°νŽ˜μ΄μŠ€ μΉ΄λ“œ(NIC)

  • ν΄λΌμ΄μ–ΈνŠΈκ°€ API ν˜ΈμΆœμ„ 톡해 μ„œλ²„μ— HTTP μš”μ²­μ„ 보내면, 이 λ°μ΄ν„°λŠ” TCP/IP νŒ¨ν‚·μœΌλ‘œ μ „μ†‘λ©λ‹ˆλ‹€.
    • λ„€νŠΈμ›Œν¬ μΈν„°νŽ˜μ΄μŠ€ μΉ΄λ“œ(NIC) λŠ” λ„€νŠΈμ›Œν¬λ₯Ό 톡해 λ“€μ–΄μ˜€λŠ” μš”μ²­μ„ μˆ˜μ‹ ν•˜κ³  이λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.
    • λ„€νŠΈμ›Œν¬ μΉ΄λ“œκ°€ μˆ˜μ‹ ν•œ 데이터 νŒ¨ν‚·μ„ λ„€νŠΈμ›Œν¬ μŠ€νƒμ„ 톡해 μ²˜λ¦¬ν•œ ν›„, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ ˆμ΄μ–΄μ—μ„œ 이해할 수 μžˆλŠ” HTTP μš”μ²­μœΌλ‘œ λ³€ν™˜λ©λ‹ˆλ‹€.

3.2 데이터 νŒ¨ν‚· 처리

  • μˆ˜μ‹ λœ 데이터 νŒ¨ν‚·μ€ CPUκ°€ μ²˜λ¦¬ν•˜κ²Œ λ©λ‹ˆλ‹€.
    • μ—¬κΈ°μ„œ CPUλŠ” λ„€νŠΈμ›Œν¬ μΉ΄λ“œμ—μ„œ 받은 νŒ¨ν‚·μ„ λ©”λͺ¨λ¦¬(RAM) 에 μ μž¬ν•˜μ—¬ DispatcherServlet으둜 μ „λ‹¬ν•©λ‹ˆλ‹€.
      • CPUλŠ” μš”μ²­ μ²˜λ¦¬μ— ν•„μš”ν•œ 데이터λ₯Ό μΊμ‹œ λ©”λͺ¨λ¦¬λ‚˜ RAMμ—μ„œ λΆˆλŸ¬μ™€ μž‘μ—…μ„ μ‹œμž‘ν•©λ‹ˆλ‹€.

4️⃣ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 처리 및 λ°μ΄ν„°λ² μ΄μŠ€ 연동.

4.1 CPU와 RAM κ°„ 데이터 이동

  • μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄ CPUλŠ” λ©”λͺ¨λ¦¬(RAM)μ—μ„œ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 κ³Ό API μ—”λ“œν¬μΈνŠΈμ— ν•„μš”ν•œ 정보λ₯Ό 가져와 μ²˜λ¦¬ν•©λ‹ˆλ‹€.
    • λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 싀행에 ν•„μš”ν•œ λ°μ΄ν„°λŠ” RAM에 μ €μž₯되며, λ°μ΄ν„°λ² μ΄μŠ€μ™€μ˜ μƒν˜Έμž‘μš©μ΄ ν•„μš”ν•œ 경우 λ””μŠ€ν¬μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€κ°€ λ™μž‘ν•©λ‹ˆλ‹€.

πŸ™‹β€β™‚οΈ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 vs λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™

4.2 λ°μ΄ν„°λ² μ΄μŠ€ μ ‘κ·Ό

  • λ°μ΄ν„°λ² μ΄μŠ€λŠ” 일반적으둜 λ””μŠ€ν¬(HDD/SDD) 에 데이터λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
    • APIκ°€ λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Όν•˜μ—¬ 데이터λ₯Ό μ½κ±°λ‚˜ μ“°κΈ° μœ„ν•œ μž‘μ—…μ΄ ν•„μš”ν•  λ•Œ, λ°μ΄ν„°λŠ” λ””μŠ€ν¬μ—μ„œ 읽어와 RAM으둜 λ‘œλ“œλ©λ‹ˆλ‹€.
      • λ””μŠ€ν¬ μ»¨νŠΈλ‘€λŸ¬λŠ” 데이터λ₯Ό λ””μŠ€ν¬μ—μ„œ μ°Ύμ•„ RAM으둜 μ „μ†‘ν•˜κ³ , CPUλŠ” 이 데이터λ₯Ό μ²˜λ¦¬ν•œ ν›„ μ μ ˆν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

5️⃣ API 응닡 및 λ„€νŠΈμ›Œν¬ 전솑.

5.1 CPU와 λ„€νŠΈμ›Œν¬ μΉ΄λ“œ κ°„μ˜ 데이터 처리.

  • λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 μ™„λ£Œλ˜λ©΄, CPUλŠ” κ²°κ³Ό 데이터λ₯Ό λ©”λͺ¨λ¦¬(RAM)에 μ €μž₯ν•˜κ³ , 이 데이터λ₯Ό λ‹€μ‹œ TCP/IP νŒ¨ν‚·μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.
    • CPUλŠ” νŒ¨ν‚·μ„ μƒμ„±ν•œ ν›„, νŒ¨ν‚·μ€ λ‹€μ‹œ λ„€νŠΈμ›Œν¬ μΈν„°νŽ˜μ΄μŠ€ μΉ΄λ“œ(NIC) 둜 μ „λ‹¬λ˜μ–΄ λ„€νŠΈμ›Œν¬λ₯Ό 톡해 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „μ†‘λ©λ‹ˆλ‹€.
    • NICλŠ” νŒ¨ν‚·μ„ μΈν„°λ„·μœΌλ‘œ λ³΄λ‚΄λŠ” μž‘μ—…μ„ μ²˜λ¦¬ν•˜λ©°, ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•œ 데이터λ₯Ό λ‹€μ‹œ μ „λ‹¬ν•©λ‹ˆλ‹€.

5.2 ν΄λΌμ΄μ–ΈνŠΈ 응닡 전솑.

  • ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ—μ„œ μ „μ†‘λœ HTTP 응닡을 λ°›κ²Œ 되고, μ„œλ²„λŠ” ν•΄λ‹Ή μš”μ²­ μ²˜λ¦¬μ— λŒ€ν•œ μƒνƒœ μ½”λ“œμ™€ 데이터λ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.
    • 이 κ³Όμ •μ—μ„œ λ„€νŠΈμ›Œν¬ μΉ΄λ“œμ™€ λ©”λͺ¨λ¦¬, CPUκ°€ μ§€μ†μ μœΌλ‘œ 데이터λ₯Ό μ£Όκ³ λ°›μŠ΅λ‹ˆλ‹€.

6️⃣ ν•˜λ“œμ›¨μ–΄ κ΄€λ ¨ 핡심 μ—­ν•  μš”μ•½.

1. CPU

  • ν”„λ‘œκ·Έλž¨μ˜ λͺ…령을 μ²˜λ¦¬ν•˜κ³  계산을 μˆ˜ν–‰ν•˜λŠ” κ°€μž₯ μ€‘μš”ν•œ μž₯μΉ˜μž…λ‹ˆλ‹€.
  • μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” μŠ€λ ˆλ“œ 생성, 데이터 처리, λ©”λͺ¨λ¦¬ 관리 등을 λ‹΄λ‹Ήν•©λ‹ˆλ‹€.

2. RAM

  • 데이터λ₯Ό μΌμ‹œμ μœΌλ‘œ μ €μž₯ν•˜κ³ , CPUκ°€ λΉ λ₯΄κ²Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.
  • μš”μ²­ 처리 쀑 ν•„μš”ν•œ λ°μ΄ν„°λŠ” RAM에 μ €μž₯되며, CPUκ°€ 이 데이터λ₯Ό λΆˆλŸ¬μ™€ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

3. λ””μŠ€ν¬(HDD/SSD)

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œμ™€ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ €μž₯ν•˜λŠ” 영ꡬ적인 μ €μž₯μ†Œμž…λ‹ˆλ‹€.
  • ν•„μš”ν•œ λ°μ΄ν„°λŠ” λ””μŠ€ν¬μ—μ„œ RAM으둜 λΆˆλŸ¬μ™€ μ‚¬μš©λ©λ‹ˆλ‹€.

4. λ„€νŠΈμ›Œν¬ μΈν„°νŽ˜μ΄μŠ€ μΉ΄λ“œ(NIC)

  • ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ 받아듀이고, μ„œλ²„μ˜ 응닡을 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ³΄λ‚΄λŠ” 역할을 λ‹΄λ‹Ήν•©λ‹ˆλ‹€.
  • λ„€νŠΈμ›Œν¬ νŒ¨ν‚·μ„ μ£Όκ³ λ°›μœΌλ©° 인터넷 μƒμ—μ„œ 데이터가 흐λ₯΄κ²Œ ν•©λ‹ˆλ‹€.

7️⃣ 전체 κ³Όμ • μš”μ•½.

1. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹œμž‘.

  • λ””μŠ€ν¬μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ‘œλ“œλ˜κ³ , JVM이 λ©”λͺ¨λ¦¬μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€.

2. λ„€νŠΈμ›Œν¬ μ„€μ •.

  • μ„œλ²„λŠ” ν¬νŠΈμ™€ IP μ£Όμ†Œλ₯Ό λ°”μΈλ”©ν•˜κ³  μ™ΈλΆ€ μš”μ²­μ„ λŒ€κΈ°ν•©λ‹ˆλ‹€.

3. ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­.

  • ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ΄ λ„€νŠΈμ›Œν¬λ₯Ό 톡해 μ„œλ²„λ‘œ μ „λ‹¬λ˜κ³ , λ„€νŠΈμ›Œν¬ μΉ΄λ“œμ™€ CPUκ°€ 이λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.

4. λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 μ‹€ν–‰.

  • CPUλŠ” μš”μ²­μ— λ§žλŠ” λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ‹€ν–‰ν•˜κ³ , λ°μ΄ν„°λ² μ΄μŠ€λ‚˜ μΊμ‹œμ—μ„œ 데이터λ₯Ό λΆˆλŸ¬μ™€ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

5. 응닡 생성.

  • 처리된 λ°μ΄ν„°λŠ” λ‹€μ‹œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ μ „μ†‘λ˜λ©°, λ„€νŠΈμ›Œν¬ μΉ΄λ“œμ™€ CPUκ°€ 이 과정을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

ν•˜λ“œμ›¨μ–΄μ  μΈ‘λ©΄μ—μ„œλŠ” λ””μŠ€ν¬, RAM, CPU, λ„€νŠΈμ›Œν¬ μΈν„°νŽ˜μ΄μŠ€ μΉ΄λ“œκ°€ μƒν˜Έμž‘μš©ν•˜λ©°, 각 μž₯μΉ˜λŠ” μžμ‹ μ˜ 역할을 μˆ˜ν–‰ν•˜μ—¬ APIκ°€ μ›ν™œνžˆ λ™μž‘ν•  수 μžˆλ„λ‘ μ§€μ›ν•©λ‹ˆλ‹€.