728x90
반응형

Java 88

QueryDSL 사용하기

JPA를 사용하면서 QueryDSL을 셋팅하고 사용하는 부분에 있어서 매번 헷깔려 정리한다. QueryDSL을 사용하기 위해서 build.gradle 파일에 아래의 내용을 추가 해 준다. plugins { ... id 'idea' id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' ... } dependencies { ... implementation 'com.querydsl:querydsl-apt:4.1.4' implementation 'com.querydsl:querydsl-jpa:4.1.4' ... } ext { querydslSrcDir = 'src/main/generated' queryDslVersion = '4.1.4' } configuratio..

Java/Spring 2019.08.08

파라미터에 따라 특정 변수에 값 Set 하기

Java로 Entity를 만들고 멤버 변수로 1 ~ 31일을 만들어 둔 다음 넘오는 날짜에 따라 특정 날짜 변수에 값을 담는 작업을 하다 알게 된 내용이다. 역시 새롭게 알게 된 내용이라 정리 차원으로 올린다. MontTimeTable Entity는 아래와 같다. @Entity @EntityListeners(value = {AuditingEntityListener.class}) @Data @Table(name = "month_timetable") public class MonthTimetable { @Id @Column @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column private Integer policy_inst..

Java/Spring 2018.10.24

JPA QueryDsl 에서 Group By Count 값 가져오기

JPA, QueryDsl 쓰기 참 힘들다. 그래도 하나 하나 어렵게 해 나가고 있는데 오늘은 또 Group By한 Count 개수를 반환하는 것을 만든 삽질 내용을 올린다. 리파지토리 단 소스는 아래와 같다. @Override public QueryResults getBusinessTotalCount() { QUser user = QUser.user; return from(user).where(user.userType.eq(UserType.B2B)).groupBy(user.platform).select(user.platform, user.platform.count()).fetchResults(); } 그리고 가지고 온 내용을 가지고 맵으로 이쁘게 정렬해서 반환해 주면 된다. public Map getBu..

Java/Spring 2018.09.28

RestTemplate에서 PUT으로 파라미터 전송하기

http로 값을 전송 하면서 보통 GET, POST를 많이 쓰고 PUT 으로는 전송을 잘 안하게 되는데, PUT으로 받아야 하는 API를 만들다가 값이 잘 전송이 안된다는 것을 알게 되었고, 이럴 때 어떻게 값을 전송해야 하는지 삽질의 결과물을 남겨 둔다. 보통 postman을 사용하여 값을 전송하는데 POST일 경우에는 body의 Typ을 form-data 또는 raw를 하게 된다. PUT일 경우에도 form-data 로 전송하니 값을 받을 수 없어서 이리 저리 확인해 보니 PUT일 경우에는 다음과 같이 전송 해야 한다. 이와 마찬가지로 Spring에서 RestTemplate를 이용하여 PUT 파라미터를 전송하게 될 경우 아래와 같이 하여야 한다. MultiValueMap body = new Linke..

Java/Spring 2018.09.13

Jackson ObjectMapper에서 json data를 Map이 아니라 Object로 받기

API 통신을 하면 보통 데이터 외에 Code나 Message가 같이 오고, 필요한 데이터는 한번 가공해서 받아야 한다. 그런데 이렇게 받게 되는 경우 안의 데이터가 무조건 HashMap으로 받아지게 된다. 이런 경우에 원하는 Object로 받기 위해 제네릭을 사용해 보았지만 역시 맵으로만 받아지게 되어서 구글링을 통해 해결하였다. 다음과 같은 방법으로 사용하면 된다. import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.web.client.RestTemplate; import com.fasterxml.jackson.core.type.TypeReference; String response = restTemplate.p..

Java/Spring 2018.09.12

[삽질] stomp, sockjs를 이용하여 websocket 연결 시 info 가 404로 나오는 경우

WebSocket을 이용하여 특정 내용을 처리하는 로직을 개발 중에 삽질한 내용을 정리 차원에서 올린다. 클라이언트는 SockJS와 stompClient를 이용하였고, 서버는 Spring에서 기본적으로 정리한 내용을 크게 바꾸지 않은 상태로 코딩 하였다. 전반적으로 코드의 내용은 https://spring.io/guides/gs/messaging-stomp-websocket/ 에서 나오는 내용과 거의 다르지 않다. 다만 해당 내용을 코딩 중에 sockjs에서 websocket 서버의 "endpoint/info?timestamp" 와 같은 주소를 찾지 못하는 경우가 발생 했다. 이로 인해 서버의 특정 모듈 Dependency가 잘못 되던가, 알지 못하는 문제로 인해 발생 하는 것인줄 알고 프로젝트를 Spr..

Java/Spring 2018.03.13

Java8의 for, stream foreach, parallelStream foreach 간단 속도 테스트

Java8에 들어간 stream, parallelStream이 좋다는 이야기만 듣고 대충 개념만 이해한 상태에서... "그냥 좋겠지"란생각으로 쓰려다... 간단하게 테스트 해보고 정리 ^^ 참고로 로컬 PC에서 돌렸으며, 로컬 PC의 물리 cpu 코어 개수는 4개이다. import java.util.ArrayList; import java.util.List; public class StreamTest { public static void main(String[] args) throws InterruptedException { List intList = new ArrayList(); // 테스트할 loop의 개수... for (int i = 0; i { if(integer % 1000 == 0) { Sys..

Java 2017.02.14

원격지의 이미지 파일을 읽어서 원하는 곳에 업로드 하기

보통 개발 시에 파일 업로드를 하려 하면 html form에서 multipart/form-data로 파일을 선택해서 업로드 하고, 이를 서버 단에서 받아 처리를 하게 된다. 하지만 이런 방법이 아니라 원격지의 이미지 파일을 읽어온 후 필요 시 리사이지, 그리고 나서 다시 다른 곳에 있는 서버로 파일을 업로드 하는 기능이 필요해 개발을 하다 보니, 많이 사용되는 방법이 아니기에 정리해 둔다. import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.net.URL; import java.nio.file.Files; impor..

Java 2017.02.09

이미지 파일 업로드 오류 수정 기록...

구매후기 이미지 업로드에서 오류가 나고 있어서 해당 내용을 검토 중에 알게 된 내용을 정리합니다. 기본적으로 아래와 같은 방식으로 업로드가 되고 있습니다. 브라우저 -> php -> Java 그런데 문제는 어느 한쪽의 문제가 아니라 php, Java 둘다 문제가 발생... 그리고 문제의 원인은 둘다 Version Up이였습니다. 1. 먼저 Java Error Message가 "Required MultipartFile parameter 'file' is not present" 라고 발생. 구글링 하니 http://stackoverflow.com/questions/25830503/spring-mvc-http-status-400-required-multipartfile-parameter-file-is-not-..

Java/Spring 2016.11.08

Spring Batch(스프링 배치)에서 작업 시간이 길어지는 경우

Spring Batch를 그닦 많이 써본 경험이 없지만, 특정 요구 사항이 있어서 개발하게 되었습니다.작업을 하면서 겪은 오류를 어떻게 해결 했는지 History 및 Backup을 위해 적어 둡니다. 보통 배치는 Reader와 Writer로 구분합니다.특정 정보를 Reader에서 읽어 들여서 필요한 내용을 가공하고 Writer에서 필요한 행동을 합니다. 그런데 Reader에서 정보를 읽어 들이고 가공하는 시간이 오래 걸리면서 Writer에서 DB Connection을 못 찾게 되고, Writer 작업을 수행하지 못하게 되는 경우가 발생했습니다. 구글링을 한 결과 "autoReconnect 값을 true로 해라", "validationQuery를 날려라" 등등이 나왔지만 유효하지 않은 해결책이였습니다. 결..

Java/Spring 2016.10.27

List에서 특정 요소 제거하기

List에서 불필요한 item을 제거하기 위해 loop를 돌리게 되면 제거 후 size가 맞지 않는 일로 인해 null point exception을 만나기가 쉽다. 이럴 경우 제대로 된 방법이 무엇인지는 모르지만... 실제로 돌려보고 Exception이 나지 않은 방법을 찾아 정리 차원에서 남겨 둔다. 검색해서 참고한 URL은 https://stackoverflow.com/questions/17279519/removing-items-from-list-in-java/17279565#17279565?newreg=0dee1db24aaa4154a0cebdc173ed5aeb List toRemove = new ArrayList(); for(Object a: list){ if(a.getXXX().equalsIgn..

Java/Etc 2016.02.11

바코드 인식기 만들기

급하게 바코드 인식 관련 프로그램을 만들다 보니 오픈소스를 검색하게 되었고 Google에서 제작한 zxing 이란 것을 발견하게 되었습니다. (GitHub : https://github.com/zxing/zxing) 해당 코드와 관련된 포스팅들이 여럿 나왔지만 다 조금 씩 부족한 부분들이 있어서 정리 차원에서 올립니다. 물론 제가 올린 내용도 부족한 부분이 많습니다. 1. 외부 앱을 이용한 방법 이미 외부 앱을 이용해서 구동하는 방법은 잘 정리된 곳이 있습니다. 관련 포스팅은 http://code.tutsplus.com/tutorials/android-sdk-create-a-barcode-reader--mobile-17162 를 참고하시면 됩니다. 간단하게 정리하자면 Github에서 다운로드 받은 소스 ..

Java/Android 2015.05.13

MySQL의 zero date("0000-00-00 00:00:00") 값이 Date 값으로 넘어오지 않는 경우

MySQL에 DateTime 필드에 값이 없을 경우 기본 값으로 "0000-00-00 00:00:00" 들어가는 경우가 있다. 이럴 경우 쿼리해 온 값이 Java의 Model 객체에 Setter로 값을 넣는 과정에서 에러가 발생한다. 에러 메시지는 다음과 같다. "Cannot convert value '0000-00-00 00:00:00' from column 4 to TIMESTAMP" 뭐 '0000-00-00 00:00:00' 값은 timestamp 값으로 바꿀 수 없다는 메시지 같은데... 이럴 경우 어떻게 해결해야 하나 고민하다가 구글링을 통해 알게 된 내용을 정리한다. 보통 Model 객체의 Setter를 아래와 같이 작성하게 된다. setter에서 Date 객체로 받아야 하는데 값을 넘겨줄 수..

Java 2015.04.06

이클립스에서 jquery.min.js 파일의 오류 제거하기

이클립스 사용하다 보면 jquery.min 파일에서 "Missing semicolon" 이라는 오류가 뜨게 된다.이럴 경우 다음과 같은 방법으로 예외 처리를 하게 되면 된다. 출처 : http://metalbird.tistory.com/59 ============================================================================================= query min.js 의 경우 이상없이 작동하나 에러가 표시되게 된다. 이게 싫어서 일반 jquery*.js로 쓰기도 했으나 간단하게 해결할수 있는 방법이 있어서 메모한다. 에러 예외처리에 추가하는것이다. Project > Properties > JavaScript > Include Path > 아래..

Spring에서 MessageUtil 사용하기

다국어 사용을 위해서 그동안 Struts2 기반 MessageUtil만 사용하다가 Spring 기반으로 변경하기 위해 구글링, 작업한 내용을 정리 차원에서 올립니다. 1. applicationContext.xml에 다음 내용을 추가 /WEB-INF/messages/messages 2. MessageUtil import java.util.Locale; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.springframework.context.support.MessageSourceAccessor; import org.springframework.web.context.reques..

Java/Spring 2015.02.24

메소드 파라미터(parameter) 및 어노테이션(Annotation) 정리

출처 : http://warmz.tistory.com/727 1. HttpServletRequest, HttpServletResponse 2. HttpSession 3. Local - java.util.Locale 지역 정보 4. InputStream, Reader - HttpServletRequest의 getInputStream(), Reader 5. OutputStream, Writer - HttpServletResponse의 getOutputStream(), Writer - 서블릿 형태로 만들때 사용한다. 6. @PathVariable - @RequestMapping의 URL {} 부분의 패스 변수를 받는다. 만약 타입이 틀린 값이 들어오면 HTTP 400 - Bad Request 가 전달 된다.?..

Java/Spring 2015.02.24

attrs.xml 파일에 정의 된 내용 사용하기

스마트폰에서 Pull to Refresh를 사용하는 것은 매우 흔해진 일이고, 그래서 안드로이드에서도 Pull to Refresh를 구현한 오픈소스가 있다. 현재 프로젝트에서는 handmark.pulltorefresh liabrary를 이용하는데 리스트를 당겼을 시 나오는 폰트의 색깔을 변경하는 것이 어떻게 하는 것인지 몰랐다. 해당 라이브러리의 소스를 분석해서 찾아 들어가 보니 아래와 같은 소스를 만날 수 있었다. // Text Color attrs need to be set after TextAppearance attrs if (attrs.hasValue(R.styleable.PullToRefresh_ptrHeaderTextColor)) { ColorStateList colors = attrs.get..

Java/Android 2013.11.02

listView 내에서 각 row 객체에 접근하기

보통 android에서 listView를 생성하는 방법은 ArrayAdapter에서 getView를 통해 하나씩 하나씩 각각의 position 정보를 리턴해서 만든다. 만들줄만 알았지, 가져다 쓰는 listView에서 각 개체에 접근하는 법을 몰라 헤메다가 나름 정리해 보았다. 1. Activity가 되었던 Fragment가 되었던 OnScrollListener를 implements 한 후 필요한 method를 구현한다. 2. 필요한 method 중 onScroll과 onScrollStateChanged 에서 필요한 내용에 접근한다. 3. onScroll method에서는 다음과 같은 방법으로 처리 @Override public void onScroll(AbsListView view, int firstV..

Java/Android 2013.09.25

ADB를 이용한 /data 디렉토리 접근

프로젝트 도중 SharedPreference를 사용해서 데이터를 저장하는 부분이 있었다.그런데 SharedPreference에는 배열 값이 저장이 안되는 듯 해서 정말 그런가 궁금했고, 궁금 증을 해결하기 위해 /data 디렉토리를 뒤져봐야 했다.하지만 adb나 DDMS를 통한 접근은 Permission denied만 나오고, 접근이 불가한 상태였다.역시 삽질과 구글링을 통해 해결법을 알아 냈다. 1. 현재 연결되어 있는 장비 알아 낸기 adb devices 명령어를 통해서 연결 된 device 목록을 알아 온다. 2. 해당 장비에 접속하기 adb -s emulator-5554 shell 와 같은 명령어로 해당 장비에 접근한다. 3. 내가 개발 중인 프로젝트 권한으로 변경하기 가령 내가 개발중인 프로젝트..

Java/Android 2013.09.03

간단한 애니메이션

View 화면이 상, 하, 좌, 우에서 날라 들어오거나 다시 들어가는 간단한 애니메이션이 필요해서 검색 중 http://developer.android.com/guide/topics/graphics/view-animation.html 를 발견하게 되었다.이를 응용해서 현재 개발중인 프로젝트에 사용하였다. 관련 소스는 아래와 같다.자세한 소스 분석은 언제나 그렇듯이 알아서 ^^ res/anim 아래 animation xml 파일을 만든다. 아래와 같이 from x가 100%에서 시작하면 오른쪽에 숨어 있다가 to x인 0의 위치, 즉 원래 화면 안으로 들어오는 부분이다. 따라서 이름도 slide_in_from_right.xml로 만들었다.이처럼 100%, -100% 그리고 X, Y만 바꿔가면 상, 하, 좌..

Java/Android 2013.08.08

GPS 좌표를 이용한 거리 구하기

구글링을 통해서 GPS의 좌표를 통한 거리 구하는 공식을 어렵게 찾아 적용했다.내용은 아래와 같다. if(oldCoordinate != null) {// TODO 거리 누적...double theta = oldCoordinate.getLongitude() - Double.parseDouble(lp.getLongitude());double dist = Math.sin(Utility.deg2rad(oldCoordinate.getLatitude())) * Math.sin(Utility.deg2rad(Double.parseDouble(lp.getLatitude()))) +Math.cos(Utility.deg2rad(oldCoordinate.getLatitude())) * Math.cos(Utility.deg2r..

Java/Android 2013.07.29

에뮬레이터에서 HAX 관련 오류 삽질기

eclipse 또는 adt를 통해 android를 개발하다 보면 에뮬레이터가 늦게 떠서 개발에 어려운 경우가 있다.이럴 경우 다음과 같은 방법으로 에뮬레이터의 속도를 빠르게 할 수 있다. 1. Window > Android SDK Manager를 연다.2. SDK Manager에서 다음의 package를 설치 한다. 자신의 버전에 맞는 SDK에서 Intel x86 칩셋 이미지를 다운 받는다. 이미 설치 되어 있을 경우에는 설치할 필요가 없다.가장 하단의 Extras에 있는 Intel x86 Emulator Accelerator (HAXM)도 다운 받는다.자신의 컴퓨터에 따라 칩셋 이름이 달라질 수 있다.(아마도) 3. Window > Android Virtual Device Manager을 연다.4. 이..

Java/Android 2013.05.21

Site-mesh에서 excludes 정의가 적용 되지 않을 경우

Site-mesh의 decorators.xml 파일에서 excludes를 정의해서 사용하려 했지만 여전희 decorator 파일이 적용 되는 상황이 발생했다. 여기 저기 구글링 해 봤지만 내 검색 능력의 한계인가 잘 찾질 못했다. 결국 사내 아는 분에게 문의해서 원인을 알게 되었다. sitemesh.xml decorators.xml /uninstall/* /download/* /intro/* /notice/* /* 위의 decorators.xml에서 uninstall 부분만 decorator를 적용하지 않으려 했지만 처음에는 적용 되지 않았고, 이에 sitemesh.xml의 아래 부분이 추가 되면서 문제가 해결 되었다. 삽질은 정말 해도 해도 끝이 없는거 같다.

Java/Etc 2010.05.14

ActiveMQ 사용하기

실 서비스 도중에 대량의 작업을 동기식으로 작업하려면 부담이 되는 경우가 많다. 이럴 경우에는 비동기식으로 작업을 하게 되는데, 보통 Queue에 작업해야 할 목록을 집어 넣어두고, 나중에 Cosumer가 해당 작업을 하도록 만드는 것이 일반적이다. 이런 작업을 하는데 유용한 도구가 ActiveMQ이며 이번 주소록 프로젝트를 하면서 ActiveMQ를 사용하게 되어 정리차원에서 블로그에 올려본다. 설치하기 이전에 우선 환경을 셋팅해야 한다. JDK는 1.5.x 버젼 이상 설치되어 있어야 하며, " JAVA_HOME" 환경 변수는 JDK가 설치된 경로로 잡혀 있어야 한다. Maven은 1.0.2 이상 설치되어 있어야 한다.(Maven은 소스 설치 또는 개발자 버젼 설치를 위해 필요한 듯...) 또한 관련 J..

Java/Etc 2010.03.23

Java addCookie 삽질기

매일 프로그램 삽질은 하고 있지만 이번 건은 유난히 더 삽질이 길었다. 3일 동안 아무런 일도 못하고 이 일에만 매달렸다. 다른 일을 하긴 해야 하지만, 개발자 자존심에 해결하지 못하고 넘어가기에도 뭐 하고... 결국에는 해결하게 되었지만 아무것도 아닌 원인 때문에 해결하고도 짜증이 난다. 증상은 다음과 같다. package com.naver.widget.action; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.naver.widget...

Java/Etc 2010.03.10

Like 검색에서 wild 문자인 _, % 검색 되도록 하기

프로젝트를 진행하면서 BTS로 _, %로 검색시 검색이 제대로 안된다는 내용이 등록되었다. 해당 내용을 해결하기 위해 구글링 하던 도중 아래와 같은 내용을 찾게 되었다. http://okjsp.pe.kr/seq/2372 '_', '%'와 같은 문자들이 검색을 하기 위한 wild 문자로 사용되지 않고 리터럴 문자로 사용되기 위해서는 뒤에 escape '\' 와 같이 사용해 주어야 한다는 것이다. 즉 다음과 같이 사용하면 되는 것이다. LIKE '%검색어\_\%% escape '\' 사용하고 있는 DB는 CUBRID 였으며, 위와 같이 할 경우 잘 동작 되었다. 위 내용을 수정하면서 SQL Injection 위험이 있던 '%$keyword$%' 부분도 '%#keyworkd#%'로 바꾸게 되었다. 하지만 이 ..

Java/Etc 2009.09.28

스트럿츠를 사용하여 객체 출력하기

일반 프로퍼티 또는 List 타입의 프로퍼티를 출력하는 방법은 이미 살펴 보았다. 프로퍼티가 아닌 객체 자체를 출력하는 경우는 다음과 같이 할 수 있다. struts.xml /chapter2/printObject.jsp example.model.Product.java package example.model; public class Product { private String name; private String modelNo; public Product() {} public Product(String name, String modelNo) { this.name = name; this.modelNo = modelNo; } public String getName() { return name; } public..

Java/Struts2 2009.05.11

스트럿츠를 사용하여 List 출력하기

이번에는 스트럿츠를 사용하여 List를 출력해 보자. 일단 Action 파일과 result 파일 정의를 struts.xml에 정의하면 다음과 같다. /chapter2/printStringList.jsp 위에서 정의한 대로 PrintStringListAction.java 파일을 example.chapter2 패키지에 만든다. package example.chapter2; import java.util.ArrayList; import java.util.List; public class PrintStringListAction { private List listString; public String execute() throws Exception { listString = new ArrayList(); list..

Java/Struts2 2009.05.06

스트럿츠2 설정하기

스트럿츠를 사용하기 위해 스트럿츠 환경을 구축할 필요가 있다. 우선은 이클립스에서 다음과 같이 'Dynamic Web Project'를 하나 생성한다. 그런 다음 위에서 볼 수 있는 것처럼 몇가지 내용을 추가해야 한다. 우선은 필요한 라이브러리를 추가해 보자. http://struts.apache.org/에서 해당 버전을 다운받는다. 현재 시점에서 가장 최신 버젼은 2.1.6이다.(http://struts.apache.org/download.cgi#struts216) 다운 받은 파일의 압축을 풀면 lib 디렉토리에 jar 파일들이 있는데, 그 중에서 필요한 jar 파일들을 추가한다. 추가해야 할 파일 목록은 다음과 같다. antlr-2.7.2.jar commons-beanutils-1.7.0.jar co..

Java/Struts2 2009.04.28
728x90
반응형