본문 바로가기
Back-End/Spring Boot

Spring Boot - 어노테이션 종류

by 코젼 2022. 7. 20.
728x90
반응형

2022-07-20(23일차)

💡어노테이션

💁‍♀️어노테이션의 종류에 대해서 알아봅시다.


💡@Controller

▪️ View를 반환한다.
▪️ () 괄호 안에 있는 경로와 컨트롤러를 매핑한다.

▪️ @RequestMapping("home")이라면, src/main/webapp/WEB-INF/views/home.jsp와 연결해준다.
▪️ 하단의 설정에 따라 "home"을 리턴하면, home 앞에는 prefix 부분, 뒷 부분에는 suffix부분이 자동으로 붙는다.
▪️ /WEB-INF/views/home.jsp가 된다.
▪️ @Controller는 jspThymeleaf등을 찾아낸다.
▪️ 결과를 json이나 문자열이 아닌 페이지로 받으려면 @Controller를 사용한다.
▪️ 주소 처리가 들어오면 page로 받는다.
▪️ 클래스를 만들기 전에 @Controller를 적으면 그 클래스가 Controller 역할을 한다.
@Controller                   // 이 Class는 Controller 역할을 합니다
@RequestMapping("/user")      // 이 Class는 /user로 들어오는 요청을 모두 처리합니다.
public class UserController {
    @RequestMapping(method = RequestMethod.GET)
    public String getUser(Model model) {
        //  GET method, /user 요청을 처리
    }
}​

⭐MVC 패턴

▪️ 디자인 패턴
▪️ Model, View, Controller의 약자이다.
▪️ 하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 세가지의 역할로 구분한 패턴이다.

◾Model

▪️ 애플리케이션의 정보, 데이터를 나타냅니다.
▪️ 상수, 초기화값, 변수 등을 뜻한다.
▪️ 이러한 데이터, 정보들의 가공을 책임지는 컴포넌트를 말한다.

▪️ 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
▪️ 뷰나 컨트롤러에 대해서 어떤 정보도 알지 말아야 한다.
▪️ 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야만 한다.

◾View

▪️ input 텍스트, 체크박스 항목 등과 같은 UI요소를 나타낸다.
▪️ 
데이터 및 객체 입력, 출력 담당이다.


▪️
모델이 가지고 있는 정보를 따로 저장해서는 안된다.
▪️ 모델이나 컨트롤러와 같이 다른 구성요소들을 몰라야 한다.
▪️ 변경이 일어나면 변경통지에 대한 처리방법을 구현해야만 한다.

◾Controller

▪️ 데이터UI 요소들을 잇는 연결 역할이다.
▪️ 사용자가 데이터를 클릭하고, 수정하는 것에 대한 "이벤트"들을 처리하는 부분을 말한다.

▪️ 모델이나 뷰에 대해서 알고 있어야 한다.
▪️ 모델이나 뷰의 변경을 모니터링 해야 한다.

▪️ reference

https://m.blog.naver.com/jhc9639/220967034588

 

[개발자 면접준비]#1. MVC패턴이란

오늘은 개발자면접에 많이 나오기도 하는 MVC패턴에 대해서 알아보고자 합니다. 과연 MVC패턴이 무엇...

blog.naver.com


💡@RequestMapping

▪️ 요청에 대해 어떤 Controller, 어떤 메소드가 처리할지를 맵핑하기 위한 어노테이션

▪️ @RequestMapping(value="/")
 --> @RequestMapping("/")라고 적어도 상관없다.

▪️ value
▪️ method
ex) @RequestMapping(value = "/hello", method = RequestMethod.GET)

💬요청을 할 때 두가지 타입이 있다.
get 방식 : url 치는 것 뒤에 ?를 넣고 변수 값을 넣는 방식이다.
ex) www.test.com/index?
▪️ 변수와 값의 구분은 '?' 로 한다. '?'는 한 번만 사용할 수 있다.
▪️ '&'는 구분자이다.
post 방식 : html 안에 home 태그를 만들어서 home 태그 안에 값을 넣어 안 보이게 전송하는 방식
post 방식을 사용할 거면 PostMapping으로 사용한다
만약 둘 중에 어떤 방식으로 받을지 정하지 못했을 땐, @RequestMapping을 사용한다.

get / post 방식 중 어떤 것 중 사용하든 관계 없다.

처음 주소로 접근할 때는 무조건 GET방식으로 접근할 것. POST방식으로 접근하면 접근되지 않는다.


💡@ResponseBody

▪️ 어노테이션이 붙은 파라미터에는 HTTP 요청의 본문 body 부분이 그대로 전달된다.
▪️ xml이나 json기반의 메시지를 사용하는 요청의 경우에 이 방법이 매우 유용하다.
▪️ 일반적인 GET/POST의 요청 파라미터라면 사용할 일이 없을 것이다.
▪️ 자바객채를 HTTP요청의 바디내용으로 매핑하여 클라이언트로 전송한다.
▪️ @ResponseBody를 받으면 문자열을 받을 수 있다.
▪️ 요청본문 (requestBody), 응답본문 (responseBody)
@Controller                   // 이 Class는 Controller 역할을 합니다
@RequestMapping("/user")      // 이 Class는 /user로 들어오는 요청을 모두 처리합니다.
public class UserController {
    @RequestMapping(method = RequestMethod.GET)
    @ResponseBody
    public String getUser(@RequestParam String nickname, @RequestParam(name="old") String age {
        // GET method, /user 요청을 처리
        // https://naver.com?nickname=dog&old=10
        User user = new User();
        user.setName(nickname);
        user.setAge(age);
        return user;
    }
}

💡@RestController

▪️ 문자열이나 json파일로 받을 수 있다.
▪️ 문자열로 받을 때마다 계속 적기 번거로우니 자바 파일 하나에 text나 json으로 생각할 수 있게 두개를 합쳐서 @RestController를 사용한다
▪️ @Controller에 @ResponseBody가 결합된 어노테이션이다.


💡@RequestParam

▪️ Controller 메소드의 파라미터와 웹 요청 파라미터와 맵핑하기 위한 어노테이션
▪️ URL에 전달되는 파라미터를 메소드의 인자와 매칭시켜 파라미터를 받아서 처리할 수 있는 어노테이션으로 사용한다.
▪️ Json 형식의 Body를 MessageConverter를 통해 Java객체로 변환시킨다.
@Controller                   // 이 Class는 Controller 역할을 합니다
@RequestMapping("/user")      // 이 Class는 /user로 들어오는 요청을 모두 처리합니다.
public class UserController {
    @RequestMapping(method = RequestMethod.GET)
    public String getUser(@RequestParam String nickname, @RequestParam(name="old") String age {
        // GET method, /user 요청을 처리
        // https://naver.com?nickname=dog&old=10
        String sub = nickname + "_" + age;
        ...
    }
}​

💡@repository

▪️ DAO class에서 쓰인다.
▪️ DataBase에 접근하는 method를 가지고 있는 class에서 쓰인다.

💡@Service

▪️ @Component 어노테이션과 다르다.
▪️ 이 어노테이션을 달은 클래스에는 '비즈니스 레이어' 로직에 맞게 짜기 때문에 보통 별도의 데이터를 가지고 있지 않을 것이다.
▪️ 업무 메소드만 정의한다.
▪️ MVC에 자주 쓰기 때문에 MVC 소속 어노테이션이라고 생각하지만 MVC없어도 선언 가능하다.
▪️ 비즈니스(업무) 로직이 있다.
▪️ dao를 호출할 것이다.
▪️ vo를 세팅한다.

💡@Configuration

▪️  @Configuration을 클래스에 적용하고 @Bean을 해당 Class의 method에 적용하면 @Autowired로 Bean을 부를 수 있다.
▪️ 클래스 파일이 환경설정을 이미 해둔 파일이다.

💡@EnableWebSecurity

▪️ 보안 설정이 필요한 클래스에 선언한다.
▪️ 인증, 권하눕여, 로그인, 로그아웃 페이지의 렌더링 등

💡@Bean

▪️ 개발자가 제어가 불가능한 외부 라이브러리와 같은 것들을 Bean으로 만들 때 사용한다.
▪️ @Configuratin 선언한 빈 설정 클래스에 빈 선언을 담당하는 어노테이션
▪️ 메소드에만 넣을 수 있다.
▪️ 보통은 메소드 이름이 곧 빈 이름으로 탄생한다.
▪️ 스프링한테 제공된다.
▪️ 이미 만들어진 Bean들을 가지고 있다가 요청하면 스프링이 제공해준다.
▪️ 관리되는 곳은 스프링 컨테이너이다.
▪️ 스프링 컨테이너에게 호출해서 준다.
@Configuration
public class ApplicationConfig {    
    @Bean
    public ArrayList<String> array(){
        return new ArrayList<String>();
    }   
}​

💡@AutoWired

▪️ Spring Framework에서 Bean 객체를 주입받기 위한 방법
▪️ Bean을 주입받기 위해서 @Autowired를 사용한다.
▪️ Spring Framework가 Class를 보고 Type에 맞게 Bean을 주입한다.
▪️ Type을 먼저 확인한 후, 없으면 Name을 확인한다.
▪️ 컨트롤러에서 service, dao 호출할 때 만들어 놨던 것을 불러올 때 new로 호출하지 않고 만들어놓은 것을 스프링에게 @AutoWired를 이용하여 호출한다.
▪️ 자동으로 연결해달라고 요청한다.
▪️ new를 스프링이 대신해서 가지고 있기 때문에 컨트롤러가 스프링에게 호출하면 스프링이 자동으로 줄 것이다.
 --> 본래 컨트롤러에서 서비스를 호출할 때 dto를 넘겨주게 되면 서비스도 클래스, 컨트롤러도 클래스이기 때문에 new로밖에 호출을 할 수 없다. 
▪️ @Autowired
▪️ 생성자 (@AllArgsConstructor 사용)
▪️ setter​

💡@RequestHeader

▪️ Request의 header값을 가져올 수 있으며, 해당 어노테이션을 쓴 메소드의 파라미터에 사용한다.
@Controller                   // 이 Class는 Controller 역할을 합니다
@RequestMapping("/user")      // 이 Class는 /user로 들어오는 요청을 모두 처리합니다.
public class UserController {
    @RequestMapping(method = RequestMethod.GET)
    public String getUser(@RequestHeader(value="Accept-Language") String acceptLanguage) {
        //  GET method, /user 요청을 처리
    }
}​
728x90
반응형

'Back-End > Spring Boot' 카테고리의 다른 글

Spring Boot - Thymeleaf  (0) 2022.07.21
Spring Boot - JPA  (0) 2022.07.21
Spring Boot - jsp 파일 생성, web 확인  (0) 2022.07.20
Spring Boot - jsp  (0) 2022.07.20
Spring boot - 시작하기  (0) 2022.07.19

댓글