전체 글
-
HikariCP, 일단 connection 맺어 본다Database 2022. 11. 16. 23:18
1) 서론 이번 글에서는 HikariCP의 설정에 대해서 공부한 것을 공유드리려고 합니다. 이미 설정을 해보시고 테스트해본 분께는 쉬운 내용이므로 읽지 않으셔도 좋습니다. 2) 아이디어 출발점 중요한 새로운 모바일 애플리케이션 출시를 앞두고 있었습니다. 사용자들은 업데이트 후 재로그인이 필수인 상황 대대적인 공지로 인해 오전 평소보다 많은 요청 발생 예상 매우 제한된 IDC 레거시 인증 담당 서버의 담당자는 하필 주니어인 나... 배포를 앞두고 걱정이 되어 괜히 이래저래 문제가 없을지 고민해봅니다. 이미 계약된 IDC의 물리적인 하드웨어 스펙은 현재 개선할 수 없습니다. 그래서 애플리케이션과 DB의 설정을 확인해보는데요. 혹시 N+1 쿼리가 발생할 수 있는지 확인 DB connection 부족하지 않은지..
-
Redis, Jmeter를 이용하여 동시성 문제 해결하기Redis 2022. 11. 6. 20:41
1) 서론 하나의 일을 할 때에는 침착히 잘 해내는데, 여러 일을 동시에 할 때는 허둥지둥하여 망쳐버린 경험이 있으신가요? 저는 여러 일을 동시에 진행할 때 우선순위를 잘 정하지 못하고, 처리하는데 급급하여 결과의 품질이 떨어지는 경험을 하곤 했습니다. 모든 일을 마치고 보면 항상 아쉬움이 남습니다. 조금 더 신경 썼다면 더 나은 결과물을 냈을 것 같다는 후회도 종종 하는데요. 이러한 경험 때문인지 출근 후 가장 먼저 TO-DO 목록을 작성합니다. 그리고 일의 우선순위를 나름대로 정하여 어떠한 경우가 발생하더라도 그것을 지키려고 합니다. 고객 혹은 업무 연관자들이 대기하는 시간이 길어질 것 같은 것을 먼저 처리하고, 혼자서 하는 개인 업무를 처리하는 방식으로 우선순위를 정하는데요. 일의 우선순위는 사람마..
-
Java Optional과 container objectJava & Kotlin 2022. 9. 10. 21:07
1) 서론 혹시 '열 길 물속은 알아도 한 길 사람 속은 모른다'라는 속담을 들어보신 적 있으신가요? 물은 직접 들어가 보면 알 수 있지만, 사람의 속은 알 수 없다는 의미인데요. 학교, 회사 등에서 사람과의 관계는 언제나 어렵습니다. 실제의 마음을 잘 못 전달해서 오해를 살 수도 있습니다. 때로는 오히려 드러내지 않는 것이 더 좋았을까라는 고민도 하게 됩니다. 최근에 개발을 하다가 내부 구현을 추상화된 표면과 내부 구현의 로직이 다른 것을 만났었는데요. Optional.isEmpty() 사용 중 당황했던 경험 그리고 이를 stackoverflow에 질문을 올리고, 이유와 철학을 알아가는 과정을 공유드리려고 합니다. 2) Optional.isEmpty()의 속은 모르겠다 Java8부터 등장한 Option..
-
스프링에서 재처리를 위한 @Retryable 사용하기Spring Framework 2022. 8. 22. 23:10
1) 서론혹시 어떠한 일을 할 때 배보다 배꼽이 더 커졌던 경험이 있으신가요? 예전에 문득 해물탕이라는 요리가 너무 먹고 싶었고, 집 근처에서 해물탕 가게를 찾을 수 없었습니다. 그래서 직접 해물탕을 만들겠다는 생각을 했었는데요. 하지만 해물탕 한 그릇을 먹기 위해 비싼 해산물들을 구매해야 했습니다. 그리고 구매한 해산물들을 다듬는 시간은 꽤 오래 걸렸는데요. 혹시 잘 못 해감을 해서 모래가 씹히지 않을까, 이 부분은 먹어도 되는 걸까? 고민을 했었습니다. 어찌어찌 요리 후 맛있게 먹었습니다. 하지만 여전히 남는 아쉬움은 있었습니다. 15분 만에 먹고 끝내는 이 한 그릇을 위해서 이렇게 많은 돈과 정성을 쏟는 것이 정말로 효율적인 건가? 식당을 찾아가서 먹거나, 추가의 배달비를 내고 배달을 시키는 것이..
-
Junit 테스트 병렬 수행으로 빌드 시간 단축하기Spring Framework 2022. 8. 16. 01:14
1) 서론혹시 무언가를 기다리는 시간이 지루하게 느껴진 경험이 있으신가요?저는 놀이기구를 타기 위해 기다리는 시간이 참 지루하다고 느껴집니다. 대기열에서 약 1시간씩 기다리다 보면, 자유이용권을 구매했지만 몇 개 못 타는 경험을 하기도 하는데요. 가끔 대기열이 전혀 없고, 실컷 탈 수 있었으면 하는 상상도 해봅니다.최근 문득 애플리케이션의 build 시간이 지루하고, 아깝다는 생각이 들었는데요.특히 테스트 코드가 증가하게 되면, 빌드 시간도 계속해서 지연됩니다. Githbub actions를 사용해서 PR 생성 혹은 commit 시 자동으로 build가 동작하거나, 배포를 위해 build 할 때도 마찬가지입니다.만약총 10명의 개발자가하루에 5번 build 하고1분씩 아낄 수 있다면 총 50분이라는 소중..
-
[Java] lambda captureJava & Kotlin 2022. 7. 23. 21:22
1) 서론 자바 개발자라면 '람다 표현식' 이라고 불리는 익명 함수를 자주 사용할 것 같습니다. 꼭 자바 개발자가 아니더라도 '람다 대수'라는것을 배웠다면, 이는 컴퓨터 공학 어디에서든 사용되는 것을 알 수 있는데요. 기본적으로 람다 대수는 함수의 이름을 익명으로 하고, 추상화된 방식으로 계산을 하는데요. f(x)=x+1을 λx.x+1로 표현할 수 있습니다. 중요한것은 함수에 X를 받아, X+1 연산을 한다는 것입니다. 즉 함수의 이름은 익명화 시키고, x가 오면 x+1을 계산합니다. 이러한 람다 표현식이라고 불리는 익명 함수가 자바에도 있는데요. 이때 지역변수로 선언된 값을 람다 표현식에서 사용하다가 어려움을 만났던 점을 기록합니다. 2) 람다 표현식으로 지역변수 사용하기 지역변수를 Supplier 함..
-
객체지향적 리팩토링 맛보기Java & Kotlin 2022. 7. 3. 01:40
1) 서론 개발자에게 리팩토링은 피할 수 없는 순간일 것 같습니다. 개인적으로는 리팩토링은 숨 쉬듯이, 업무와 무관하게 이루어져야 하는 것 같기도 한다는 생각이 들기도 하는데요. 당시에는 빠르게 개발하는 것이 목적이었기 때문에 코드에 신경을 쓰지 못할 수도 있습니다. 혹은 기능 추가가 계속해서 이루어지면서, 어쩔 수 없이 정리가 필요한 순간이 올 수도 있을 것 같습니다. 이번 글에서는 임시적으로 추가한 기능이 어느 순간 중요한 기능이 되고, 지속적으로 로직 추가가 발생했던 기능을 리팩토링 한 경험을 공유드립니다. 2) 어떤 내용을 리팩토링 하나요? (모든 내용은 블로그를 위해 가정한 것들입니다. 회사와 무관합니다) 아래의 상황이라고 가정합니다. A, B 애플리케이션이 각각 다른 서버에 존재 A에서 생성된..
-
Github Actions을 활용한 CI 안정성 확보하기Contribution 2022. 6. 26. 20:08
1) 서론 혹시 요리를 자주 하시나요? 저는 가끔 이것저것 남은 재료를 가지고 요리를 하곤 하는데요. 하지만 요리 실력은 마음처럼 잘 따라주지 않습니다. 그래서 간혹 참사가 벌어지고는 하는데요. 맛있는 재료들만 넣고 만들었는데 완성하고 보니 맛이 이상한 경우가 많습니다. 분명히 맛있을 수밖에 없는 재료들만 넣고 합쳤는데, 왜 맛이 없을까요? 아마도 각각의 재료들은 아주 뛰어나지만 이것들을 잘 조화롭게 합쳐서 요리하지 못한 게 문제일 것 같습니다. 개발할 때의 CI(Continuous Integration)도 비슷할 것 같습니다. 최근 각각의 PR단위에서는 문제가 없었지만, 배포 시 빌드가 되지 않던 경험이 있었습니다. 이를 사전에 해결하기 위해 도입한 Github Actions 내용을 공유드립니다. 2)..