자바프로그램 테스트를 위해서 주로 JUnit을 사용합니다. Spockframework도 있는데 각각의 장단점이 있는 것 같습니다. JUnit5와 Spockframework에 관해서 정리합니다. JUnit5란?3개의 하위 모듈의 서브 프로젝트로 구성됨 JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage JUnit Platform : 테스트 엔진, Console Launcher, JUni4 기반 러너 등 테스트 프레임워크를 시작하기 위한 기초적인 것을 제공한다.JUnit Jupiter : JUnit5를 위한 테스트 엔진 및 API를 제공한다.JUnit Vintage : JUnit3, 4를 위한 테스트 엔진을 제공한다. 하위 호환성을 위해 존재하는 프로젝트. ..
JPA 애플리케이션을 테스트 하기 위해서 @DataJpaTest를 사용할 수 있습니다.@Component 빈들은 ApplicationContext에 로그되지 않고 @Entity, JPA repositories만 구성됩니다. UserRepositoryTest@RunWith(SpringRunner.class) @DataJpaTest @TestPropertySource(locations = "classpath:application.properties") public class UserRepositoryTest { @Autowired private UserRepository userRepository; @Test public void findByUsername() { String username = "papa"..
빠르고 단순한 HikariCP 설정하기 Spring Boot 2.0부터 tomcat에서 HikariCP로 기본 Connection Pool이 변경됐다. application.yml 파일에서 아래와 같이 HikariCP를 설정한다. spring: datasource: type: com.zaxxer.hikari.HikariDataSource url: jdbc:mysql://localhost:3306/testdb?useSSL=false&characterEncoding=UTF-8&allowMultiQueries=true username: tester password: tester hikari: maximum-pool-size: 100 minimum-idle: 10 Spring Boot 1.x에서 spring.d..
아마존닷컴이 9억 7천만달러(한화 1조 864억, 2018년 7월 30일 기준)에 인수한 트위치의 한국지사 트위치코리아 신임대표로 이하경 전 게임로프트 코리아 대표가 선임됐다.한글과 컴퓨터, 엔씨소프트에서 해외사업과 IR 등을 담당했다고 합니다. 트위치의 게임방송 스트리머로 유명한 '닌자' 타일러 블레빈스가 CNBC에 나와 인터뷰한 내용이 대단하네요최근 한달 50만달러(한화 약 5억)라고 하는데 수입 만큼 선행적인 기부도 많이 하네요게임을 별로 안해서 포트나이트란 게임을 처음 들어봤는데 게임 방송 시청률이 꽤 높습니다. 연예인 홍진영도 트위치에서 배틀그라운드로 게임 방송을 했다고 하네요트위치 대단한 서비스입니다 ^^
객체 지향 설계 원칙을 정리한다. 설계 원칙 5개의 첫 철자를 따서 SOLID라 칭한다. SRP 단일 책임 원칙(Single Responsibility Principle) 한 클래스는 단 한가지의 변경 이유만을 가져야 한다. 책임이란건 변경을 위한 이유인데 한 클래스가 둘 이상의 책임을 맡는다면 한 책임에 대한 변경이 다른 책임을 충족하는 클래스의 능력을 떨어뜨리거나 저하시킬 수 있다. 이해하기 쉽게 여러 가지 기능을 가진 클래스를 만들지 말자. 다른 기능 수정하다가 정상적인 기능을 했던 메서드가 원치 않는 동작을 할 수 있다 주의할 것은 자주 변경되지도 않는데 SRP 충족시킨다고 클래스를 잘게 쪼개다가는 불필요한 복잡성이란 악취를 풍기게 한다... 그냥 복잡해진다고 하자 OCP 개방 폐쇄 원칙(Open..
HotFrameworks라는 사이트를 알게되었다.점수 측정방식이 궁금해서 FAQ를 보니 github repository star 개수와 stackoverflow 질문을 평균내서 점수화한다.github 별점 1위는 100점.. 2위는 99점... FAQ에 나와있는 것처럼 단순하네 ^^맹점이 있어서 전체를 비교하기보다 언어별로 비교해서 보는게 좋다 언어별로 선택해서 어떤 프레임워크가 점수가 높은지 볼 수 있다. 참고http://hotframeworks.com/
2013년 12월 springframework 4 출시 후에 오랜만에 발표한 스프링프레임워크 5(2017년에 9월 출시)의 새로운 기능을 알아봅시다. Upgrade to Java SE 8 and Java EE 7최소버전이 Java SE8, JAVA EE7 이고 JDK 9에 완전히 호환된다. Reactive programming model비동기, 논블럭킹이고 backpressure로 데이터 흐름을 조절할 수 있고 적은 쓰레드로 수직확장이 가능해서 자원 효율적인 리액티브 프로그래밍 모델 Programming with annotationsWebMVC의 @Controller 프로그래밍 모델과 같다. 리턴타입만 reactive type인 Flux(0..N element), Mono(0..1 element)이다. ..
LIGHTBEND CTO이자 쉽게 리액티브 분산 시스템을 만들 수 있는 akka라는 툴킷을 만든 Jonas Bonér와 Viktor Klang가 기고한 글 리액티브 프로그래밍 Vs 리액티브 시스템(원문 : Reactive programming vs. Reactive systems) 을 먼저 읽는게 도움이 많이 됩니다. 리액티브 시스템(Reactive System)리액티브는 일련의 설계 원칙이고 리액티브 시스템은 "리액티브 선언문"에 정의된 바와 같이 오늘날 응용프로그램들이 마주한 증가하는 요구사항(밀리초의 빠른 응답, 100% 가동률 등등)들을 충족할 수 있도록 잘 준비된 현대적 시스템을 구축하기 위한 일련의 아키텍쳐 설계 원칙들입니다.리액티브 선언문에서는 응답성이 좋고 장애가 발생하더라도 응답을 유지하..
java 버전 목록 확인]$ /usr/libexec/java_home -VMatching Java Virtual Machines (3): 10.0.1, x86_64:"Java SE 10.0.1"/Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home 9.0.1, x86_64:"Java SE 9.0.1"/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home 1.8.0_73, x86_64:"Java SE 8"/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home java 버전 설정export JAVA_HOME=$(/usr/libexec/ja..
다음과 같은 html 태그를 사용한다. thymeleaf 사용 중 아래와 같은 오류가 발생한다.org.xml.sax.SAXParseException: The element type "link" must be terminated by the matching end-tag "". application.yaml 설정을 아래와 같이 변경함.spring: thymeleaf: mode: LEGACYHTML5 properties인 경우 아래와 같이 변경함.spring.thymeleaf.mode=LEGACYHTML5 SAXParseException when element in html5 is selfing-closing tags ( ) - Spring boot 1.4.3
python의 beautifulsoup이 있다면 java에는 비슷한 jsoup으로 웹 스크래핑을 하고 있습니다 jsoup 1.9.2에서 1.10.2로 업그레이드 하니 한글 파라미터의 경우 중복 인코딩되는 경우가 있음실제 소스에도 encode 부분이 다음과 같이 변경되었다. jsoup 1.9.2private static String encodeUrl(String url) { if(url == null) return null; return url.replaceAll(" ", "%20"); } jsoup 1.10.2 /** * Encodes the input URL into a safe ASCII URL string * @param url unescaped URL * @return escaped URL */ ..
java object mapping을 위한 테스트 객체에서 다른 객체로 변환 시 수동, BeanUils, ModelMapper의 성능을 비교해봤습니다. 성능 비교/** * 객체 변환 테스트 */ @Test public void testObjectMapper() { StopWatch stopWatch = new StopWatch(); CarMeta carMeta = new CarMeta(); carMeta.setBrandId("1"); carMeta.setModelGroupId("1"); carMeta.setModelId("1"); carMeta.setGradeId("1"); carMeta.setHashId("1"); carMeta.setName("TEST"); carMeta.setIsCalculated(..
네이버 쇼핑에서 물건을 구매하고 구매평을 쓰려고 하는데 붙여넣기가 안된다.네이버 구매평을 한번에 써보자. chrome에서 상단 메뉴 중 보기 > 개발자 정보 > 개발자 도구를 선택한다. 오른쪽 화면과 같이 개발자 도구가 나온다. 오른쪽 아래 콘솔에 다음과 같이 입력한다. var arrTextArea = document.getElementsByTagName("textarea");for(var i=0; i< arrTextArea.length;i++){arrTextArea[i].value = "배송 빠르고 물건 좋습니다."}; 상품평 일괄 등록 끝
Docket 셋팅아래와 같이 셋팅을 하면.useDefaultResponseMessages(true) 다음과 같은 기본 응답 메시지가 나온다. 아래와 같이 셋팅을 해도 .globalResponseMessage(RequestMethod.GET, newArrayList(new ResponseMessageBuilder() .code(500) .message("500 message") .responseModel(new ModelRef("ErrorResult")) .build())) 아래와 같이 나오지 않는다. Operation 하나에 다음과 같이 설정을 하니@ApiResponse(code = 500, message = "Error", response = ErrorResult.class)그 다음부터 동작을 잘함 ^..
cwebp.exe를 이용해서 png를 webp로 변환 //the "cwebp.exe"'s path String str1 = "cwebp"; //the webp picture's path String str2 = "/Users/shuiky/Documents/bg_list_right_orange.9.png"; //the converted picture's path String str3 = "/Users/shuiky/Documents/bg_list_right_orange.9.webp"; String[] args = [str1, str2, "-o", str3]; try { Runtime.getRuntime().exec(args); } catch (IOException e) { // TODO Auto-genera..
AsciiDoc을 html이나 pdf로 변경할 때 asciidoctor-maven-plugin 또는 asciidoctor-gradle-plugin을 사용한다. 설치 org.asciidoctor asciidoctor-maven-plugin 1.5.2 ... 사용법 ... output-html (1) generate-resources (2) process-asciidoc (3) 1. unique id 셋팅2. 단계 명시3. asciidoctor maven plugin goal 설정(configuration options)sourceDirectorydefaults to ${basedir}/src/main/asciidocsourceDocumentNamean override to process a single s..
plain text로 웹사이트나 블로그를 만들 수 있는 jekyll 에서 사용하는 Markdown. Markdown은 John Gruber(1973년생)가 2004년 만든 lightweight markup language 이다. 일반 텍스트 문법으로 설계되어 읽거나 쓰기 쉽고 Markdown Tool(Markdown은 일반 텍스트 문법과 소프트웨어 툴이라는 2가지의 의미가 있음)을 이용해서 HTML이나 다른 포맷으로 전환이 가능하다. 종종 readme 파일 등에 쓰인다.Markdown의 최대 장점은 가독성이다. tag가 포함된 Markup이나 폰트, 글자크기 등 서식을 위한 부분이 포함된 포맷보다 Markdown은 가독성이 한층 향상된다 전환하는 툴은 Perl 스크립트로 작성되었다.다음은 일부 문법들이다..
오픈소스를 많이 사용하면서 헷갈려했던 부분들을 정리했다.소프트웨어 라이센스 종류가 다양하지만 주로 사용하는 라이센스들만 간략히 소개한다. MIT License미국 매사추세츠 공과대학교에서 개발한 라이센스로 개조한 제품을 반드시 오픈소스로 배포해야한다는 규정이 없다.GNU 일반 공중 라이센스의 엄격함을 피할 수 있어 사용자들에게 인기가 많다고 함.대표적 소프트웨어로는 X 윈도우 시스템이 있다. GPL(General Public License)리차드스톨만이 만든 라이센스로 공개운영체계인 GNU 프로젝트로부터 제공되는 소프트웨어에 적용되는 라이센스이다소프트웨어를 자유롭게 공유하고 내용을 수정하도록 보증하므로 사용자들이 GPL을 이용하여 소프트웨어의 배포판을 만들어 배포할 수 있다.상업적으로 이용할 수도 있지만..
문제 ie9 등에서 ajax 호출 시 응답을 json으로 받는 경우 파일 다운로드 현상이 발생함. 해결spring-servlet.xml을 다음과 같이 설정함 Controller에 jsonView를 사용하도록 설정하고 데이터를 추가함.ModelAndView mav = new ModelAndView("jsonView"); mav.addObject("result", ticketResponse); return mav; 참고http://bryan7.tistory.com/m/post/173
문제아래와 같이 replacer에서 ${project.build.directory}의 해당 파일을 못 찾음] --- replacer:1.5.3:replace (default) @ web ---[INFO] Replacement run on 0 files. 원인maven-war-plugin 에 build directory 복사가 package 단계에 동작 해결아래와 같이 설정함 maven-war-plugin 2.6 src\main\webapp\WEB-INF\web.xml prepare-war prepare-package exploded default-war package war ${project.build.directory}/${project.build.finalName} 참고https://code.goog..