Week 10
: DBMS, Servlet, Session, Cache
βοΈ 7μμ 첫 μ§Έ μ£Ό λ©ν λ§!
μ΄λ² μ£Ό κΈ°λ‘μ νμμ μΉμ¬ μκ°μ 보λ΄λ€ 보λ λ©ν λ§ λΉμΌμ μμ±νμ§ λͺ»νλ€. (μ¬μ€ κ²μΌλ₯Έκ±°λ€.)
κ·Έλ¦¬κ³ JSP μ± μ λ€ μ½μ΄λ³΄λ €κ³ νμ§λ§ μκ°λ³΄λ€ μ΄ν΄λμ§ μλ λΆλΆλ λ§μμ λ€ μ½μ§ λͺ»νλ€. (μ λ§ κ²μΌλ₯Έκ±°λ€.)
κ·Έλμ λ°μ±μ μκ°μ μ‘°κΈ κ°μ§κ³ λ©ν λ§ν λ΄μ©μ λ¦κ²λλ§ κΈ°λ‘ν΄λ³΄λ €κ³ νλ€. μ΄λ² μκ°μλ μΉ νλ‘κ·Έλλ°μ κΈ°μ΄κ° λλ Servlet, DBMS, Session, Cache λ±μ λν΄μ λ€μ μ 리ν΄λ³΄μ!
1. JSP Output Buffer
JSP λ κΈ°λ³Έμ μΌλ‘ μμ²μ λν κ²°κ³Όλ₯Ό ν΄λΌμ΄μΈνΈμκ² λ°λ‘ μλ΅νμ§ μκ³ λ²νΌλΌλ λ©λͺ¨λ¦¬μ κ²°κ³Όλ₯Ό μμλμλ€κ° ν λ²μ μλ΅νλ λ°©μμΌλ‘ λμνλ€. (μ΄μ java.io κ΄λ ¨ Stream κ³Ό Buffer μ λν΄μ 곡λΆνλ κ°λ κ³Ό μ μ¬νλ€.)
Buffer λ₯Ό μ΄μ©νλ―λ‘μ¨ μ»μ μ μλ μ₯μ μ IO μ²λ¦¬μμμ Buffer μ λΉμ·νλ€κ³ λ³Ό μ μλλ°, λ€μ λ΄μ©μ μ΄ν΄λ³΄μ.
π μ±λ₯ ν₯μ
μμ²μ΄ λ€μ΄μ¬ λ λ§λ€ μλ΅νλ λ°©μλ³΄λ€ μλ΅μ λͺ¨μμ νλ²μ μ²λ¦¬νλ κ²μ΄ μ¬λ¬ λ°©λ©΄μμ μ 리ν κ²μΌλ‘ 곡λΆνλ€. κ·Έ μ΄μ λ μμ²μ λν κ²°κ³Όλ₯Ό μλ΅ ν λ λ§λ€ λ°μ΄ν°λ₯Ό λ΄λ³΄λ΄λ μμ μμ²΄κ° λ§μ μμμ μλͺ¨νκ² λλλ°, μ΄λ₯Ό κ°κ°μ μμ²μ΄ λ€μ΄μ¬ λ λ§λ€ μ²λ¦¬νλ λ°©λ²μ λ°λ³΅μ μΌλ‘ μλͺ¨λλ μμμ μ μ½ ν μ μκΈ° λλ¬Έμ΄λ€.
π μ μ°ν λ°μ΄ν° μμ
Buffer λ₯Ό μ¬μ©νμ§ μκ³ μμ²λ§λ€ μλ΅νκ² λλ€λ©΄ ν΄λΉ μλ΅μ λν κ²°κ³Όκ°μ λ€μ μλ² μΈ‘μμ μμ ν μ μλ€. κ·Έ μ΄μ λ μλ² μΈ‘μμ μλ΅μ νλ μκ° μλ΅μ κ²°κ³Όκ°μ λν μ μ΄κΆμ μμ€νκΈ° λλ¬Έμ΄λ€.
JSP μ μλ΅ κ²°κ³Όλ HTTP ν΅μ κ·Έ μ체μ΄κΈ° λλ¬Έμ Buffer λ₯Ό μ¬μ©νμ§ μλλ€λ©΄ HTTP Header νΉμ Body μ μλ μ 보 μ€ μμ νκ³ μ νλ μ 보λ μμ νμ§ λͺ»νκ³ κ·Έλλ‘ ν΅μ μ΄ μ΄λ£¨μ΄μ§λ€. λλ¬Έμ ν΄λΌμ΄μΈνΈμμ μλͺ»λ HTTP ν¨ν· μ 보 λλ¬Έμ μμΈ μν©μ΄ λ°μ ν μ μλ€.
λ§μ½ Buffer λ₯Ό μ¬μ©νκ² λλ€λ©΄ Buffer λ‘ μ§μ λ λ©λͺ¨λ¦¬λ§νΌ μλ΅ κ²°κ³Όλ₯Ό μμ λμ μ μκ³ , 맀 μμ²λ§λ€ λ°λ‘ μλ΅νμ§ μκΈ° λλ¬Έμ Buffer μ μν μλ΅ κ²°κ³Όκ°μ μμ νκ±°λ λ³κ²½ ν μ μλ€. μ΄λ₯Ό ν΅ν΄μ ν΄λΌμ΄μΈνΈμκ² μλ΅ν λ°μ΄ν°μ μλͺ»λ μ 보λ μλ¬ λ±μ μ¬μ μ μλ² μΈ‘μμ μ‘μ μ μλ€.
2. Cookie, Session
μΏ ν€μ μΈμ μ λͺ¨λ μλ² μΈ‘μμ ν΄λΌμ΄μΈνΈμ μνλ₯Ό νμΈνκ³ , μ΄λ₯Ό ν΅ν΄ μ°μμ μΈ μμ μ μννκΈ° μν μ©λλ‘ μ¬μ©λλ€.
μ΄λ₯Ό μ΄ν΄νκΈ° μν΄μλ HTTP νλ‘ν μ½μ νΉμ±μ λ¨Όμ νμ νκ³ μμ΄μΌ νλλ°, HTTP νλ‘ν μ½μ Stateless, Connectionless νΉμ±μ κ°μ§λ€. μ¦, HTTP ν΅μ μ νλ μλ²μ ν΄λΌμ΄μΈνΈλ μλ‘μ μνλ₯Ό μ μ μκ³ , μμ²μ μν΄ μλ²μ ν΄λΌμ΄μΈνΈκ° μ°κ²°λκ³ (3-Way Handshake) μλ² μΈ‘μμ μλ΅μ νκ² λλ©΄ HTTP ν΅μ μ λμ μ°κ²°μ λμ΄λ²λ¦°λ€.(4-Way Handshake)
μ μ λ°μ΄ν°λ§μ μλ΅νλ κ³Όκ±°μ μΉ μλΉμ€λ€μ΄ ν΄λΌμ΄μΈνΈμ μν, κΆνμ λ°λΌ λμ μΌλ‘ λ°μ΄ν°λ₯Ό μλ΅ν΄μ€μΌ νλ μꡬμ¬νμ΄ λμ΄λλ©΄μ μ΄λ¬ν HTTP νΉμ±μ ν΄κ²°νκ³ μ μΏ ν€μ μΈμ μ΄ λ§λ€μ΄μ§κ³ , μ΄λ₯Ό μ΄μ©ν΄μ μλ²λ ν΄λΌμ΄μΈνΈμ μνλ₯Ό νμΈνκ³ μ΄μ λ§λ λμ λ°μ΄ν°λ₯Ό μλ΅ ν μ μκ² λμλ€.
μ¬κΈ°μ μΏ ν€λ HTTP ν¨ν·μ Key : Value ν μμΌλ‘ ꡬμ±λ νλ μΈ ν μ€νΈ λ°μ΄ν°μ μΌμ’ μ΄λ€. ν΄λΌμ΄μΈνΈμ μΉ λΈλΌμ°μ μ μΉ μ€ν 리μ§μ μ μ₯νλ©°, μλ²μμλ ν΄λΉ μΏ ν€λ₯Ό ν΅ν΄ ν΄λΌμ΄μΈνΈμ μνλ₯Ό νμΈ ν μ μλ€. λ€λ§ μΏ ν€λ 1) ν΄λΌμ΄μΈνΈ μΈ‘μμ μ μ₯λλ€λ μ κ³Ό 2) νλ μΈ ν μ€νΈλ‘ μ μ₯λλ€λ μ μμ 보μμ μ·¨μ½νλ€.
μ΄λ° μΏ ν€μ λ¬Έμ μ μ 극볡νκΈ° μν΄ μΈμ μ΄ λ±μ₯νκ² λλλ°, μΈμ μ ν΄λΌμ΄μΈνΈ μ 보λ₯Ό μλ² μΈ‘ μΈμ μ€ν 리μ§μ μ μ₯νλ―λ‘μ¨ μΏ ν€κ° κ°μ§κ³ μλ 보μμ λ¬Έμ λ₯Ό ν΄κ²° ν μ μκ² λμλ€. νμ§λ§ ν΄λΌμ΄μΈνΈμ μμ²μ΄ λμ΄λλ©΄μ μλ²μμ 보κ΄ν΄μΌ νλ μΈμ μ μλ μμ°μ€λ½κ² λμ΄λ¬λλ°, μ΄λ μλ²μ κ³ΌλΆν λ¬Έμ λ‘ μ΄μ΄μ§ μ μλ€.
3. Session Clustering
λ¨Όμ ν΄λ¬μ€ν°μ ν΄λ¬μ€ν°λ§μ΄λΌλ κ°λ μ μ΄ν΄νκ³ μμ΄μΌ νλ€.
βοΈ Cluster : κ°λ³μ μΌλ‘ μλνλ μ»΄ν¨ν°λ₯Ό μ°κ²°νμ¬ νλμ μμ€ν μ²λΌ μλνκ²λ ν μ§ν©.
βοΈ Clustering : ClusterλΌλ μ§ν©μ΄ νλμ μμ€ν μ²λΌ μλ ν μ μκ²λ νλ νμ κ·Έ μ체.
μ΄μ μΈμ μ λν΄μ λ€μ ν λ² μ΄ν΄λ³΄μ. μΈμ μ ν΄λΌμ΄μΈνΈμ μ 보 λ±μ μλ² μΈ‘μμ 보κ΄νκ³ μλ€.
μ΄ λ, λμ©λ νΈλν½μ λμνκΈ° μν΄μ μλ²μ κ·λͺ¨λ₯Ό μ€μΌμΌ μμ λ°©μμ μ±ννκ² λλ©΄μ μΈμ μ μ ν©μ± λ¬Έμ κ° λ°μ ν μ μλ€.
κ·Έ μ΄μ λ A ν΄λΌμ΄μΈνΈμ μμ²μ΄ 무쑰건 a μλ²λ‘λ§ κ°λ€λ 보μ₯μ΄ μκΈ° λλ¬Έμ, A ν΄λΌμ΄μΈνΈμ μμ²μ΄ b μλ²λ‘ κ°λ€λ©΄ b μλ²μμλ A ν΄λΌμ΄μΈνΈμ λν μ 보λ₯Ό μμ§ λͺ»νκΈ° λλ¬Έμ ν΄λΉ ν΄λΌμ΄μΈνΈμ μΈμ μ λ λ§λ€μ΄μΌ νλ€.
μ΄λ¬ν λ¬Έμ μ μ ν΄κ²°νκΈ° μν΄μ Session Cluster λΌλ λ°©λ²μ μ΄μ©ν΄μ μλ²μ μΈμ μ νλλ‘ λμ³ A ν΄λΌμ΄μΈνΈμ μμ²μ΄ μ΄λ€ μλ²λ‘ κ°λλΌλ μλ‘ ν΄λΌμ΄μΈνΈμ μΈμ μ 보λ₯Ό 곡μ νκ³ μκΈ° λλ¬Έμ λΆνμν μμ μ μ¬λ¬ λ² μν ν νμκ° μμ΄μ§κ² λμλ€.
Session Cluster λ μ¬λ¬κ°μ§ λ°©λ²μΌλ‘ ꡬν λ μ μλλ°, ν΄λΉ λ°©λ²λ€μ μμ보μ.
π Sticky Session
μλ²μ μΈμ μ΄ λ³΄κ΄λ ν΄λΌμ΄μΈνΈλ ν΄λΉ μλ²λ‘λ§ μμ²μ λ³΄λΌ μ μλλ‘ ν Session Clustering λ°©λ²μ΄λ€.
μ΄ μ μ L4 / L7 Switch μ λν΄μ κ³΅λΆ νλλ°, μ΄ λ L7 Switchλ HTTP νλ‘ν μ½μ ν¨ν·μ νμΈνκ³ μ΄λ₯Ό νΉμ κΈ°μ€μ λΆν©νλ€λ©΄ κΈ°μ€μ λ§λ μλ²λ‘ λ‘λ λ°Έλ°μ± ν΄μ€λ€λ κ²μ 곡λΆνλ€. μ΄λ₯Ό ν΅ν΄ μΆλ‘ ν μ μλ κ²μ μλ²λ ν΄λΌμ΄μΈνΈμ μΈμ μ λ§λ€κ³ λλ©΄ ν΄λΉ μΈμ IDλ₯Ό μΏ ν€λ‘ λ§λ€μ΄ ν΄λΌμ΄μΈνΈμκ² μλ΅νκ³ , ν΄λΌμ΄μΈνΈλ μ΄ λ λ°μ μΈμ ID μΏ ν€λ₯Ό 맀μμ²λ§λ€ 보λ΄λλ°, μΏ ν€λ HTTP Body μ λ΄κ²¨μ Έ μλ€λ κ²μ μκ°ν΄λ³Έλ€λ©΄ Sticky Session λ°©μμ΄ L7 Switchλ₯Ό ν΅ν΄μ λ‘λ λ°Έλ°μ±λμ΄ μμ μ μΈμ μ΄ μν μλ²μκ²λ§ μμ²μ΄ κ°λ€λ κ²μ μ μ μλ€.
νμ§λ§ μ΄λ¬ν Sticky Session λ°©μμ μ¬λ¬ λμ μλ²κ° μμ λ λ§μ ν΄λΌμ΄μΈνΈ μμ²μ΄ νλμ μλ²μμ μΈμ μ΄ λ§λ€μ΄μ Έ ν΄λΉ μλ²μκ²λ§ λ‘λ λ°Έλ°μ± λλ€λ©΄ ν΄λΉ μλ²μ κ³ΌλΆνλ λ¬Όλ‘ μ΄κ³ λλ¨Έμ§ μλ²λ€μ μμμ΄ μ¬μ©λμ§ μκ² λλ€λ λ¨μ μ΄ μλ€.
π All-to-All Session
WAS μμ μ§μν΄μ£Όλ λ°©λ² μ€ νλμΈ All-to-All Session λ°©μμ κ° μλ²μμ λ§λ€μ΄μ§ λͺ¨λ μΈμ μ λλ¨Έμ§ μλ²μκ² λͺ¨λ 곡μ νλ€.
λͺ¨λ μλ²μμ μΈμ μ 곡μ νκΈ° λλ¬Έμ Sticky Session λ°©μκ³Ό λ¬λ¦¬ ν΄λΌμ΄μΈνΈμ μμ²μ΄ μ΄λ€ μλ²λ‘ κ°λμ§ κ° μλ²λ ν΄λΌμ΄μΈνΈμ μνλ₯Ό νμ ν μ μλ€.
νμ§λ§ ν΄λΉ μΈμ ν΄λ¬μ€ν°λ§μ μλ²λ₯Ό μΆκ°νλ©΄ μΆκ° ν μλ‘ μΈμ μ 곡μ ν΄μΌ νλ μλ²κ° λμ΄λ μ΄μ λν μμ λλΉκ° O(N) λ§νΌ λμ΄λλ€λ λ¨μ μ΄ μλ€.
π Session Storage Server
λΉμ¦λμ€ λ‘μ§μ μννλ μλ²μμ μΈμ μ μ§μ 보κ΄νμ§ μκ³ λ³λμ μΈμ μ€ν λ¦¬μ§ μλ²λ₯Ό ꡬμΆνκ³ , κ° μλ²λ€μ μΈμ μ νμΈ ν λ μΈμ μ€ν λ¦¬μ§ μλ²λ₯Ό ν΅ν΄μ νμΈνμ¬ λͺ¨λ μλ²μμ μΈμ μνλ₯Ό 곡μ ν μ μλ λ°©λ²μ λ§νλ€.
μΈμ μ 보κ΄νλ λ³λμ μλ²λ₯Ό ꡬμΆνλ―λ‘μ¨ μλ²μμ μΈμ μ λν λΆλ΄μ μ€μΌ μ μκ³ , 무μλ³΄λ€ κ°κ°μ μλ²κ° μΈμ μ μΈμ μ€ν λ¦¬μ§ μλ²λ₯Ό ν΅ν΄μ 곡μ νκΈ° λλ¬Έμ μ ν©μ± λ¬Έμ λ₯Ό ν΄κ²° ν μ μκ² λμλ€. νμ§λ§ μΈμ μ€ν λ¦¬μ§ μλ²κ° λͺ¨μ’ μ μ΄μ λ‘ λ€μ΄λλ©΄ μ°κ²°λ λͺ¨λ μλΉμ€ μμ€ν λ μ¬μ© ν μ μλ μνκ° λλ€. λλ¬Έμ μ΄λ₯Ό ν΄κ²°νκΈ° μν΄μ μ΅μ λ κ°μ μΈμ μ€ν λ¦¬μ§ μλ²λ₯Ό ꡬμΆνκ³ , A μΈμ μ€ν λ¦¬μ§ μλ²κ° λ€μ΄λλ©΄ ν΄λΉ κΆν λ±μ B μΈμ μ€ν λ¦¬μ§ μλ²κ° μΉκ²©λ°μ μλΉμ€λ₯Ό κ³μν΄μ μ μ§ ν μ μλλ‘ κ΅¬ννλ€.
μ΄λ¬ν μΈμ μ€ν λ¦¬μ§ μλ²λ μ£Όλ‘ InMemory(Redis, MemCache λ±)μ μΈμ μ μ μ₯νκ² λλλ°, λμ€ν¬μ μΈμ μ 보λ₯Ό μ μ₯νκ³ μ΄λ₯Ό μ½λ μμ λ³΄λ€ λ λΉ λ₯΄κ² μμ ν μ μκΈ° λλ¬Έμ΄λ€. (λμ€ν¬μ μΈμ μ 보λ₯Ό μ μ₯νλ€λ©΄ IO μμ μ μΆκ°μ μΌλ‘ μνν΄μΌ νκΈ° λλ¬Έμ μμ μλκ° λλ €μ§ μ λ°μ μλ€.)
4. JDBC
Java Database Connectivity.
Java μ ν리μΌμ΄μ μμ λ°μ΄ν°λ² μ΄μ€μ ν΅μ ν μ μλλ‘ κ·μ½μ μ ν΄ λμ Java APIμ΄λ€.
JDBCλ JDBC λλΌμ΄λ²κ° νμνλ°, κ° λ°μ΄ν°λ² μ΄μ€ μ νλ§λ€ μ¬μ©νλ 쿼리λ λ΄λΆ κ΅¬μ‘°κ° λ¬λΌ Java μ ν리μΌμ΄μ μμ μ°κ²°νκ³ μ νλ λ°μ΄ν°λ² μ΄μ€μ λλΌμ΄λ²λ₯Ό JDBCμμ μ½μ΄ μ΄λ€ λ°μ΄ν°λ² μ΄μ€ μ νμ μΈ κ²μΈμ§ λͺ μν΄μ£Όμ΄μΌ νλ€.
μ¦, JDBC λλΌμ΄λ²λ€μ Java μ ν리μΌμ΄μ μ μμ²μ μ¬μ©νκ³ μ νλ λ°μ΄ν°λ² μ΄μ€ μ νμ΄ μ΄ν΄ ν μ μλ νλ‘ν μ½λ‘ λ³ννλ ν΄λΌμ΄μΈνΈ μ¬μ΄λ μ΄λν° μν μ νλ€.
(μλ²μ λ°μ΄ν°λ² μ΄μ€μ κ΄κ³λ₯Ό μ΄ν΄λ³΄λ©΄ μλ²λ λ°μ΄ν°λ² μ΄μ€μκ² λ°μ΄ν°λ₯Ό μμ²νλ μ μ₯μ΄κ³ , λ°μ΄ν°λ² μ΄μ€λ μλ²μ μμ²μ μλ΅νλ μ μ₯μ΄κΈ° λλ¬Έμ μ΄ λλ μλ²λ ν΄λΌμ΄μΈνΈ μ μ₯μ΄ λλ€.)
μ΄ λ, Class.forName() λ©μλλ₯Ό μ΄μ©νλ―λ‘μ¨ μ»΄νμΌν JDBC λλΌμ΄λ²λ₯Ό JDBCμ λͺ μνλ€.
5. Connection Pool
λ¨Όμ Connection μ΄λ μλ²μ λ°μ΄ν°λ² μ΄μ€ μ¬μ΄λ₯Ό μ°κ²°ν κ°μ²΄λ₯Ό μλ―Ένλ€. Connection μ ν΅ν΄μ Statement λ₯Ό μ΄μ©ν΄ λ°μ΄ν°λ₯Ό μμ²νκ³ μλ΅ ν μ μλ€. κ³Όκ±°μλ μ΄λ¬ν Connection μ 맀 μμ²λ§λ€ μλ‘ μμ±νκ³ , μλ΅νλ©΄ μ¬λΌμ§λ κ΅¬μ‘°λ‘ μλ νλ€. νμ§λ§ Connection κ°μ²΄λ₯Ό μμ±νλ μμ μμ²΄κ° λ§μ μμμ μ¬μ©νλλ°, μ΄λ¬ν μμ μ λͺ¨λ μμ² λ λ§λ€ λ°λ³΅νλ©΄ μμμ΄ λλΉλκΈ° λλ¬Έμ μ΄λ¬ν λλΉλ₯Ό λ§κ³ μ Connection Pool μ΄ λ±μ₯νκ² λλ€.
Connection Pool μ WAS κ° μ€ννλ©΄μ μ€μ λ κ°μ λ§κ² Connection μ μμ±νκ³ , μ΄λ€μ Connection Pool μ΄λΌλ μμμ 보κ΄νκ² λλ€. μ΄μ ν΄λΌμ΄μΈνΈ μμ²μ΄ λ€μ΄μ€κ² λλ©΄ ν΄λΉ μμ²μ Connection νλλ₯Ό ν λΉνκ³ , ν΄λΉ μμ²μ ν΅μ μ΄ λ§λ¬΄λ¦¬ λλ©΄ ν λΉλ Connection μ λ€μ Connection Pool μ λ°νλλ€.
μ΄λ¬ν Connection Pool μ λ©λͺ¨λ¦¬ μν©μ λ§κ² Connection μμ± κ°―μλ₯Ό μ ννκ³ , 미리 Connection κ°μ²΄λ₯Ό λ§λ€κΈ° λλ¬Έμ μλ² - λ°μ΄ν°λ² μ΄μ€ κ°μ μ°κ²°μ μν μμμ μ μ½ ν μ μλ€.
6. Thread Pool
κ³Όκ±° CGI νλ‘κ·Έλλ° λ°©μμ νλμ μμ²μ΄ λ€μ΄μ€λ©΄ μλ‘μ΄ νλ‘μΈμλ₯Ό ν λΉνκΈ° λλ¬Έμ μ΄λ‘ μΈν μλ² λΆνλ μμ λλΉκ° μ¬νλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄μ Java μ§μμ Servlet μ΄ λ±μ₯νκ² λκ³ , μ΄λ¬ν Servlet μ JVM μμμ νλμ μ€λ λλ‘ λμνκΈ° λλ¬Έμ CGI νλ‘κ·Έλλ° λ°©μμμ λλΉλλ μμμ μ μ½ ν μ μκ² λμλ€.
Thread Pool λ Connection Pool κ³Ό λΉμ·νλ°, 미리 μ€μ λ κ°μ λ§κ² Thread λ₯Ό λ©λͺ¨λ¦¬μ λ§λ€μ΄λκ³ , ν΄λΌμ΄μΈνΈ μμ²μ΄ λ€μ΄μ€λ©΄ ν΄λΉ μμ²μ Thread νλλ₯Ό ν λΉν λ€, μμ²μ λν ν΅μ μ΄ λλλ©΄ (μ°κ²°μ΄ λμ΄μ§λ©΄) Thread λ₯Ό λ°ννλ€.
μ΄λ¬ν λ°©μμ μ΄μ©ν λ, μμ²μ΄ λ€μ΄μ¬ λ λ§λ€ Thread λ₯Ό μλ‘ λ§λ€μ§ μμλ λκΈ° λλ¬Έμ μμμ λλΉλ₯Ό λ§μ μ μλ€.
π₯ Prepared Statement μ±λ₯κ³Ό 보μ