FeignClient를 사용할때 @GetMapping을 이용하고, 객체를 전달하도록 인자로 전달하였으나, 뭔가 자동으로 POST요청으로 전달되는 것으로 보였다. 다음의 예제는 해당 문제를 재현하기위한 코드들이다. 이 재현 코드에는 총 세개의 클래스가 쓰였다. MyController MyFeign MyParam @RestController public class MyController { private final MyFeign feign; @Autowired public MyController(MyFeign feign) { this.feign = feign; } @GetMapping("/test") public void getTest(MyParam param) { System.out.println(Stri..
ThreadLocal 각 스레드마다 개별적으로 변수를 저장하는 기능을 제공한다. ThreadLocal을 사용하면 특정 스레드에서만 액세스 할 수 있는 데이터를 저장할 수 있다. 즉, 쓰레드라는 scope 내에서 공유되어 사용될 수 있는 값으로 다른 쓰레드에서 공유변수를 접근할 시 발생할 수 있는 동시성 문제의 예방을 위해 만들어졌다. 사용법 ThreadLocal에서 제공하는 get, set 메서드를 통해 값을 읽거나 쓸 수 있다. 예제 public class ContextTest { @Test void test() { Context.threadLocal.set(10); System.out.println(String.format("%s - %s", Thread.currentThread(), Context...
회사업무중 중국개발자 분들(위메프 연길센터에서 업무를 수행하시는 분들)이 작성한 통계관련 코드에 기능을 추가하는 페어프로그래밍을 하던도중, 이슈가 있는 코드를 발견하였다. Custom하게 만든 객체를 HashMap의 키값으로 사용하였고, Custom객체를 통해 key값에 해당하는 값을 갖고오는데 원하는 데로 갖고오지 않았기 때문이다. 문제가 있었던 부분은 Custom객체를 확인하자 바로 알 수 있었다. 문제가 있었던 부분은 Effective Java에서 강조하는 아래의 법칙을 지키지 않았기 때문이다. 아래의 글은 Effective 자바의 글이다. equals를 재정의할 떄는 반드시 hashCode도 재정의 하라 많은 버그가 hashCode 메서드를 재정의하지 않아서 생긴다. equals 메서드를 재정의..
재밌는 문제가 있었다. 관련하여 리서치 및 테스트를 조금 해봐서 적게된다. 문제의 요지는 for문에서 3번째로 오는 증감연산자에서 i = i + 1을 사용하는 것보다 i++를 사용하는게 성능의 이점이 있다는 말이다. 리서치를 해본 결과, i++ 연산의 경우에는 다음과 같이 바이트 코드로 컴파일 된다고 한다. IINC 1 1 그리고 i = i + 1 연산의 경우는 다음과 같은 형의 바이트 코드로 컴파일 된다고 한다. ILOAD 1 ICONST_1 IADD ISTORE 1 결론적으로 i++쪽의 바이코드가 더 적은 연산을 수행한다. i++의 경우 1번인덱스의 값을 1 증가시키는 바이트 코드이고 i = i + 1의 경우 1번 인덱스의 값을 스택에 넣고 상수 1을 스택에 넣고 이 둘을 더해서 1번 인덱스에 저장하..
DockerDesktop의 유료화로 인한 대체제로 minikube를 사용하라는 말이 들린다. minikube는 로컬환경에서 kubernetes 클러스터를 실행하는 데 사용된다고 한다 그러나 컨테이너를 실행하는 데 사용할 수 있는 도커 데몬도 실행되기에 기존의 Docker Desktop을 대체할 수 있다고 한다. # Install hyperkit and minikube brew install hyperkit brew install minikube # Install Docker CLI brew install docker brew install docker-compose # Start minikube minikube start # Tell Docker CLI to talk to minikube's VM eva..
일반 제약회사에서 전산담당자로 있다가 2020년에 3년만에 다시 개발자로서 위메프라는 회사에 오게 되었는데 많은것이 바뀌어 있었다 스프링대신 스프링 부트를 쓰고있었고, 데이터베이스 관련해서는 모두 HikariDataSource라는 것을 사용하고 있었다. (마치 당연한 것 처럼) 개인적으로 이런걸 보면, 뭔가 누가만들었는지 알고싶고 해당 명칭을 지은 근원을 보고싶은법. 나는 히카리하면 개인적으로 가장 먼저 떠오르는게 옛날 아프리카TV의 BJ 히카리가 떠오른다. 해당 BJ가 일본인BJ였던 만큼 이 라이브러리를 만든 개발자도 일본과 관련이 있는 개발자가 아닐까 생각이 들었다. (히카리CP를 만든 개발자의 github 주소 : https://github.com/brettwooldridge brettwooldri..
Tools > AVD Manager를 클릭한다. Wipe Data를 누르면 초기화된다.
('honeyinfo7.tistory.com'이하 '금연도우미')은(는) 「개인정보 보호법」 제30조에 따라 정보주체의 개인정보를 보호하고 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 하기 위하여 다음과 같이 개인정보 처리방침을 수립·공개합니다. ○ 이 개인정보처리방침은 2021년 1월 1부터 적용됩니다. 제1조(개인정보의 처리 목적) ('honeyinfo7.tistory.com'이하 '금연도우미')은(는) 다음의 목적을 위하여 개인정보를 처리합니다. 처리하고 있는 개인정보는 다음의 목적 이외의 용도로는 이용되지 않으며 이용 목적이 변경되는 경우에는 「개인정보 보호법」 제18조에 따라 별도의 동의를 받는 등 필요한 조치를 이행할 예정입니다. 제2조(개인정보의 처..
현재 회사에서 사용하는 Elasticsearch의 경우 Nori를 사용하고 있다. 그러기 위해 Nori플러그인을 사용하는데, Nori사이트에서 바로 다운받아서 설치하는 방법과 Nori플러그인을 다운받아서 수동으로 설치하는 방법이 있는데, 이에 대한 포스팅을 남긴다. 수동설치시 다운로드 주소 다운로드 주소 : https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-nori/analysis-nori-7.11.1.zip -- 수동 설치 $ sudo /elasticsearch/bin/elasticsearch-plugin install file:[설치경로]/analysis-nori-7.11.1.zip -- 다운로드 설치 $ install ana..
배포한 SpringBoot 프로젝트를 Ubuntu서비스에 등록하고 싶어졌다. 의외로 방법은 간단하다. 서비스를 등록하기 위해서 아래와같이 .service로 끝나는 파일을 만든다. sudo vi /etc/systemd/system/humor-api.service 아래와 같이 입력한다. [Unit] Description=Humor Crawler API After=syslog.target network.target mysql.service [Service] ExecStart=/bin/bash -c "exec java -jar [jar가 위치한 full경로]/humor-api.jar" [Install] WantedBy=multi-user.target service파일이 생성되었으면 아래의 명령어들을 실행하여 s..