▪️ @RequestMapping("home")이라면, src/main/webapp/WEB-INF/views/home.jsp와 연결해준다. ▪️ 하단의 설정에 따라 "home"을 리턴하면, home 앞에는 prefix 부분, 뒷 부분에는 suffix부분이 자동으로 붙는다. ▪️ /WEB-INF/views/home.jsp가 된다.
▪️ @Controller는 jsp나 Thymeleaf등을 찾아낸다. ▪️ 결과를 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 요소들을 잇는 연결 역할이다. ▪️ 사용자가 데이터를 클릭하고, 수정하는 것에 대한 "이벤트"들을 처리하는 부분을 말한다.
▪️ 모델이나 뷰에 대해서 알고 있어야 한다. ▪️ 모델이나 뷰의 변경을 모니터링 해야 한다.
💬요청을 할 때 두가지 타입이 있다. ◾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로밖에 호출을 할 수 없다.
▪️ 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 요청을 처리
}
}
댓글