HATEOAS란 무엇일까? Hypermedia as the Engine of Application State의 약자로 요청에 대한 응답값에 사용자가 사이트를 네비게이션 할 수 있는 링크들을 만들어 포함시킬 수 있도록 해주는 라이브러리라고 한다. 이러한 기능을 스프링에서 제공하고 있다. 그래서 스프링 헤이티오스 그럼 헤이티오스는 어떤 것을 해줄까? 크게 2가지 부분으로 나눌 수 있다. 첫 번째는 링크를 만들 수 있는 기능을 제공한다. 링크 만드는 방법 : linkTo(DeliveryController.class).slash(newDelivery.getId()).toUri(); 링크를 만드는 방법은 이것말고도 많은데, 대표적으로 linkTo로 만드는 방법이 존재한다. lonkTo로 uri를 만들 수 있게 되..
만약에 검색 조건을 잘못 입력한 경우는 어떻게 될까? 최대한 간단하게 작성해봤다. 만약에, 주문 날짜가 배달 완료 날짜보다 늦은 경우라면 어떻게 해야할까? 솔직히 말이 되지 않는다. 이럴때는 어떻게 처리를 해야할까? @Test void badRequest() throws Exception { DeliveryDto delivery = DeliveryDto.builder() .item("book") .user("klom") .deliveryTime(LocalDateTime.now().plusDays(10)) .deliveryEndTime(LocalDateTime.now()) .itemPrice(0) .build(); mockMvc.perform(post("/api/delivery/") .accept(Medi..
API를 만들다보면, 입력값을 제한하고 싶은 경우가 발생합니다. 예를들면, public class Delivery { private int id; private String item; private String user; private LocalDateTime deliveryTime; private LocalDateTime deliveryEndTime; private DeliveryStatus status; private Integer itemPrice; private Integer deliveryCost; } 이런 객체가 있다고 가정해봅시다. 그런데, id같은 경우 jpa에서 번호를 정해주고, deliveryStatus는 현재 배달의 진행을 보고 결정 되고, deliveryCost는 itemPrice의..
c accept,content에 대해 무지했던것 같다. @Test void create_Delivery() throws Exception { Delivery delivery = Delivery.builder() .id(10) .item("book") .user("klom") .build(); mockMvc.perform(post("/api/delivery/") .accept(MediaTypes.HAL_JSON_VALUE) .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(delivery)) ) .andDo(print()) .andExpect(status().isCreated()); } 코드를 이렇게 수정했다...
나는 배달API를 restAPI로 만들어 볼려고 한다. 내용은 스프링 기반 REST API 개발 에서 공부한 내용을 참조해서 만들었다. 원래는 restAPI에 대한 정의를 말하고 시작해야 되지만 아직은 설명하기는 어려운 것 같다, 일반적인 api보다 상태를 자유롭게 바꿀 수 있다는 건 확실하다. 아무튼 api를 만들기위해서는 dto가 필요하다. 그러니까 자바빈같은게 필요하다는 뜻이다. 간단하게 @Builder @Setter @Getter public class Delivery { private int id; private String item; private String user; private LocalDateTime deliveryTime; private DeliveryStatus status; } ..
만약, 로또에 당첨되었다고 생각해보자. 근데, 당첨된줄 모른다면 무슨 의미가 있을까? 다른 사람은 몰라도 당첨된 사람은 알고 있어야 되지 않을까? 그러면 무슨 의미인지는 모르겠지만... ㅜㅜ 이럴때 사용하는것이 옵저버 패턴이라고 한다. 여기서 디자인 패턴을 설명하지는 않겠지만, 옵저버 패턴을 사용하면 당첨내용을 알 수 있다는 것만은 분명하다. 코드는 최대한 간단하게 작성하였다. 먼저 당첨 번호를 발생시키는 코드 public class Lotto extends ApplicationEvent { private String data; public Lotto(Object source, String data) { super(source); this.data = data; } public String getData..
스프링으로 프로그램을 만들 때, 각자 환경을 조성 할 수 있도록 environment라는 기능을 제공한다. 환경을 조성하는 방법에는 여러가지가 존재하는데, 프로퍼티를 추가하는 방법과 프로파일을 추가하는 방법이 존재한다. 프로파일( == 프로필[profile]) 메인 환경을 만드는 방법. 만들 고 싶응 빈에 다음 처럼 작성해줍니다. @Service @Profile("god") public class God { } 이 뜻은 프로파일명 god일때만 이 빈을 사용한다입니다. 이렇게 환경을 조성하는 대표적인 이유는 실제 서버와 테스트 서버를 구분짓기 위함이라 해석 할 수 있다. 즉, 테스트 서버에는 출시하기 어려운 것들을 실험? 할 수도 있다. 만약, 인텔리제이 얼티미티버전을 사용한다고 한다면, VM option..
스프링에서는 IOC라고도 불리며, DI라고도 불린다. 엄밀리 따진다면, 살짝 다를 수 있는데, 그건 어떻게 해석하냐의 차이라고 생각한다. IOC : 역전 컨테이너 DI : 의존성 제어 즉, IOC는 컨테이너이고, DI는 기술이다. 뭐 따지고 보면 같기 때문에 다르다고 말한다는 건 아닌 것 같다. 아무튼 의존성을 주입하는 방법은 굉장히 많이 존재한다. 몇 가지 예시를 살펴보자. public class SubHello { public SubHello() { System.out.println("sub Hello"); } } public class Hello { public Hello() { SubHello subHello = new SubHello(); System.out.println("hello?"); }..
개요 스프링은 IOC (Injection Of Container) 를 이용해서 bean으로 관리하게 된다. 간단하게 @Service public class Study { } 라고 작성할 수 있습니다. 객체를 만들어 보자. @SpringBootTest class StudyTest { @Autowired private Study study; @Test void test() { System.out.println(study); } } 놀랍게도 객체가 생성되었다는 것을 알 수 있다. 이것이 바로 스프링의 IOC기능이다. 참고로 static한 상태에서는 일반적인 방법으로 만들 수 없다.(일반적이지 않다는 이야기는 다른 방법이 있을 수 도 있지만, 내가 아는 선에서는 없다는 뜻이다.) 발단1 하지만 위와 같은 방법으..