이제 문서를 빌드해보자. 그전에 pom.xml에 다음을 작성하자. org.asciidoctor asciidoctor-maven-plugin 1.5.8 generate-docs prepare-package process-asciidoc html book org.springframework.restdocs spring-restdocs-asciidoctor ${spring-restdocs.version} maven-resources-plugin 2.7 copy-resources prepare-package copy-resources ${project.build.outputDirectory}/static/docs ${project.build.directory}/generated-docs 만약에 버전이 맞지 않는..
오랜만에 작성하는것 같다. 아무튼 다시 작성하게 되어서 기쁘다.! 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..
모듈(module)은 역사적으로 프로그래밍이라는 관점에서는 기본적으로 본체에 대한 독립된 하위 단위라는 필연적인 개념의 큰 틀을 따르고 있지만 본체와 모듈 간에 가지고 있었던 문제들을 해결해 나가는 과정에서 발전하였다. 모듈에 가장 큰 영향을 미쳤던 클래스 그리고 라이브러리가 향상됨에 따라 점차 발전하였다. 이러한 지속 가능성은 이것의 가장 큰 장점 중 하나이다. 초기에는 분리된 독립성의 모듈로 도입되었으나 점차로 객체화, 캡슐화, 모듈화 프로그래밍 기법 등 여러 기능들이 추가되면서 점차적으로 영역이 나뉘어가고 있다. 그러나 이로 인하여 모듈성을 제대로 반영하지 못하고 있다는 비난을 받을 수도 있다. 한편 이러한 비난은 모듈 시스템, 모듈 프로그래밍이 갖는 현재의 한계를 인식하고 보다 안정적으로 발전하기..
제네릭은 왜 사용할까? 제네릭은 JDK1.5부터 새롭게 등장했다. 그러면 제네릭이 도입되면서 어떤것이 바뀌었는지 고민해보자. 제네릭을 사용하면 타입 안정성이 증가하고, 타입체크와 형 변환을 생략할 수 있어서 코드가 간결해 진다고 한다. 과연 사실일까? 제네릭을 사용하는 대표적인 클래스로는 List가 있다. List list = new ArrayList(); 이 리스트는 어떠한 값이든 저장할 수 있다. List list = new ArrayList(); list.add(2); list.add("Hello"); list.add(100L); list.add(1.5); int, string, long, double다양한 타입이 들어왔다. 이것을 출력해보자. for (Object object : list) { S..
내가 이 책을 리뷰한다고 했을때, 막막했다. 왜냐하면 나는 자바 개발자이며, 이제 막 회사에 입사한 사회 초년생이기 때문이다. 나는 이 책이 단순한 파이썬 책인줄만 알았다. 근데 아니였다. 이 책은 기본서가 아니다. 그래서 파이썬으로 뭔가를 코딩해볼려고 하는 사람들에게는 추천하고 싶지 않다. 왜냐하면 이 책은 단순히 코딩이라는 단어로 포장할 수 있는 그런 책이 아니다. 그것보다 훨씬 심오하고 어렵다. 그렇다면 이 책은 어떤 사람들이 읽어야 할까? 책 제목에서 알 수 있다싶이 진지하게 파이썬을 학습할 생각이 있는 사람들에게 추천한다. 그러니까 가볍게 파이썬을 학습할 생각을 가진 사람은 이 책을 읽지 않는것이 정신 건강에 좋을거라 생각한다. 파이썬은 인기 프로그래밍 언어중 하나이다. 사실 파이썬이 각광받기 ..
자 드디어 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..
나머지 연산 3 % 2 = 1 말한다. 위 식은 다음과 같다. ((2%2) + (1%2) %2 ) => (0 + 1) % 2 => 1 곱하기도 가능하다. ((3%2) * (1%2) %2 ) => (1 * 1) % 2 => 1 하지만 아쉽게도 나눗셈은 되지 않는다. 사실 나머지 연산을 중심으로 하는 문제는 거의 없다. 다만 이것은 주로 숫자가 너무 커서 나눠야 되는 상황에 유용하다고 한다. 대표적인 문제 www.acmicpc.net/problem/4375 4375번: 1 2와 5로 나누어 떨어지지 않는 정수 n(1 ≤ n ≤ 10000)가 주어졌을 때, 1로만 이루어진 n의 배수를 찾는 프로그램을 작성하시오. www.acmicpc.net - 1로만 이뤄졌다는 뜻은 1, 11,111,1111을 말한다. 약수..
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..
프로세스와 쓰레드 프로세스 : 실행중인 프로그램 쓰레드 : 프로세스안에서 작업을 수행 jvm => 조그만 os 거대 os(맥, 위도우,리눅스)안에 실행하는 프로그램(java)에서 사용하는 os 어떻게 보면 jvm이 os라 생각해도 무방하다고 생각한다. 하얀것이 프로세스 , 파란것이 쓰레드 쓰레드들은 각자의 영역을 지키면서 프로세스의 일을 함께 처리. 멀티 테스킹 vs 멀티 쓰레딩 멀티 테스킹 : 여러 가지 프로그램을 동시에 실행 하는 것을 의미한다. 멀티 쓰레딩 : 하나의 프로그램을 수 많은 쓰레드로 실행하는 것을 의미한다. CPU의 코어 => 쓰레드의 갯수 멀티 쓰레딩의 장 단점 - cpu의 사용률을 향상 시킨다. - 자원을 효율적으로 사용할 수 있다. 쓰레드도 어떻게 보면 하나의 프로그램이라고 할 수..
I/O 입력과 출력을 뜻하는 용어로, 입출력은 컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고받는 것을 말한다. 스트림/버퍼/채널 스트림 스트림은 흐름이라는 뜻을 가지고 있다.(람다의 스트림과 의미는 같을지도 모르겠지만 전혀 다른 용어이다.) 간단히 말하면 입력에서 출력으로 흐르는 흐름을 뜻한다. 그냥 통로 입력이 출력으로 가는 통로라고 생각해도 될것 같다. 입력에서 출력으로 가기 때문에 단방향으로 데이터 전송이 된다. 왜냐하면 출력에서 입력으로 가는것은 말도 안 되기 때문이다. 만약에, 한 개가 아니라 여러개를 동시에 보낸다고 한다면 어떻게 될까? 이런식으로 큐 형식(FIFO)으로 진행이 된다는 것을 알 수 있다. 즉, 먼저 입력받은것이 가장먼저 입력되는 시스템인거죠. 버퍼 그렇다면 버퍼는 ..
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의..