TIL 30일_2차

Moon-Tree·2023년 2월 9일
0

◆ 스프링에서 사용하는 등록 어노테이션

1. @Controller

  • 사용자의 요청을 처리하고 결과를 보여주는 역할을 합니다.
  • 컨트롤러 계층은 애플리케이션에서 클라이언트의 요청을 처리하는 계층으로, 클라이언트의 요청을 받아 그에 대한 응답을 생성하는 역할을 합니다.
  • 해당 클래스는 스프링 컨테이너에서 관리되며, 스프링 컨테이너는 해당 클래스의 객체를 생성하여 제공합니다.
  • 웹 기반 애플리케이션에서 웹 요청을 처리하는 클래스에 사용할 수 있으며, 클래스에서는 HTTP 요청 매핑, 모델 객체의 생성, 뷰 템플릿의 호출 등의 작업을 수행할 수 있습니다.

2. @Repository

  • 데이터베이스에 접근하여 데이터를 가져오거나 저장하는 역할을 합니다.
  • 데이터 접근 계층의 클래스에 사용할 수 있으며, 클래스에서는 데이터베이스와의 통신을 수행하여 데이터를 조작할 수 있습니다.
  • 데이터 접근 계층은 애플리케이션에서 데이터베이스와의 상호작용을 담당하는 계층으로, 데이터베이스에서 데이터를 조회, 저장, 수정 등의 작업을 수행합니다.
  • 해당 클래스에서 데이터베이스와의 상호작용을 구현할 수 있으며, 스프링 컨테이너는 해당 클래스에서 발생하는 예외를 자동으로 처리하여 스프링의 데이터 접근 계층 구현에 사용할 수 있는 편의 기능을 제공합니다.

3. @Component

  • 공통 컴포넌트는 기타 컴포넌트와 달리 특정 기능을 가진 클래스를 의미합니다.
  • 외부의 도움 없이 독립 기능을 처리하는 도구입니다.
  • 해당 클래스는 스프링 컨테이너에서 관리되며, 스프링 컨테이너는 해당 클래스의 객체를 생성하여 제공합니다.
  • 클래스를 스캔하여 자동으로 빈으로 등록할 수 있어서 개발자의 편의성이 높아집니다. 또한, 해당 클래스를 의존성 주입을 통해 다른 클래스에서 쉽게 사용할 수 있습니다.
  • 특정 기능을 가진 클래스에 사용할 수 있지만, 그 특정 기능을 나타내는 클래스에는 @Controller, @Repository, @Service와 같은 어노테이션이 더 적합합니다.

4. @Service

  • 비즈니스 로직을 구현하는 클래스에 적합한 어노테이션이며, 스프링 프레임워크에서 서비스 계층을 나타내는 어노테이션입니다.
  • @Repository와 @Component을 포함하고 있는 상위 어노테이션이다.
  • 종합적으로 처리 해야하는 기능을 구현해야 할 때 사용합니다.
  • 스프링 컨테이너에서 관리되며, 스프링 컨테이너는 해당 클래스의 객체를 생성하여 제공합니다.
  • 해당 클래스를 의존성 주입을 통해 다른 클래스에서 쉽게 사용할 수 있습니다.
  • 개발자가 명시적으로 의존성 주입을 지정하지 않아도 자동으로 의존성 주입이 이루어집니다.
  • 스프링 프레임워크에서는 @Controller, @Repository, @Service 어노테이션을 각각 MVC 패턴에서 사용되는 클래스를 나타내는 어노테이션으로 정의하고 있습니다.
  • 서비스 계층은 애플리케이션의 비즈니스 로직을 담당하는 계층으로, 데이터베이스에서 데이터를 조작하거나, 다른 서비스와 통신하는 등의 작업을 수행합니다.

◆ Spring MVC 프레임워크 애노테이션

1. Model model : 모든 정보를 클라이언트로 전달해주는 전송 객체

- JSP를 사용할 때 사용 `return "/WEB-INF/views/member/edit.jsp";`
  • 컨트롤러 메서드에서 Model 객체를 이용하여 뷰에서 사용할 데이터를 전달할 수 있습니다.

이 예제에서, userService.getUsers() 메서드는 사용자 목록을 반환합니다. 이 목록은 model.addAttribute("users", users) 메서드를 통해 뷰에 전달됩니다. 뷰는 users 라는 이름으로 전달된 데이터를 활용할 수 있습니다.

2. RedirectAttributes attr : 리다이렉트에 정보를 추가하기 위한 객체

- 리다이렉트를 사용할 때 사용 `return "redirect:edit";`

  • HTTP 요청의 응답으로 리다이렉트를 수행할 때, 다음 페이지로 전달할 데이터를 관리할 수 있도록 해줍니다.

이 예제에서, userService.createUser(user) 메서드는 새로운 사용자를 생성합니다. redirectAttributes.addFlashAttribute("message", "User created successfully") 메서드를 통해, 리다이렉트되는 다음 페이지로 "User created successfully" 메시지를 전달합니다. 이 메시지는 다음 페이지가 로드된 후 즉시 삭제됩니다.

3. HttpSession : 아이디가 저장되어 있는 세션 객체

- 로그인 후에 생성 할 작업은 `HttpSession session`이 필요하다.
- 데이터를 많이 넣으면 속도가 느려진다.
  • Java Servlet API에서 제공하는 클래스로, HTTP 세션 기능을 제공합니다.
  • HTTP 세션은 웹 애플리케이션에서 사용자 상태를 유지하기 위한 기술입니다.
  • 예를 들어, 로그인이 완료된 사용자의 세션 정보를 유지하는 경우, 사용자 정보를 HttpSession 객체에 저장할 수 있습니다.
  • 그 후, 웹 애플리케이션의 다른 페이지에서 해당 사용자의 정보를 확인하려면, HttpSession 객체에서 그 정보를 가져올 수 있습니다.

이 예제에서, request.getSession() 메서드를 사용하여 HttpSession 객체를 가져옵니다. 그 후, session.setAttribute("user", authenticatedUser) 메서드를 통해, authenticatedUser 객체를 HttpSession 객체에 저장합니다. 이제, 다른 페이지에서도 해당 사용자의 정보를 얻을 수 있

4. @ModelAttribute : 데이터 자동 수신 객체

- 데이터(객체)를 묶음으로 받을 경우
- 파라미터(key=value 형태의 데이터)를 강제하기 어려운 단점이 있다.
- (추가 검사 및 예외 처리가 필요하다.)
- ex) (@ModelAttribute StoreDto storeDto)
  • 컨트롤러 메서드에서 사용되는 파라미터 객체를 지정할 때 사용합니다.
  • 요청 파라미터 값을 사용하여 새로운 객체를 생성하거나 기존 객체에 값을 설정할 수 있습니다. - 생성된 객체는 자동적으로 모델(Model)에 추가되어 뷰(View)에 전달됩니다.

이 예제에서 @ModelAttribute 애노테이션은 User 클래스 객체를 지정하고 있습니다. 요청 파라미터 값을 사용하여 User 객체를 생성하고 메서드에 전달됩니다. 생성된 User 객체는 자동적으로 모델에 추가되어 뷰에 전달됩니다.

5. @RequestParam : jsp에서 보낸 request값을 효율적으로 받기 위해 사용

- 데이터(객체)를 낱개로 받을 경우
- ex) (@RequestParam String store)
  • 컨트롤러 메서드에서 HTTP 요청 파라미터 값을 추출하는 데 사용됩니다.

이 예제에서 @RequestParam(value="query") String query 는 HTTP 요청 파라미터 query의 값을 query 변수에 할당하는 것을 의미합니다. 이 메서드는 GET 요청을 처리하며, URL에 포함된 파라미터 query의 값을 추출하여 query 변수에 할당합니다.


@Postconstruct

  • JAVA의 생성자처럼 생성자의 역할을 수행한다.
  • 객체가 생성되고 모든 종속 항목이 주입된 후 호출되어야 하는 메서드를 나타내는 데 사용되는 Java 주석입니다.
    -일반적으로 개체가 완전히 작동하는 데 필요할 수 있는 추가 초기화를 수행하는 데 사용됩니다.
  • Java EE 컨테이너와 같은 종속성 주입 프레임워크 또는 Spring과 같은 타사 프레임워크를 사용하여 객체가 생성되고 해당 종속성이 주입됩니다.
  • 개체가 생성되고 해당 종속성이 주입된 후@PostConstruct 주석이 달린 메서드가 호출되어 필요할 수 있는 추가 초기화를 수행합니다.
profile
Backend Developer

0개의 댓글