분류 전체보기
-
Setter, 맥락 이해가 되지 않아요!Java & Kotlin 2023. 4. 3. 01:34
1) 서론혹시 새로운 업무를 맡았을 때 이전의 업무 맥락을 파악하기 어려웠던 적이 있으신가요? 아마도 이유는 다양할 것 같습니다. 새로 맡은 업무가 너무 생소할 수도 있고요. 혹은 너무 많은 업무들이 한 번에 들이닥쳐서 무언가 정리할 시간이 없었을 수도 있습니다. 하지만 제가 경험했을 때 가장 힘들었던것은 어떤 문제 해결에 있어서 과정없이, 결론만 남아있을 때인데요. 예를 들어 A라는 문제가 발생한 슬랙 스레드가 존재하고, 댓글에는 단순히 "해결됐습니다~" 라는 것만 존재할 때 가장 당황스럽습니다. 무엇을, 어떻게, 왜 해결했는지에 대한 과정 없이 그저 한 문장으로 모든 것을 생략했기 때문입니다. "정말로 해결한것은 맞을까", "도대체 뭘 어떻게 해결했다는 것인가", "같은 문제가 발생했을 때 어떻게 할..
-
모든 햄버거는 다르다, Strategy PatternJava & Kotlin 2023. 3. 29. 14:15
1) 서론혹시 무언가를 얻기 위해 협상을 했던 적이 있나요? 어릴 적 어린이날 선물을 받고 싶어 부모님께 청소를 열심히 하겠다고 했던 적이 있는데요. 당시 부모님께서 자신이 먹은 그릇을 치우고, 어지럽힌 것을 치우는 것은 당연하다고 말씀하셨던 게 기억이 납니다. 청소라는 전략을 사용해서는 어린이날 선물을 받을 수 없다는 것을 깨닫고, 어린이날까지 높임말을 잘 쓰겠다는 전략으로 변경했고 부모님께서는 흔쾌히 승낙했습니다. 아마도 예의를 중요시 여기는 아버지께서는 내심 그러한 것을 바라셨는지도 모르겠습니다. 이렇듯 현실에서 당연히 될것이라고 선택했던 전략이 통하지 않을 때가 많습니다. 왜냐하면 인생은 실전이고, 한 치 앞도 알 수 없습니다. 이럴 때 중요한 것은 기존 전략에 대한 고집을 버리고, 빠르게 다른 ..
-
[퇴사 회고] 너무 좋은데, 퇴사합니다.회고 2023. 3. 15. 20:45
1) 퇴사는 처음이라...나는 오늘 퇴사했다. '퇴사'라는 단어는 나에게 참 어색하다. 그동안은 실습, 인턴을 하며 예정된 끝이 존재했었다. 그래서 항상 회사를 떠나는 것이 당연했고, 때로는 드디어 끝이구나 하는 생각도 했었다. 마치 방학을 기다리는 학기 중 학생 같았다. 정해진 기간이 없는 정규직으로서 일을 하는 것은 처음이었다. 끝이 보이지 않는 지평선으로 달리던 것을 나 스스로 그만두어야 했다. 퇴사는 처음이라 어떻게 해야 잘할 수 있을지 고민했다. 왠지 이 회사에서 나의 마지막 업무처럼 다가왔고, 이 업무 또한 잘 해내고 싶었다. 하지만 역시 인생은 고민한 대로 흘러가지 않고, 막상 닥치면 본능대로 하게 된다. 그동안 일을 잘할 수 있게 도와주신 분들을 찾아뵙고 인사를 드렸다. 몇몇 분께서는 아쉬..
-
Spring Cloud Sleuth + logback 적용기Spring Framework 2023. 2. 1. 20:06
1) 서론 기존의 단일 모듈로 구성되어 있던 것을 MSA로 분리하면서 로그 추적이 매우 힘들어진 것을 경험했습니다. 이전에는 하나의 클라이언트 요청에 대해서 하나의 서버에서만 처리를 담당했습니다. 다연히 트랜잭션을 잘 확인한다면 전체 로그 추적이 어렵지 않았는데요. MSA로 분리하게 되면서 하나의 클라이언트 요청에 대해 서버 - 서버 통신이 아주 많이 발생하고 있습니다. 여러개의 서버를 요청하여 하나의 클라이언트 응답으로 만들어 주는 경우가 늘어났습니다. 위와 같이 여러 서버를 통신했을 때 각 서버의 요청은 별도의 트랜잭션으로 동작합니다. 이 때문에 하나의 서버에서 오류가 발생했을 때 전체 흐름을 추적하기 힘들어집니다. 특히 멀티 쓰레드를 활용하여 다수의 요청이 발생하게 되면 더더욱 파악하기 어려워집니다..
-
Dependency Injection, 그 참을 수 없는 유연함Java & Kotlin 2023. 1. 3. 03:27
1) 서론 혹시 자신의 친구를 누군가에게 소개해준 경험이 있으신가요? 20대 초반, 내 친구 정도면 아주 훌륭하다고 생각하며 또 다른 친구에게 소개팅을 해준 적이 있는데요. 만약 잘 안되더라도 세 명이서 좋은 친구가 되면 좋을 것 같다는 생각이 들었었습니다. 하지만 인생은 실전입니다. 언제나 최악이 기다리고 있었는데요. 두 친구는 잘 사귀던 중 어떠한 문제로 인해 크게 싸우고 헤어졌습니다. 주선자인 저도 괜히 가운데서 어색해졌는데요. 둘 중 누구를 만나기에도 어색한 상황이 되었었던 기억이 있습니다. 당시에 많이 후회했었습니다. 나와 완전히 연관된 친구가 아닌, 친구의 친구를 소개시켜줬다면 어땠을까라는 생각이 들었습니다. 그러면 지금처럼 가운데에서 난감한 상황이 벌어지지 않았을 수도 있을 것 같습니다. 개..
-
[2022년 회고] 앞만 보고 달렸다. 그런데 주변은?회고 2023. 1. 1. 01:13
1) 앞만 보고 달린 2022년, 그런데 주변은? 2021년 9월 27일 처음으로 개발자가 되었다. 2021년은 개발자로서, 회사원으로서 적응하는데 시간을 보냈었다. 혼자서 개발하는 것에서 벗어나 많은 사람들과 개발하고, 대화를 잘할 수 있는 고민을 했던 것 같다. 2022년은 쏟아지는 수많은 현실 문제를 해결하는데 집중했다. 클라우드가 아닌, IDC 로컬 서버에서 운영 중인 서버는 언제 멈출지 모르는 시한폭탄과 같았다. IDC에 계약된 물리적인 하드웨어 스펙이 너무나도 부족한 상태에서 DB 커넥션은 항상 모자랐다. 이런 심각성을 아는지 모르는지 N+1 쿼리, 끝나지 않는 긴 트랜잭션, 데드락 등 온갖 문제점들이 터져나왔다. 알 수 없는 스케줄링된 배치 코드가 동작을 해서 뜬금없이 새벽에 서버가 죽기도 ..
-
MySQL 트랜잭션 lock 충돌 오류 개선하기Java & Kotlin 2022. 11. 27. 21:12
1) 서론 이번 글에서는 MySQLTransactionRollbackException의 발생 원인을 분석하고 개선 방안을 고민해보는 글입니다. 그리고 JPA를 사용하다 보면 동일한 상황에서 발생하는 PessimisticLockingFailureException도 함께 알아보려고 합니다. 나름대로의 방법을 찾았지만, 더 좋은 아이디어를 댓글로 주신다면 감사히 받겠습니다. 2) MySQLTransactionRollbackException가 발생하는 이유 아래와 같은 상황을 가정합니다. TR은 transaction의 약자로 사용합니다. TR1 test 테이블 데이터 전체 삭제 TR1 lock 획득 후 실행 중 TR2 삭제 요청 이때 TR2는 실행될 수 있을까요? 아래와 같이 코드를 작성합니다. TR1: 테이블..
-
HikariCP, 일단 connection 맺어 본다Database 2022. 11. 16. 23:18
1) 서론 이번 글에서는 HikariCP의 설정에 대해서 공부한 것을 공유드리려고 합니다. 이미 설정을 해보시고 테스트해본 분께는 쉬운 내용이므로 읽지 않으셔도 좋습니다. 2) 아이디어 출발점 중요한 새로운 모바일 애플리케이션 출시를 앞두고 있었습니다. 사용자들은 업데이트 후 재로그인이 필수인 상황 대대적인 공지로 인해 오전 평소보다 많은 요청 발생 예상 매우 제한된 IDC 레거시 인증 담당 서버의 담당자는 하필 주니어인 나... 배포를 앞두고 걱정이 되어 괜히 이래저래 문제가 없을지 고민해봅니다. 이미 계약된 IDC의 물리적인 하드웨어 스펙은 현재 개선할 수 없습니다. 그래서 애플리케이션과 DB의 설정을 확인해보는데요. 혹시 N+1 쿼리가 발생할 수 있는지 확인 DB connection 부족하지 않은지..