1. SpringMVC

  1. [설명]
    1. Spring이 관리하는 Object 입니다
  2. [기능(어노테이션)]
    1. @Service[Model]
      1. 비즈니스 로직을 담당하는 Bean 객체임을 나타내는 어노테이션 입니다
      2. @Component의 하위 어노테이션으로, 스프링 프레임워크가 서비스를 자동으로 빈으로 등록 합니다
      3. 스프링 프레임워크가 서비스를 자동으로 빈으로 등록하기 때문에, 빈을 직접 등록할 필요가 없습니다
      4. 스프링 프레임워크가 서비스를 싱글톤으로 관리하기 때문에, 서비스를 여러 곳에서 사용해도 안전 합니다
    2. @Component
      1. 스프링 컨테이너가 객체를 생성하고 관리하는 데 사용하는 어노테이션입니다
      2. 빈(bean)을 생성하기 위한 가장 기본적인 어노테이션으로, 빈을 생성할 때 클래스의 이름을 지정하지 않으면 @Component가 기본값으로 사용 됩니다
      3. @Controller, @Service, @Repository와 같은 다른 어노테이션과 함께 사용할 수도 있습니다
      4. 특정 기능을 수행하는 빈을 생성하는 데 사용됩니다
      5. 스프링 컨테이너가 객체를 생성하고 관리하는 데 필요한 코드를 작성하지 않아도 되기 때문에 코드의 복잡성을 줄일 수 있습니다
      6. [예시]
        1. @Controller는 HTTP 요청을 처리하는 빈을 생성하는 데 사용되고,
        2. @Service는 비즈니스 로직을 수행하는 빈을 생성하는 데 사용되고,
        3. @Repository는 데이터베이스 액세스를 수행하는 빈을 생성하는 데 사용됩니다
    3. @ComponentScan
      1. Spring 컨테이너가 특정 패키지에서 @Component, @Controller, @Service, @Repository로 표시된 클래스를 자동으로 검색하고 빈으로 등록하는 데 사용됩니다

      2. XML 기반 설정을 작성하지 않고도 Spring MVC 애플리케이션을 쉽게 구성할 수 있습니다

      3. [속성]

        1. basePackages
          1. 스캔할 패키지 목록입니다. 기본값은 현재 패키지와 하위 패키지 입니다
        2. useDefaultFilters
          1. 기본적으로 @Component, @Controller, @Service, @Repository로 표시된 클래스만 스캔됩니다
          2. false로 설정하면 다른 어노테이션으로 표시된 클래스도 스캔 됩니다
        3. excludeFilters
          1. 스캔에서 제외할 클래스 목록입니다
      4. [예시]

        1. @Configuration
        @ComponentScan(basePackages = "com.example.myapp")
        public class AppConfig {
        
        }
        
        1. com.example.myapp 패키지와 하위 패키지에서 @Component, @Controller, @Service, @Repository로 표시된 클래스를 자동으로 검색하고 빈으로 등록한다는 의미입니다
    4. @Controller
      1. Spring MVC 프레임워크에서 컨트롤러 클래스를 표시하는 데 사용되는 애노테이션입니다
      2. 애노테이션이 지정된 클래스는 HTTP 요청을 처리하고 응답을 생성하는 데 사용됩니다
      3. @RequestMapping 애노테이션과 함께 사용하여 컨트롤러 클래스가 처리할 HTTP 요청을 지정할 수 있습니다
    5. @Repository
      1. Spring Data의 Repository 인터페이스를 구현하는 클래스를 나타내는 애노테이션입니다

      2. 애노테이션을 사용하면 Spring은 해당 클래스의 인스턴스를 자동으로 생성하고 주입합니다

      3. Spring Data가 클래스를 발견하고 적절한 구현을 생성하는 데 도움 됩니다

      4. 클래스를 직접 구현하지 않고도 Spring Data의 Repository 기능을 사용 할 수 있습니다

      5. 애노테이션을 사용하면 Spring Data의 Repository 기능을 사용하여 MVC 컨트롤러에서 데이터를 저장하고 검색할 수 있습니다

      6. [예시]

        @Repository
        public interface MyRepository extends CrudRepository<MyEntity, Long> {
        }
        
        1. MyRepository는 Spring Data의 CrudRepository 인터페이스를 확장 합니다
        2. CrudRepository 인터페이스는 CRUD(Create, Read, Update, Delete) 작업을 수행하는 데 필요한 메서드를 제공합니다
        3. Spring Data가 클래스를 자동으로 생성하고 주입하므로 코드가 간단해 집니다
        4. Spring Data는 클래스의 구현을 추상화하므로 특정 데이터 저장소에 종속되지 않습니다
        5. Spring Data는 클래스에 대한 다양한 기능을 제공합니다
    6. @HtmlForm
      1. HTML 양식을 정의하는 데 사용되는 어노테이션입니다

      2. HTML 양식 태그의 name 속성을 지정하는 데 사용되며, 이 속성을 사용하여 폼의 데이터를 컨트롤러에 전송할 수 있습니다

      3. [속성]

        1. name
          1. HTML 양식 태그의 name 속성을 지정합니다
        2. modelAttribute
          1. 폼의 데이터를 맵핑할 컨트롤러의 속성 이름을 지정합니다
        3. method
          1. 폼의 HTTP 메서드를 지정합니다
      4. [예시]

        @HtmlForm(name = "contactForm", modelAttribute = "contact")
        {
            <input type="text" name="name" />
            <input type="submit" value="Submit" />
        }
        
        1. HTML 양식을 정의하고, name 속성을 "contactForm"로, modelAttribute 속성을 "contact"로 설정합니다
        2. 양식을 제출하면 컨트롤러의 contact 속성에 데이터가 맵핑됩니다
      5. From Element

        1. html에서 데이터를 보내는 가장 기초적인 방법을 말합니다
      6. [기능]

        1. @RequestParam
          1. Spring MVC에서 HTTP 요청 파라미터를 컨트롤러 메서드의 매개변수에 바인딩하는 데 사용되는 어노테이션입니다

          2. HTTP 요청 파라미터의 이름과 컨트롤러 메서드의 매개변수의 이름을 일치시켜 매개변수에 값을 바인딩할 수 있습니다

          3. [예시]

            @RequestMapping("/hello")
            public String hello(@RequestParam("name") String name) {
              return "hello, " + name;
            }
            
            // GET /hello?name=Test
            
            1. Spring MVC는 name 매개변수에 "Test"을 바인딩하고 "hello, Test"을 반환합니다
          4. [속성]

            1. name
              1. HTTP 요청 파라미터의 이름입니다. 이 속성은 필수입니다
            2. required
              1. HTTP 요청 파라미터가 필수인지 여부입니다. 이 속성의 기본값은 true입니다
            3. defaultValue
              1. HTTP 요청 파라미터가 없거나 null인 경우 사용할 기본값입니다
    7. HTTP Methods
      1. HTTP Method를 사용하여 URL과 컨트롤러 메서드를 매핑하는 방법 입니다
      2. HTTP가 지키도록 하는 규칙에는 내가 보내는 요청의 목적을 나타내게 됩니다
      3. [지원]
        1. GET
          1. 특정 리소스를 가져오는 데 사용됩니다
        2. POST
          1. 새 리소스를 생성하거나 기존 리소스를 수정하는 데 사용됩니다
        3. PUT
        4. PATCH
        5. DELETE
    8. redirect
  3. PRG패턴