TIL 2021.04.27 [여러가지 학습]

Kyu·2021년 4월 27일
1

TIL

목록 보기
107/322

김영한님 강의

김영한님의 스프링 입문을 들어봤다.
사실 스프링을 시작하기 전에 배우려고 강의를 들었을 땐 전혀 무슨 말인지 이해가 안갔는데, 지금 조금 스프링 부트를 접하고 나니까 이해가 간다.

가령, 웹클라이언트와 동작할 때,

  1. 정적 컨텐츠를 그대로 응답한다.
  2. MVC패턴과 템플릿엔진을 이용해 결과 html을 응답한다.
  3. API 방식으로 JSON을 응답한다.

위 3가지 방법으로 나뉘어지는데, 이게 첨엔 잘 이해가 안갔었다.

3번 방법에 대해서 자세히 다루어보자.

API 방식

기본적으로 컨트롤러에서 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을 보낸다.

HttpMeessageConverter ?

지난 3월 18일자 TIL에 이에대해서 학습한것을 정리했었는데 지금 살펴보니 잘 이해가 가는것같다.
MVC패턴을 이용하면 HttpMessageConverter가 아니라 ViewResolver를 통해서 적절한 html로 변환후 응답한다.
반대로, HttpMessageConverter는 객체가 (또는 String) 들어오면 작동하게 되는 중간매개체인것이다.

추가적으로 @RestController 는 API 사용을 위해서 @Controller 에서 @ResponsBody한것을 그냥 합쳐놓은 것이다.

@Embedded

@Embedded로 연결된 클래스는 기존테이블의 연장선이므로 Embed한 클래스에 있는 필드를 사용할 수 있다. 즉 하나의 클래스인거처럼 Embed한 클래스와 매칭되고 있는 컬럼들을 사용할 수있다.
예를 들어서, 어제 TIL에서 업로드한 이미지를 예로 들자면 UserDetailUser에 있는 필드를 사용할 수 있다는 말이된다.
물론 비유로써 그렇다는거고 같은 테이블이므로 그 테이블의 컬럼들을 공유할수있다정도?
이게 나에겐 헷갈렸던게 객체가 따로있으니까..어떻게 한테이블에있지만 다른 클래스에있는 컬럼들을 사용해야할지가 헷갈렸다.

URL 컨벤션?

url 네이밍에서 카멜케이스를 지양하라는 리뷰를 본것 같아서 찾아봄.

참고 : What is the casing convention for URL routes?

  • Avoid capitalization if possible
  • URLs should never be case sensitive (regardless of the OS for the server)
  • A user does not want to have to remember that the path to a certain page on your site has capital letters at position X and position Y.

OAuth 2.0

일단 스프링부트로 연동하는 것 자체는 간단한 작업이었음
configure 메서드로 디폴트로 시큐리티해주는 것을, 즉 메인페이지에 가면 자동으로 인증창으로 리다이렉션되는 것을 바꾸는 작업만하면된다.

localhost:8080 접근시 인증된게 없으니 스프링 시큐리티에서 자동으로 인증창으로 띄우고 application.properties에 설정된 값이 있으면 그 설정된 값에 따라 내부적으로 작업을 수행한다..

Amazon Linux...

아마존 리눅스로 설치하니까 레드햇기반의 리눅스라서 apt-get이 아니라 yum 패키지 관리 명령어를 쓴다고한다. 둘의 차이점은 단지 운영체제에 따라서 달리쓰는것같다.
레드햇기반은 yum, 그리고 데비안, 우분투 계열은 apt-get을 쓴다고함.

근데 yum은 mysql 서버 설치가 안되더라
찾아보니 mariaDB 서버로? 디폴트가 변경됐다고 하는데,
그럼에도 mysql서버 설치할수있다고 나오는데 난 잘 안되더라.
걍 삽질하던거 다 지우고 낼 우분투로 다시 설치해야겠다..

profile
TIL 남기는 공간입니다

0개의 댓글