본문 바로가기

분류 전체보기77

[spring] 스프링 부트의 Hateoas 지원 Hateoas? Hypermedia As The Engine Of Application State - REST 아키텍쳐의 구성 요소 - REST API에서 리소스를 제공할 때, 연관된 링크 정보를 함께 제공 - 클라이언트는 연관 링크 정보를 바탕으로 리소스에 접근 - 다른 상태로 전이할 수 있는 링크 레퍼런스를 제공 의존성 추가 필요 spring-boot-starter-hateoas 추가 - ObjectMapper 사용 spring-boot-starter-web 추가 시, Bean으로 등록되는 ObjectMapper json으로 변환할 때 사용하는 인터페이스 spring.jackson.* 프로퍼티로 커스터마이징 가능 - LinkDiscovers 제공 xPath를 확장해서 만든 hateoas용 클라이언트 .. 2020. 5. 3.
[gradle] api와 implementation api (= old compile keyword) gradle 3.0부터 deprecated된 compile을 대체! transitive dependency들도 consumer에게 라이브러리 노출 O transitive dependency들도 consumer의 classpath에 포함 O implementation transitive dependency들은 consumer에게 라이브러리 노출 X transitive dependency들은 consumer의 classpath에 포함 X 그래서 노출될 필요 없는 의존성들은 api(compile)보다 implementation을 권장 api와 implementation 예시 api : 의존 라이브러리 수정 시, 해당 라이브러리를 포함하게 되는 모든 모듈 rec.. 2020. 4. 26.
[spring] 스프링 웹 MVC의 ExceptionHandler ExceptionHandler - 스프링 부트 실행 시, 기본 예외 핸들러 등록됨 = BasicErrorController - 콘솔(machine clientf라고 함)에서 curl로 에러페이지 요청 시, json으로 응답이 옴 Exception Handling 테스트하기 예외를 던질 컨트롤러 클래스 작성 URL맵핑 -> throw Exception 예외 클래스 작성 RuntimeException 상속 예외 핸들러에서 @ExceptionHandler(SampleException.class)를 선언한 메소드 작성 해당 컨트롤러 안에서, 해당 예외가 발생하면 이 핸들러를 사용하겠다는 의미 이벤트 핸들러처럼, 메소드 파라미터로 예외 객체 받을 수 있음 커스텀 에러 클래스 구현 @ExceptionHandler .. 2020. 4. 26.
[왜] gradle은 다운로드한 의존성 파일(jar)을 해당 프로젝트에 보관하지 않을까? 문제상황 jquery webJar를 의존성으로 추가하고, 해당 라이브러리의 폴더 구조가 어떻게 되있는지 알고 싶었다. 그런데 로컬에서 프로젝트 디렉토리를 탐색하면, 라이브러리(jar파일) 폴더는 보이지 않았다. gradle을 통해 의존성을 추가하고 빌드하면, 해당 프로젝트에서 라이브러리를 사용할 수 있음에도 불구하고! 대체 왜 그럴까? 이유 바로 로컬 캐시 때문이다. 다른 프로젝트에서 동일한 의존성을 추가하고 빌드 시, 해당 라이브러리를 저장소에서 또 다운로드 받는 건 비효율적이다. 따라서 특정 경로에 의존성들을 다운로드 받아놓고, 버전이 같은 경우 다시 다운로드하지 않는다. 해쉬값으로 디렉토리 이름이 저장된다. 해당 라이브러리의 오염을 체크하는 것?! (정확하진 않음) 의존성 다운로드 경로는 /.gra.. 2020. 4. 25.
[spring] 스프링 웹 MVC의 동적 리소스 지원 (Thymeleaf) Template Engine - 주로 View를 만드는데 사용 - 그 외 Code Generation / Email Template 등에 사용 - 사용 이유 : 서버 처리 후, 템플릿에 동적으로 값을 삽입 - 스프링 부트가 자동 설정 지원하는 엔진 Thymeleaf (★) FreeMarker Groovy Mustache JSP를 권장하지 않는 이유 - 스프링 부트의 Goal : 내장WAS로 독립적으로 실행 가능한 웹 어플리케이션을 빠르게 배포 - JSP 사용 시 WAR패키징만 가능 Undertow 서블릿 컨테이너는 JSP 미지원 의존성 문제 가능성 Thymeleaf 사용 - 의존성 추가 : spring-boot-starter-thymeleaf - 템플릿 탐색 위치 : src/main/resources/t.. 2020. 4. 25.