분류 전체보기
-
코틀린 setter, 어디까지 써봤니?Java & Kotlin 2023. 5. 30. 01:46
1) 서론 혹시 이도저도 못 하는 경험을 해보신 적 있으신가요? 저는 식당에서 메뉴를 고르는 것을 어려워하는데요. 특히 중국집에서 절정에 다다릅니다. 짜장면을 시키면, 매콤한 짬뽕국물이 먹고 싶어 집니다. 하지만 짬뽕을 시켰을 때 너무 매우면 어쩌지 하며, 짜장면이 먹고 싶기도 합니다. 그러면서 볶음밥을 먹는 게 더 좋지 않을까 고민합니다. 중요한 것은 무엇을 먹든 trade-off가 존재합니다. 짜장면을 먹으면 매운 것을 피할 수 있지만 국물을 포기해야 합니다. 개발에서도 마찬가지인데요. 이번에 코틀린으로 개발하며 entity를 만드는데 고민이 들었습니다. 자바에서 lombok @getter + priavte 필드로 생성하던 것을 코틀린에서는 어떤 방식이 좋을지 고민됐습니다. 이번 글에서는 위의 문제에..
-
공통 기능은 도메인을 몰랐으면 좋겠다Java & Kotlin 2023. 5. 26. 15:30
1) 서론 아마도 모든 애플리케이션에는 common, core 등으로 불리는 공통 기능들이 있을 것 같은데요. 이번에는 이러한 공통 기능을 제공하며, 여러 도메인 사용자의 요청이 섞이면서 어려움을 겪었던 것을 공유드립니다. 2) 공통 기능을 제공해봐요 (모든 내용은 임의로 만든 것입니다) 모놀리식 A, B 도메인 서버 --> User 도메인 서버 요청 User 서버 요청하는 Feign client User 서버를 요청하는 Feign 클라이언트를 제공하게 되었는데요. 아무런 도메인이나 비즈니스 로직이 포함되어 있지 않습니다. 즉 어떠한 도메인에서 유저 정보가 필요하면 사용하고, 각 도메인에 맞게 유연하게 다룰 수 있습니다. 하지만 아래와 같이 수정 요청을 받습니다. A, B 도메인 공통으로 사용하기를 원함..
-
자기소개자기소개 2023. 5. 11. 01:15
빠르게 문제를 발견하고, 깊게 파고들어 근본 원인은 개선하고, 기록으로 공유하는 것을 좋아합니다. 특히 업무의 흐름과 문제 해결 과정을 기록하는 것을 중요하게 생각합니다. 이는 혼자 하는 일이 아닌, 협업의 가치를 중요하게 생각하기 때문입니다. 문서화를 사랑합니다. 기술을 사용자와 비즈니스의 필요에 맞게 적용시킬 수 있는 개발자가 되고 싶습니다. 특히 빠르게 변화하는 환경 속에서 유연하게 대처하고 싶습니다. 기술이 문제 해결의 전부가 아닌것을 믿습니다.링크드인linkedin.com/in/yeoncheol/GitHubgithub.com/YeonCheolGit이메일yeoncheol.jang@gmail.com
-
식탁위의 메뉴판, Local cache invalidateSpring Framework 2023. 5. 10. 23:47
1) 배경 설명 햄버거 가게에 들어갑니다. 그리고 각 식탁에 놓인 메뉴판을 보려고 하는데요. 메뉴판은 각 테이블에서 쉽게 볼 수 있어야 합니다 한 번 생성된 메뉴판은 거의 변경되지 않습니다 특정 테이블만 변경전 메뉴판 사용하더라도 심각한 문제는 아닙니다. 점원이 안내 후 새 메뉴판을 전달합니다. 2) 메뉴판을 조회합니다 DB에 저장된 메뉴 조회 (= 점원이 직접 메뉴판을 가져다주는 행위) 현재는 테이블에 메뉴판이 없습니다. 손님이 메뉴판을 보내는 방법은 이렇습니다. 손님은 점원을 불러야 합니다 점원은 메뉴판을 가지러 가야 합니다 점원은 메뉴판을 가지고 와야 합니다 손님은 메뉴판을 보기 위해 대기해야 합니다 만약 식사 중 메뉴판을 보기 위해서 다시 반복해야 합니다 메뉴판을 보기 위해서 위의 과정을 거쳐야..
-
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로 분리하게 되면서 하나의 클라이언트 요청에 대해 서버 - 서버 통신이 아주 많이 발생하고 있습니다. 여러개의 서버를 요청하여 하나의 클라이언트 응답으로 만들어 주는 경우가 늘어났습니다. 위와 같이 여러 서버를 통신했을 때 각 서버의 요청은 별도의 트랜잭션으로 동작합니다. 이 때문에 하나의 서버에서 오류가 발생했을 때 전체 흐름을 추적하기 힘들어집니다. 특히 멀티 쓰레드를 활용하여 다수의 요청이 발생하게 되면 더더욱 파악하기 어려워집니다..