π‘ κ°λ°μμ μ°μ μμλ νμ μμΈν μ μΈλκ²μ΄ μ°μ μμκ° λλ€.

β 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)λ³΄λ€ λ ν¬κ΄μ μΈ λ²μλ₯Ό κ°μ§λ κ²μ²λΌ 보μΈλ€. νμ§λ§ μ¬κΈ°μ "λ μμΈν μ μΈλ κ²μ΄ μ°μ μμκ° λλ€" λ μλ―Έλ μ μ© λ²μκ° λ μ’μ κ²(λ ꡬ체μ μΈ μ ν)μ΄ μ°μ μ μ©λλ€λ κ²μ΄λ€.