본문 바로가기

전체

StreamingResponseBody 사용시 주의점 파일 다운로드 API 기능을 개발하는 과정에서 삽질한 경험를 공유드립니다 ㅎ 목적​Streaming 형태의 Response로 제공하고 싶었습니다.그래서 구글링해보니 Spring에선 아래 3가지 Response를 제공합니다.​참고 : Spring 4.2 이상- ResponseBodyEmitter- SseEmitter- StreamingResponseBody​이 중 StreamingResponseBody는 비정형화된 Byte 응답을 Streaming형태로 줄 때 사용합니다.StreamingResponseBody를 이용해 Controller와 Service는 아래와 같이 구현했습니다.​Controller @GetMapping("/sample") public StreamingResponseBody downloa..
[Hadoop] 여러 파일들을 하나의 압축파일로 만들기 단순 Java로 로컬 디스크에 Zip파일 만드는 버전- http://seongtak-yoon.tistory.com/74 목적- 여러 디렉토리에 있는 spark로 partition된 파일들을 hadoop 파일 시스템을 통해 읽은 후 하나의 zip파일로 만들기 @Test public void testRead다른디렉토리HdfsFilesToOneZipFile() throws Exception { String hdfs = PropertyUtils.getValue("hdfs.url"); // hdfs://sample:port // 읽을 디렉토리 및 zip에 저장할 파일명 정보 Map fooSaveInfoMap = new HashMap(); fooSaveInfoMap.put("path", "/sample/foo");..
[Java] 여러 파일을 묶은 하나의 압축파일(Zip) 만들기 배경- 여러 File들을 읽어서 하나의 압축 파일로 만들 수 없을까? 참고- http://www.baeldung.com/java-compress-and-uncompress Junit Test 환경에서 로컬에 파일쓰기 @Test public void testWriteLocalZipFile() throws Exception { String path = "D:\\temp\\yst"; FileOutputStream zipFileOutputStream = new FileOutputStream(path + "/files.zip"); ZipOutputStream zipOutputStream = new ZipOutputStream(zipFileOutputStream); ZipEntry zipEntry = new Zip..
[Maven] 특정 Test만 따로 수행하기 Java에서 jUnit으로 일반적으로 테스트코드를 구현하기 때문에 대부분 junit으로 디버그를 수행하거나 Maven test로 TC를 수행합니다.이 때 Maven에 전달한 환경설정에 맞춰 특정 테스트만 따로 수행하고 싶을 때가 있습니다. 그럴땐... Maven 명령어에 -Dtest=패키지.클래스명#메서드명 를 이용합니다. 어 그런데 저의 경우 모듈이 1개가 아닌 상위모듈, 하위모듈로 구성된 Maven이었습니다. parentㄴ child-apiㄴ child-batch 라고 프로젝트가 구성되어있다면... 아마 이미 Maven이 구축된 상태라면 -pl 옵션을 함께 쓰고 있을것 같습니다. 명령어mvn -pl=parent,child-batch clean compile test -P alpha -U -Dtest=..
[Json] Jackson을 이용해 추상, 인터페이스 객체 별로 구현체 구분하기 Json String을 구현체별로 매핑할 수 없을까? - String 형태의 Json을 구현체 모델로 매핑하는 방법은 쉽습니다. - Json의 프로퍼티 이름과 모델의 필드(Setter/Getter) 이름을 자동으로 매핑해주기 때문입니다. ㄴ 기존 사용 방법은 생략하겠습니다. SampleModelImpl result = new ObjectMapper().readValue(json, SampleModelImpl.class); - 하지만 인터페이스나 추상클래스 타입이라면 이야기는 달라집니다. 왜냐하면 구현체가 아니다보니 어떤 하위클래스들을 사용할지 모르기 때문입니다. - 이를 해결하기 위해 Jack에서 다양한 어노테이션들을 제공해주고 있습니다. - A라는 인터페이스가 있고 B, C라는 구현체가 있다고 가정하면..
[Maven] local jar를 dependency 추가하기 Maven의 pom.xml에 외부 Dependency를 추가할 땐 거의 대부분 Maven 원격 Repository에서 받는다. (회사 저장소나 다른 저장소를 이용하는 경우도 있음) 그러나 가~아끔 특정 jar를 Maven dependency로 추가해야하는 경우가 있는데 어떻게 해야할까? 구글링을 해보면 다양한 방법이 있는데 저는 로컬 저장소를 이용해 dependency를 추가하는 방향으로 설정했습니다. pom.xml ... ... jar ... ... ... sample-repository local repository file://${project.basedir}/lib ... ... ... - repository태그로 로컬 저장소를 추가합니다. (id와 name은 마음대로하시면 됩니다.) - 이 때 ..
[Spring] Stream 형태로 Response 응답 주기 (feat. MyBatis, Observer) 환경 Spring Version : 4.2 이상 MySQL + MyBatis 문서 Http Stream Return은 총 3가지가 있는듯하다. (Spring 4.2부터) - ResponseBodyEmitter : https://docs.spring.io/autorepo/docs/spring-framework/4.3.5.RELEASE/javadoc-api/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitter.html - SseEmitter : https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/mvc/meth..
[MySQL] Replace 함수와 Case 기능 혼합해서 사용 (replace + case) replace에 대한 상세한 내용은 아래 블로그를 참조- replace(대상컬럼명[혹은 대상문자], 찾는문자, 바꿀문자)- https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_replace select + replace 샘플 쿼리) SELECT url, REPLACE(url , "foo=가","bar=가")FROM sample; ----http://www.sample.com?foo=가&id=2http://www.sample.com?bar=가&id=2 update + replace + case 샘플 쿼리) UPDATE sample Seturl = CASE WHEN url LIKE '%foo=가%' THEN REPLACE(url , ..
[IntelliJ] Lombok 사용시 주의 사항 Lombok이라는 라이브러리를 사용하면 @ToString, @Slf4j, @Data와 같은 간편한 기능들을 사용할 수 있습니다. Eclipse에서 작업할 땐 Lombok jar를 직접 수행하여 IDE를 지정하거나 디펜던시에 넣으면 되는데IntelliJ는 Eclipse와 적용방법이 달랐습니다. 1. 플러그인을 설치하자File > Settings > [IDE Settings] Plugins > Browse Repositories ... > Lombok 2. (중요) 컴파일러 설정File > Settings > Compiler > Annotaion Processors > 체크 : Enable annotation processing 애노테이션 프로세싱을 활성화하지 않으면 컴파일 에러가 발생한다.- 참고 : ht..
[PHP] 메모리 사용량을 통해 memory leak 찾기 PHP를 배치 스크립트처럼 사용하다보니 foreach문에서 리스트 건수가 많아질 수록 서버 메모리 사용량이 올라가는 이슈를 경험했습니다.자주 일어나는 현상은 아니었기에 당황스러워서 memory leak의 원인을 찾을 필요가 있었습니다. 버전 : PHP 5.2.5 메모리 사용량을 알려주는 함수 - memory_get_usage() : http://php.net/manual/en/function.memory-get-usage.php 사용법ex)의심가는 코드의 line 상하에 echo나 log로 디버깅하기 위한 준비를 하면됩니다. foreach ($list as $item) { echo memory_get_usage()." Before \n"; sample_function(); // or Call Obejct..