김영한님의 스프링 입문을 들어봤다.
사실 스프링을 시작하기 전에 배우려고 강의를 들었을 땐 전혀 무슨 말인지 이해가 안갔는데, 지금 조금 스프링 부트를 접하고 나니까 이해가 간다.
가령, 웹클라이언트와 동작할 때,
위 3가지 방법으로 나뉘어지는데, 이게 첨엔 잘 이해가 안갔었다.
3번 방법에 대해서 자세히 다루어보자.
기본적으로 컨트롤러에서 2번방식으로 모델에 받은값을 추가해서 뷰에 넘겨줄 수도있지만, 3번방식대로 하면 모델, 뷰 이런거 없이 들어온 값을 이용해서 객체를 넘겨줄 수 있다.
이때 @GetMapping 어노테이션 밑에 @ResponseBody를 넣어주면된다.
@Controller
public class 컨트롤러() {
@GetMapping("/hello")
@ResponsBody
public Hello 테스트(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
}
스프링에서는 디폴트로 @ResponsBody를 붙이고 객체를 리턴하면 HttpMessageConverter를 통해서 객체를 JSON 형태로 바꿔주는 라이브러리 (예: Jackson, GSON) 를 사용해서 클라이언트에게 최종적으로 JSON을 보낸다.
지난 3월 18일자 TIL에 이에대해서 학습한것을 정리했었는데 지금 살펴보니 잘 이해가 가는것같다.
MVC패턴을 이용하면 HttpMessageConverter가 아니라 ViewResolver를 통해서 적절한 html로 변환후 응답한다.
반대로, HttpMessageConverter는 객체가 (또는 String) 들어오면 작동하게 되는 중간매개체인것이다.
추가적으로 @RestController 는 API 사용을 위해서 @Controller 에서 @ResponsBody한것을 그냥 합쳐놓은 것이다.
@Embedded로 연결된 클래스는 기존테이블의 연장선이므로 Embed한 클래스에 있는 필드를 사용할 수 있다. 즉 하나의 클래스인거처럼 Embed한 클래스와 매칭되고 있는 컬럼들을 사용할 수있다.
예를 들어서, 어제 TIL에서 업로드한 이미지를 예로 들자면 UserDetail이 User에 있는 필드를 사용할 수 있다는 말이된다.
물론 비유로써 그렇다는거고 같은 테이블이므로 그 테이블의 컬럼들을 공유할수있다정도?
이게 나에겐 헷갈렸던게 객체가 따로있으니까..어떻게 한테이블에있지만 다른 클래스에있는 컬럼들을 사용해야할지가 헷갈렸다.
url 네이밍에서 카멜케이스를 지양하라는 리뷰를 본것 같아서 찾아봄.
일단 스프링부트로 연동하는 것 자체는 간단한 작업이었음
configure 메서드로 디폴트로 시큐리티해주는 것을, 즉 메인페이지에 가면 자동으로 인증창으로 리다이렉션되는 것을 바꾸는 작업만하면된다.
localhost:8080 접근시 인증된게 없으니 스프링 시큐리티에서 자동으로 인증창으로 띄우고 application.properties에 설정된 값이 있으면 그 설정된 값에 따라 내부적으로 작업을 수행한다..
아마존 리눅스로 설치하니까 레드햇기반의 리눅스라서 apt-get이 아니라 yum 패키지 관리 명령어를 쓴다고한다. 둘의 차이점은 단지 운영체제에 따라서 달리쓰는것같다.
레드햇기반은 yum, 그리고 데비안, 우분투 계열은 apt-get을 쓴다고함.
근데 yum은 mysql 서버 설치가 안되더라
찾아보니 mariaDB 서버로? 디폴트가 변경됐다고 하는데,
그럼에도 mysql서버 설치할수있다고 나오는데 난 잘 안되더라.
걍 삽질하던거 다 지우고 낼 우분투로 다시 설치해야겠다..