오랜만에 작성하는것 같다. 아무튼 다시 작성하게 되어서 기쁘다.! restAPI docs를 만들기 위해서는 org.springframework.restdocs spring-restdocs-mockmvc test 이 의존성을 추가해줘야 한다. RestApi 만들기 - spring-rest-docs (5) 자 드디어 rest-docs를 적용할때가 왔다. Spring REST Docs Document RESTful services by combining hand-written documentation with auto-generated snippets produced with Spring MVC Test. docs.spring.io.. b-programmer.tistory.com 이글에서 spring-rest..
자 드디어 rest-docs를 적용할때가 왔다. Spring REST Docs Document RESTful services by combining hand-written documentation with auto-generated snippets produced with Spring MVC Test. docs.spring.io 원래 private MockMvc mockMvc; @Autowired private WebApplicationContext context; @Before public void setUp() { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context) .apply(documentationConfiguration(this.re..
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; } ..
탬플릿? 뭔가 느낌이 일정한 모형 틀을 만들어 놓고, 그 틀을 계속 사용하는 느낌이다. 구글에서 템플릿 관련 이미지를 찾았다. 죄다 ppt관련 이미지 밖에 없었다. 왜 ppt를 만들때 템플릿을 사용할까? 가장 뻔한 이유로는 편하기 때문이다. 어차피 제목 이나 내용빼고는 이미 구현되었기 때문에 우리는 제목과 내용만 추가하면 된다. 물론 내가 발표할 주제와 ppt의 상관관계는 지켜야 하겠지만... 근데... 디자인 패턴에서는 템플릿을 어떻게 사용할까? 사실 이름에는 메소드라는 단어가 숨겨져 있다. 메소드가 있는 이유는 이 패턴은 메소드의 역할이 크기 때문이다. 예를들어 A라는 클래스와 B라는 클래스를 만든다고 가정하자. 근데 A와 B클래스는 공통적으로 사용되는 메소드가 있다. 이 메소드를 한곳에 넣어주면 된..
오랜만에 작성하는 것 같다. 프록시 이후로 9일만에 작성하는데.... 아무튼 빌더 패턴은 객체의 생성을 맡는다. 객체의 생성하면 가장 먼저 떠오르는 패턴은 팩토리 패턴이지만... 팩토리 패턴과는 또 다른 매력으로 다가온다. 사실 빌더 패턴이 만들어진 이유는 정확히 뭔지는 모르지만 하나 확실한것은 간결함과 뚜렷함을 얻을 수 있다. 물론 간결함 같은 경우는 클래스가 굉장히 가벼우면 더 간결하다고 느낄 수 있지만 만 말이다. 아무튼 계속 설명하면.. 첫 번째 이유는 public class Test { private String name; private int age; private String content; private String subject; public Test(String name, int age..
프록시 패턴을 알기전에 프록시라는 단어를 알아야 할듯 싶다. 프록시는 대리라는 뜻을 가지고 있다. 그러면 뭔가 대신해주는 패턴이라는건데 무엇을 대신해준다는 걸까? 예를 들어, 복잡한 일이 있다고 가정하자. 또, 그 일은 혼자서 하기 힘들다고 가정하자. 그러면 그 일을 누군가가 대신해준다면... 일은 더 수월하게 끝낼 수 있을 지도 모른다. IT세상에서는 혼자서 처리하기 힘들다기 보다는 프록시라는 객체가 있기 때문에 더 수월하다는 느낌을 받는다. 즉, 프록시에 도움을 받는 그런 기분을 받는다. 프록시 패턴에는 총 3가지 종류의 패턴이 존재한다. 가상 프록시 패턴, 원격 프록시 패턴, 보호 프록시 패턴 여기서 우리가 알아볼 패턴은 가상 프록시 패턴이다. (물론, 원격이나 보호의 내용이 전혀 다르기 때문에 이..
이 패턴의 가장 큰 특징은 이름에서 부터 알 수 있듯이 싱글 + 톤으로 하나만 존재한다는걸 알 수 있다. 그런데... 프로그래밍상에서는 객체를 여러개 생성할 수 있다. new a, new a 이런식으로요. 근데 이러면 하나가 아니라 두개 이상이 되버리니까 싱글 톤이 아니겠죠? 뭐 당연한 말이겠지만... 사실 싱글톤이라는건 메모리상에 하나만 존재한다는 뜻입니다. 그러니까 객체를 생성하려고 시도하든 뭐하든 메모리상에 하나만 존재하면 싱글톤이라는 겁니다. 근데 문제는 메모리상에는 하나니까 만들어진 객체들은 서로 공유가 됩니다. 왜냐하면 같은 객체니까. 메모리상에 주소값도 똑같기 때문에 같은 객체라고 할 수 있습니다. 또, 이 패턴은 겉보기에는 굉장히 쉽군 할 수 있지만, 사실 까면 또 까보고 싶은 양파같은 매..
팩토리... 뜻은 공장... 그렇다는건 뭔가를 만든다는 거라고 할 수 있습니다. 그러면 무엇을 만드는 걸까요? 간단히 말하면 객체를 만드는 행위라고 할수 있습니다. 근데, 자바에서는 new라는 키워드를 바탕으로 객체를 생성하고 있습니다. 그러면 그냥 new만 사용하면 되지 않을까요? 물론 그렇게 만들어도 크게 상관은 없지만... new만 사용하게 되면 객체들이 따로 놀게 됩니다. 왜냐하면 A라는 클래스를 생성하고 또 B라는 클래스를 생성한다고 가정하죠. 이 둘이 연관관계가 있다는 걸 알리기 위해서는 A a; 이런식으로 인스턴스로 만들거나 이 인스턴스를 매개변수화 시키던가. 아니면 상속을 받아야 될겁니다. 만약, A와 B의 상하 관계가 없는 거라면 어떨까요? 상속은 사용할 수 없습니다. 그러면 우리가 선택..