TIL-20210304

2021. 03. 04.
  • 오늘 강의는 서버구성과 AWS에 관한 것이었다. 호눅스가 숙제라고 강의 쿠폰을 주셨다. ㅎㅎ. 일반적인 서버 구성이 어떻게 발전해나가는지와 왜 클라우드를 찾게 됐는지에 관한 것이었는데, 성장형으로 보여주니 이해가 잘 됐다. 역시 스토리 텔링이 중요하다. 수업 내용은 파이로가 잘 정리해주셨다. 짱이다. https://www.notion.so/22b5d93081cb458e91057c85a931e6de
  • 핸들바 헬퍼를 자바 클래스로 추가할 수도 있다고 한다. 대신 뷰 리졸버에 등록을 해줘야 하는데, 효율적으로 설정하는 방법이 따로 있을지 생각해봐야겠다. 사실 예시에 나오는 자바 설정이 제일 깔끔할 것 같긴 하다. 그런데, 비슷한 원리를 이용하면 뷰 리졸버에서 페이지마다 url을 모델에 넣어줄 수 있지 않을까 하는 생각도 들었다. 지금 생각해보니 이럴 경우 aop를 사용해야 할 것 같다. 좀 더 찾아보다가 @HandlebarsHelper를 찾았다. 자동으로 메소드 명으로 헬퍼에 등록해주는데 이걸로 날짜 포메팅을 했다. 굳이 헬퍼까지 만든 이유는 어제 찾아봤던 @DateTimeFormatModel Attribute로 받아올 때 포메팅을 지원해주는 것이고(프로퍼티에 설정할 수도 있는 것 같다), 출력해주는 것은 객체에 지정된 로케일대로 출력되기 때문이었다.
  • URL과 HTML 연결을 해주는 WebMvcConfigurer를 설정하는데, 예시에 나와있는 WebMvcConfigurerAdapter는 deprecated 되었다고 한다. 이유는 java8부터 인터페이스에 default 메소드가 추가되었기 때문에 더 이상 어댑터 클래스가 필요가 없어졌기 때문이라고 한다. 예전에 백기선님 스터디를 보면서 배웠던 것이지만 다시 간단히 정리해보자면, 저런 식으로 추상 클래스를 어댑터로 사용하면 인터페이스에 고정된 메소드 대신 선택해서 override할 수 있는 장점이 있었다. 그런데 java8부터는 이를 언어차원에서 지원하고, java8이 최소 조건인 스프링 버전 부터는 이 메소드가 deprecated된 것이다.

    그리고 또 한가지 헤멨던 부분은 @EnableWebMvc이었다. 분명 인터페이스 설명에는 같이 사용하라고 되어있는데, 같이 사용하면 인식을 하지 못한다. 왜 그런가 찾아봤더니, 해당 어노테이션은 WebMvcConfigurationSupport를 상속받은 DelegatingWebMvcConfiguration를 넣어준다. 기본 설정을 추가해주겠다는 것인데, 스프링 부트는 이미 이 동작을 해준다. 바로 WebMvcAutoConfiguration 클래스인데 autoconfigure 패키지에 들어있으며, 설명을 읽어보면 'Auto-configuration for Web MVC.' 라고 되어있다. 여기서 'Auto-configuration'는 EnableAutoConfiguration 어노테이션으로 링크가 되어있다. 문제는 WebMvcAutoConfiguration가 동작하기 위해서는 위에서 말했던 WebMvcConfigurationSupport가 빈으로 등록되지 않은 상태여야한다. 그런데 @EnableWebMvc를 붙이면 자동으로 import해서 해당 클래스의 인스턴스가 빈에 등록되므로 자동설정이 되지 않는 것이었다. 정적 파일들이 제대로 로드되지 않는 것을 보니, 아마 static 폴더와 관련된 자동 설정이 아닐까 싶다.

    이외에 한 가지 더 있었는데, ViewControllerRegistry에 order를 최상위로 지정해줘야 한다는 것이었다. 처음에 무슨 의미인지 이해가 잘 가지 않았는데, RequestMapping도 우선순위가 있다고 한다. 기본값은 1이고 @Controller의 하위는 0으로 설정된다고 한다. 참고로 낮을 수록 우선순위가 높다. 다시 말해, order를 따로 지정하지 않으면 컨트롤러의 매핑보다 우선순위가 낮으므로 비슷한 주소를 사용하는 컨트롤러의 다른 리퀘스트 매퍼에 매핑이 된다. 다시 말하면 굳이 최상위로 지정해주지 않아도 -1만 명시해줘도 지금은 잘 동작한다. 굳이 저렇게 해준건 또 다른 이유가 있지 않을까 싶다. 단순히 매직넘버 때문일 것 같기도 하고 나중에 또 생각이 나지 않을까 싶다.

정대화
DaeHwa_Jeong@outlook.com

Powered with by Gatsby 2.0