전체 글
-
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에 너무 친절하게 레디스 바이너리를 오버라이딩 하는 방법이 나와있었다... 예제 코드를 요런 식으로 하면 잘 돌아간다. @..
-
덧셈 & 뺄셈을 이해해보자Game/Game Mathematics 2021. 2. 27. 01:01
도대체 왜 이런걸... 기본이 가장 중요하다. 그리고 이 내용은 정말 충격적이다. 들어가기 전에 수학 또는 물리에서 벡터 라는 친구가 있는데 이 친구는 방향 과 값 이라는 특징을 가지고 있다. 그리고 스칼라 라는 친구는 값 이라는 특징만 갖는다. 지금까지 일반 실수 또는 정수들의 덧셈과 뺄셈은 스칼라 의 특징만을 가진 연산이라고 생각했다. 덧셈과 뺄셈을 할 때 내가 가진 물건을 + 또는 - 가 된다는 의미로만 생각했었다. 그런데 말입니다... + 와 - 에 다른 의미를 부여한다면...? 덧셈 A = 5, B = 9 라는 값이 있다고 하자. A + B 는 14 이다. 그럼 이 의미는 무엇일까? 5개와 9개가 더해져서 14개가 되었다. 맞다. 뺄셈 자 다시, A = 5, B = 9 라는 값을 가지고 A - ..
-
Mac에서 YouCompleteMe 사용하기Shell 2021. 2. 4. 02:02
맥에서 vim을 IDE처럼 써보자는 생각에 블로그들을 돌아다니다가 굉장히 유용한 블로그 글을 하나 발견했다. (Linux) Vim 에디터 다양한 기능 설명 및 C++/Python 개발환경설정 Edward Im 님께서는 친절하게 .vimrc 템플릿도 제공해주시고 vim 의 IDE화를 하나하나 친절하게 설명해주셔서 바로 따라해봤다. 참고로 Edward Im 님은 Ubuntu에서 작업하셨고 난 MacOS에서 작업했다. vim 에서는 plugin들을 Vundle을 통해 설치가 가능한데 Edward Im 님께서 미리 필요한 plugin들을 추가해주셔서 vim 안에서 :BundleInstall 명령어만 치면 손쉽게 설치가 된다. 그 다음, 문제는 YouCompleteMe 라는 자동완성 plugin을 설치할때 발생했..
-
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..
-
FunctionFP 2020. 7. 12. 02:04
정의 함수 란? () 연산자를 적용하여 평가할 수 있는 모든 호출 가능 표현식 호출시 사용 가능한 결과값을 반환 자, void 를 반환하는 함수를 우리는 앞으로 함수로 쳐주지 않기로 한다. 그럼 뭐라고 부르지? 일급 시민 Javascript에서는 함수가 객체이므로 값으로 다룰 수 있어서 일급 또는 일급 시민 이라고 부른다. 보통 프로그래밍에서 일급이라고 함은, 적용 가능한 모든 연산을 수행할 수 있는 것들을 일급 이라고 부른다. (어렵다...?) 그럼 그러한 연산은 뭐가 있을까? 값을 할당하거나 함수의 인자로 전달하거나 함수의 반환값으로 사용하거나 보통 위와 같은 케이스를 말한다. 그럼 Javascript에서 이러한 연산을 어떻게 수행하나 한번 보자. 먼저 값을 할당하거나 const add = funct..
-
CGLIB Proxy 와 Mockito 콜라보레이션 (feat. Not a Mock)JAVA/tips 2020. 7. 10. 01:00
근황 최근 팀 이동으로 인해 갑작스럽게 자바 개발자가 되었다. 대한민국은... 어딜가나 자바를 해야한단 말인가... 😢 그래서 나름 열심히 스프링 공부를(?) 하고 있다. 자바개발자가 아니라 스프링 개발자인듯 멘붕 갑작스럽게 프로젝트 하나를 맡아서 열심히 분석하고 개발하려고 봤는데 테스트코드가... 음... 이참에 기능 분석도 하고 리팩토링 준비도 할 겸 테스트 코드들을 작성하기 시작했다. JUnit으로 테스트 코드는 아주 간단한 것들만 짜봤었는데 이번 기회에 Mockito도 써보고 생각보다 재미가 쏠쏠했다. 그러다가 서비스 클래스의 테스트 코드를 작성하는데 안에서 다른 서비스 클래스를 참조하고 있었다. 그래서 참조되는 서비스 클래스를 스파이로 만들어서 호출여부만 확인하려고 했는데 이상한 에러가 발생했다..