JAVA
-
abbreviate (줄여쓰기)를 정규표현식으로 구현해보기JAVA/tips 2022. 5. 3. 18:31
개인의 취향 입력받은 문자열이 너무 길 경우, 간혹 끝 부분을 ... 와 같이 줄여서 사용하기도 한다. 이 기능은 org.apache.commons.lang.StringUtils#abbreviate()에서 제공하고 있지만 저거 하나 쓰려고 라이브러리를 추가하기에는... 이부분은 개인의 취향이니 더 이상 언급하지 않겠다. ㅎ 패턴 먼저 정규표현식의 패턴을 알아야한다. 기본적인 사용법은 다른곳에 많이 소개가 되어 있으니 생략하고 우리는 패턴에 집중해보자. 우리가 사용할 패턴은 후방탐색(Lookbehind) 패턴이다. 후방탐색 패턴은 (?
-
PK가 없는 테이블을 JPA 엔티티로 만들기JAVA/Spring 2021. 12. 7. 10:05
문제의 시작 Spring batch의 메타테이블 중 batch_job_execution_params 의 데이터를 JPA로 조회할 일이 생겼다. 테이블 스키마는 아래와 같았다. CREATE TABLE `batch_job_execution_params` ( `JOB_EXECUTION_ID` bigint(20) NOT NULL, `TYPE_CD` varchar(6) NOT NULL, `KEY_NAME` varchar(100) NOT NULL, `STRING_VAL` varchar(250) DEFAULT NULL, `DATE_VAL` datetime DEFAULT NULL, `LONG_VAL` bigint(20) DEFAULT NULL, `DOUBLE_VAL` double DEFAULT NULL, `IDENTI..
-
How to use Redis 5.0.14 in embedded-redisJAVA/tips 2021. 11. 25. 11:01
embedded-redis 프로젝트를 진행하다가 테스트용으로 embedded-reids를 적용해보면 어떨까 하고 찾아보다가 이동욱님의 블로그를 보게되었고, 요기 저장소의 embedded-redis를 적용하게 되었다. 문제 요기의 레디스 버전이 2.18.19를 사용중이라 내 프로젝트의 레디스 스트림 기능을 사용하면 아몰랑 하면서 에러를 뱉어냈다. 해결 요기 저장소에서 코드를 보니 resource 에 각 OS별로 레디스 서버 실행파일들이 있었다. 그래서 요기 저장소를 포크받아서 코드를 수정하고 바이너리를 바꾸고... jitpack을 통해 패키지를 불러오고... 바보였다. README.md에 너무 친절하게 레디스 바이너리를 오버라이딩 하는 방법이 나와있었다... 예제 코드를 요런 식으로 하면 잘 돌아간다. @..
-
Factory Pattern within SpringJAVA/Spring 2020. 7. 18. 02:12
스프링에서 팩토리 패턴을 사용하기 좋은 방법을 발견해서 기록해둔다. 한번 봐보자. DI와 팩토리의 만남. 기가막힌다. 인터페이스 정의 먼저 인터페이스를 하나 만들어 보자. 뭐가 좋을까? 간단하게 자동차로 해보자. public interface Car { Color getColor(); } 그냥 색깔만 보여준다. 이제 색깔별 차들을 구현해보자. 색깔별 자동차 클래스 구현 @Component public class RedCar implements Car { @Override public Color getColor() { return Color.RED; } } 빨간차... @Component public class BlackCar implements Car { @Override public Color getC..
-
CGLIB Proxy 와 Mockito 콜라보레이션 (feat. Not a Mock)JAVA/tips 2020. 7. 10. 01:00
근황 최근 팀 이동으로 인해 갑작스럽게 자바 개발자가 되었다. 대한민국은... 어딜가나 자바를 해야한단 말인가... 😢 그래서 나름 열심히 스프링 공부를(?) 하고 있다. 자바개발자가 아니라 스프링 개발자인듯 멘붕 갑작스럽게 프로젝트 하나를 맡아서 열심히 분석하고 개발하려고 봤는데 테스트코드가... 음... 이참에 기능 분석도 하고 리팩토링 준비도 할 겸 테스트 코드들을 작성하기 시작했다. JUnit으로 테스트 코드는 아주 간단한 것들만 짜봤었는데 이번 기회에 Mockito도 써보고 생각보다 재미가 쏠쏠했다. 그러다가 서비스 클래스의 테스트 코드를 작성하는데 안에서 다른 서비스 클래스를 참조하고 있었다. 그래서 참조되는 서비스 클래스를 스파이로 만들어서 호출여부만 확인하려고 했는데 이상한 에러가 발생했다..
-
RCP에서 AbstractUIPlugin 구현 클래스 자동으로 activate 설정JAVA/tips 2017. 10. 18. 10:46
Eclipse Rich Client Platform (이하 RCP) 에서 AbstractUIPlugin 클래스를 구현해서 사용해야 할 일이 생겼다. 처음 template을 통해 Plugin project를 생성할 때 따로 Activator를 지정하지 않았고 나중에 AbstractUIPlugin 클래스를 구현하였는데... RCP application이 실행되면서 AbstractUIPlugin을 구현한 클래스가 수행되지 않는 문제가 있었다. 덕분에 여기저기서 NullPointerException이 주루루루루루루루루룩은 아니고 시작하면서 NPE 뜨면서 프로그램이 걍 죽었다. 자 그럼 이러한 문제를 어떻게 해결해야 할까?!! 정답은 여기에서 찾았다. 주요 내용은 다음과 같다. Re: auto activate b..
-
JDBC (2) - getConnection()JAVA/jdbc 2017. 8. 29. 23:18
이 포스트는 2016.10.07에 작성한 제 블로그의 글을 옮긴 것 입니다. 링크: https://seunghun-kim.github.io/2016/10/12/jdbc-02/ 잡담 처음 무언가를 배울때 ‘왜?’ 라는 궁금증이 중요하다. 이러한 궁금함이 없이 학습을 하다 보면 누군가로부터, 아니면 책으로부터 주는 지식을 아무 생각 없이 그대로 받아들이게 된다. 이게 나쁘지만은 않지만 ‘왜?’ 라는 생각을 시작함으로써 더 깊고 더 넓은 지식을 향해 나아갈 수 있다고 본다. 아니면 계속 반복해서 보면 된다. Intro 지난번 포스팅에서는 Class.forName(java.lang.String) 을 이용하여 JDBC Driver가 어떻게 동적으로 로딩 되는지 알아봤다. 자세한 사항은 지난 포스팅을 참고하면 된다..
-
JDBC (1) - Class.forName(java.lang.String) ?!JAVA/jdbc 2017. 8. 29. 19:20
이 포스트는 2016.10.07에 작성한 제 블로그의 글을 옮긴 것 입니다. 링크: https://seunghun-kim.github.io/2016/10/07/class_for_name/ JDBC Driver를 사용할 경우, Connection을 생성하기 전에 Class.forName("Specific Vender's Driver"); 코드를 추가해서 사용할 JDBC Driver를 로드해야 한다. 얘는 뭘 하는 앨까? 호출되는 코드만 봐서는 직관적로 뭘 하는지 잘 모르겠다. 한번 찾아보자! java.lang.Class public final class Class extends Object implements Serializable, GenericDeclaration, Type, AnnotatedEleme..