본문 바로가기
KOSTA교육/수업

[46/100] 240619

by 이원혁 2024. 6. 19.
반응형

spring annotation 종류

 

@Component

개발자가 직접 작성한 class를 bean으로 등록하는 annotation

 

@Component(value="mystudent")//component는 name이 아닌 value를 이용해서 bean의 이름 저장
public class Student {
public Student() { System.out.println("hi"); }
}

 

@Bean

개발자가 직접 제어가 불가능한 외부 라이브러리를 bean으로 만드려고 할때 사용하는 annotation

 

@Autowired

속성(field), setter method, 생성자에서 사용하며 type에 따라 알아서 bean을 주입해준다.

의존성주입

 

@Qualifier("id")

autowired와 같이 쓰이며 같은 타입의 Bean 객체가 있을 때 해당 아이디를 적어 원하는 Bean이 주입될 수 있도록 하는 Annotation이며 같은 타입의 bean 객체가 여러개일때 어떤것을 지정할지 몰라서 예외를 발생시키는데 이때 qualifier로 정확히 사용할 bean을 지정하여 의존성 주입

 

@RequiredArgsConstructor
초기화 되지않은 final 필드나, @NonNull 이 붙은 필드에 대해 생성자를 생성하고 주로 의존성 주입 편의성을 위해서 사용한다.

 

@Controller

Spring의 Controller를 의미하고 Spring MVC에서 Controller클래스에 사용

 

@RestController

@Controller에 @ResponseBody가 결합된 어노테이션으로 컨트롤러 클래스에 @RestController를 붙이면, 컨트롤러 클래스 하위 메서드에 @ResponseBody 어노테이션을 붙이지 않아도 문자열과 JSON 등을 전송할 수 있습니다.

 

@Service
Service Class에서 사용 비즈니스 로직을 수행하는 Class라는 것을 나타내는 용도

 

@Repository

DAO class에서 사용, DataBase에 접근하는 method를 가지고 있는 Class에서 씀

 

@RequestMapping

요청 URL을 어떤 method가 처리할지 mapping해주는 Annotation
Controller나 Controller의 method에 적용
요청을 받는 형식인 GET, POST, PATCH, PUT, DELETE 를 정의
요청 받는 형식을 정의하지 않는다면, 자동적으로 GET설정

 

@ModelAttribute

view에서 전달해주는 파라미터를 Class(VO/DTO)의 멤버 변수로 바인딩 해주는 Annotation
바인딩 기준은 <input name="id" /> 처럼 태그의 name값이 해당 Class의 멤버 변수명과 일치하고 setmethod명도 일치

//view에 값을 전달할 때 request.setAttribute와 같은 느낌으로 사용

 

@RequestParam

request의 parameter에서 가져오는 것으로 method의 파라미터에 사용
?moviename=thepurge 와 같은 쿼리 파라미터를 파싱
HTTP GET 요청에 대해 매칭되는 request parameter 값이 자동
url 뒤에 붙는 parameter 값을 가져올 때 사용 //gender값을 data이름으로 파싱

 

@Data

@Getter @Setter @EqualsAndHashCode @AllArgsConstructor @toString @equals 를 포함한 Lombok에서 제공하는 필드와 관련된 모든 코드를 생성

 

@ExceptionHandler(ExceptionClassName.class)

해당 클래스의 예외를 캐치하여 처리

 

@ControllerAdvice

Class 위에 ControllerAdvice를 붙이고 어떤 예외를 잡아낼 것인지는 각 메소드 상단에 @ExceptionHandler(예외클래스명.class)를 붙여서 사용

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

내가 이해한 spring 4.0 흐름

 

1. 클라이언트 (브라우저)에서 HTTP 요청을 보내면
사용자가 URL을 입력하거나 링크를 클릭하여 브라우저에서 HTTP 요청을 보낸다.
HTTP 요청은 GET, POST, PUT, DELETE 등의 다양한 메소드로 전송가능


2. Tomcat 서버가 요청을 수신하여 Spring에 전달하면
Tomcat 서버는 브라우저로부터 HTTP 요청을 수신
Tomcat은 요청된 URL을 기반으로 적절한 웹 애플리케이션을 찾는다
웹 애플리케이션의 web.xml 파일에서 DispatcherServlet이 정의되어 있는지 확인하고 요청을 DispatcherServlet에 전달


3. DispatcherServlet이라는 컴포넌트가 제어 시작
DispatcherServlet은 Spring의 프론트 컨트롤러로서 모든 요청 처리


4. 가장 먼저 Handler Mapping을 이용해서 URL에 맞는 컨트롤러를 찾기
DispatcherServlet은 요청이 들어오면 Handler Mapping을 사용하여 URL 패턴에 매핑된 적절한 컨트롤러를 찾는다
Spring에서는 다양한 Handler Mapping 전략을 사용가능 (예: RequestMappingHandlerMapping).

 

5-1. 만약 없으면 404 에러를 발생시킨다
Handler Mapping에서 해당 URL에 매핑된 컨트롤러를 찾지 못하면 DispatcherServlet은 404 Not Found 에러를 반환

 

5-2. 만약 맞는 컨트롤러가 있다면 해당 컨트롤러를 실행해서 메서드를 호출
적절한 컨트롤러를 찾으면, DispatcherServlet은 해당 컨트롤러의 메서드를 실행
이때, 컨트롤러 메서드는 @RequestMapping 어노테이션으로 매핑
메서드의 인자로 HTTP 요청 데이터(파라미터, 바디, 헤더 등)가 주입가능

 

6.컨트롤러 메서드가 비즈니스 로직을 처리하고 뷰 이름을 반환
컨트롤러 메서드는 비즈니스 로직을 수행하고, 뷰 이름과 모델 데이터를 반환
ModelAndView 객체를 사용하여 뷰 이름과 모델 데이터를 함께 반환가능


7. 뷰 리졸버 컴포넌트를 이용해서 메서드를 호출한 결과에 맞는 뷰를 렌더링
컨트롤러 메서드가 반환한 뷰 이름은 View Resolver에 의해 실제 뷰로 변환
View Resolver는 뷰 이름에 해당하는 실제 뷰 파일의 경로를 결정(예: InternalResourceViewResolver는 JSP 파일 경로를 결정).

 

8. 뷰는 모델 데이터를 사용하여 최종 HTML 페이지를 생성
View Resolver에 의해 결정된 뷰는 모델 데이터를 사용하여 최종 HTML 페이지를 생성

 

9. DispatcherServlet이 최종 뷰를 Tomcat으로 HTTP 응답으로 반환
DispatcherServlet은 생성된 HTML을 HTTP 응답으로 작성하여 Tomcat 서버로 반환

 

10. 브라우저가 HTTP 응답을 수신해서 맞게 화면에 표시
브라우저는 서버로부터 받은 HTTP 응답을 수신
응답으로 받은 HTML을 브라우저가 렌더링하여 사용자에게 화면에 표시

 

 

추가로

Exception Handling: 요청 처리 중에 발생할 수 있는 예외를 처리하기 위해 @ExceptionHandler 또는 전역 예외 처리기 (@ControllerAdvice)를 사용가능하다
Interceptors: 요청 처리 전후에 추가적인 로직을 삽입하기 위해 Spring Interceptors를 사용가능하다

 

rest 컨트롤러의 경우 

메서드를 처리하고 나서 xml이나 json데이터 반환

 

 

view resolver를 쓰지 않고 @responsebody 어노테이션을 써서 데이터 자체 반환

 

rest클라이언트나 브라우저가 http응답을 수신해서 처리하는 구조

rest flow

 

반응형

'KOSTA교육 > 수업' 카테고리의 다른 글

[48/100] 240621  (0) 2024.06.21
[47/100] 240620  (0) 2024.06.20
[45/100] 240618  (0) 2024.06.18
[44/100] 240617  (0) 2024.06.17
[43/100] 240614  (0) 2024.06.17