RedisCommandExecutionException 오류 발생! 며칠 전, 내가 개발한 기능과 관련하여 Redis 저장 시 오류가 발생하였다. 해당 기능을 간단히 설명하자면 현재 시간과 자정의 시간을 비교하여 초 차이만큼을 TTL로 설정하는 특수한(?) 스펙을 가지고 있다. 그래서 6시에 API 요청을 하는 사용자와 9시에 API 요청을 하는 사용자가 서로 다른 TTL을 가지게 된다. 데이터독을 살펴보니 23시 59분 59초에 조회한 사용자에게서 해당 오류가 발생했다. 사실 이 부분에 있어서 테스트를 분명 작성해두었는데 오류가 발생해서 조금 당황스러웠다. 다행히도 자정 이후에 다시 시도하여 이슈가 해결은 되었으나 점점 해당 기능을 사용하는 사용자가 많아지면 동일한 이슈가 또 발생할 가능성이 높았기 때..
Reflection? java에서는 reflection이라는 api를 제공한다. reflection은 구체적인 클래스 타입을 알지 못해도 클래스의 메서드나, 타입, 변수들에 접근할 수 있도록 해주는 api이다 대표적인 적용 예시로는 1) JPA에서 객체 조회시 데이터가 들어가는 것 2) @RequestBody 사용 시 DTO 객체에 데이터가 들어가는 것 3) 테스트 케이스 작성시 private 메서드를 테스트할 때 등이 있다. 어떻게 가능한걸까? 기본적으로 객체에 데이터를 넣기 위해서는 일련의 과정(new, setter 등)이 필요하고, 접근 제어자에 따라 접근이 불가능한 것이 맞다. 하지만 reflection이 적용된다면 이러한 과정이 필요하지 않고 private 메서드의 접근도 가능하다. 바로 ref..
우테캠 미션 진행당시 도메인 객체의 id 값에 대해 Long을 사용하는 것을 보면서 왜 long이 아닌 Long을 사용하지? Long과 long의 차이는 뭐지? 라는 의문이 생겼다. Long과 long의 차이와 어떤 경우에 사용하면 좋은지에 대해 알아보려고 한다. long은 원시 타입(Primitive Type), Long은 참조 타입(Reference Type)이다 원시 타입은 정수, 실수, 문자, 논리 리터럴 등 실제 메모리에 데이터 값을 직접 저장하는 타입으로서 boolean, char, byte, short, int, long, float, double를 말한다. 참조 타입은 객체의 주소를 저장하는 타입으로 메모리 주소 값을 통해 객체를 참조하는 타입으로서 원시 타입을 제외한 문자열, 배열, en..
자바 jdk가 이미 설치되어 있고 버전을 변경하려 할 때 적용하는 방법 자바 jdk 버전별로 다운받는 링크 블로그(감사합니다!) https://nhj12311.tistory.com/37 자바 11 설치 - https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html 자바 버전 변경하기 1) sudo vi ~/.bash_profile 입력하고 비번 입력 2) JAVA_HOME 경로 변경 export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.12.jdk/Contents/Home 3) source ~/.bash_profile 입력 4) java -version 해서 변경된 버전 확..
사이트 개발을 진행하다 보면 가끔 한번씩 등장하게 되는 기능이 바로 "엑셀 다운로드" 기능이다. 엑셀 다운로드의 셀 병합 기능과 관련된 속도 이슈와 이를 개선했던 경험을 써보려고 한다. EXCEL 라이브러리? 엑셀 업로드/다운로드 기능을 자바에서 사용하기 위해서는 대부분 POI 라이브러리를 사용하게 된다. POI에서 제공하는 엑셀 라이브러리는 대표적으로 HSSF, XSSF, SXSSF가 있다(매번 발음하기 너무 어렵다) 사용방법이나 예제의 경우 인터넷에 많으니 구글 검색을 추천.. 속도 이슈 발생기 기존에 회사 설문조사 결과를 엑셀로 다운로드 할 수 있는 기능이 있었는데 응답자 정보를 추가로 넣어 출력해주는 기능의 작업을 진행했었다. 그런데 기능 개선 이후 약 10달이 지난 시점, 설문 결과 다운로드를 ..