π‘ κ°λ°μμ μ°μ μμλ νμ μμΈν μ μΈλκ²μ΄ μ°μ μμκ° λλ€.
β Spring MVCμμ 컨νΈλ‘€λ¬ μν μ νλ ν΄λμ€μμ λͺ μνλ€.
β λ·°(View)μ μ°κ²°λλ 컨νΈλ‘€λ¬λ‘ μ¬μ©λλ€.
β
@Component
κ° ν¬ν¨λμ΄ μμ΄ Spring BeanμΌλ‘ λ±λ‘λλ©°, μ±κΈν€μΌλ‘ κ΄λ¦¬λλ€.
β μ£Όλ‘ HTMLμ λ°ννλ κ²½μ° μ¬μ©λλ€.
π‘ μλμ μ΄λ Έν μ΄μ μ λν μμΈν μ€λͺ π [Spring] Annotation
@Target(ElementType.Type)
Class
, Interface
, Annotation
, Enum
, Record Declaration(Java16)
μ μ μ©ν μ μλ€.@Retention(RetentionPolicy.RUNTIME)
@Document
@Component
Spring Beanμ λ±λ‘νλ€.
μ±κΈν€μΌλ‘ κ΄λ¦¬λλ€.
π Q. μ±κΈν€μ΄ 무μμΈκ°μ?
π¬ A. μ±κΈν€μ κ°μ²΄λ₯Ό νλλ§ μμ±νμ¬ μμ±λ μΈμ€ν΄μ€λ₯Ό 곡μ νμ¬ μ¬μ©νλ κ²μ μλ―Έgνλ€. νΉμ ν΄λμ€μ μΈμ€ν΄μ€κ° μ¬λ¬κ° μμ±λμ§ μλλ‘ νμ¬ μμμ λλΉλ₯Ό λ°©μ§νκ³ , μΈμ€ν΄μ€λ₯Ό 곡μ ν¨μΌλ‘μ¨ μνλ₯Ό μΌκ΄λκ² μ μ§νκΈ° μν¨μ΄λ€. νμ§λ§, 곡μ λ³μ μ¬μ©μ μ£Όμν΄μΌ νλ€.
β
@Controller
μ @ResponseBody
κ° κ²°ν©λ μ΄λ
Έν
μ΄μ
β
@RestController
λ @Controller
μ λ¬λ¦¬ κ° λ©μλλ§λ€ @ResponseBody
λ₯Ό μΆκ°νμ§ μμλ λλ€.
@Target(ElementType.Type)
Class
, Interface
, Annotation
, Enum
, Record Declaration(Java16)
μ μ μ©ν μ μλ€.@Retention(RetentionPolicy.RUNTIME)
@Document
@Controller
@ResponseBody
β 컨νΈλ‘€λ¬μ λ°ν κ°μ λ·°κ° μλλΌ, HTTP μλ΅ λ°λμ μ§μ μ½μ νλ€.
β
@Controller
μμ νΉμ λ©μλλ§ REST API μλ΅μ νκ² νκ³ μΆλ€λ©΄, ν΄λΉ λ©μλμ @ResponseBody
λ₯Ό μΆκ°νλ©΄ λλ€.
@Target{ElementType.TYPE, ElementType.METHOD}
β
@Controller
μ λμΌν Targetμ΄ μ μΈλμ΄ μλλ° μ μ€λ³΅μΌλ‘ μ μΈμ΄ λμ΄μλμ?
π‘@ResponseBody
λ@Target{ElementType.TYPE, ElementType.METHOD}
μ΄μ§λ§,@RestController
μ@Target(ElementType.TYPE)
μ΄κΈ° λλ¬Έμ λ μμΈνκ² μ μΈλ@RestController
μ@Target(ElementType.TYPE)
μ΄ μ μ©λλ€. λ°λΌμ TYPE λ²μμλ§@ResponseBody
κ° μ μ©λλ€.
μ¦, @Restcontrollerλ TYPEμΈ Class Levelμλ§ μ μ©ν μ μλ€!
βοΈ μ΄ λ, "λ μμΈν μ μΈλ κ²μ΄ μ°μ μμκ° λλ€"μμ,
@Target{ElementType.TYPE, ElementType.METHOD}
κ°@Target(ElementType.TYPE)
λ³΄λ€ λ ν¬κ΄μ μΈ λ²μλ₯Ό κ°μ§λ κ²μ²λΌ 보μΈλ€. νμ§λ§ μ¬κΈ°μ "λ μμΈν μ μΈλ κ²μ΄ μ°μ μμκ° λλ€" λ μλ―Έλ μ μ© λ²μκ° λ μ’μ κ²(λ ꡬ체μ μΈ μ ν)μ΄ μ°μ μ μ©λλ€λ κ²μ΄λ€.