분류 전체보기
-
심심해서 살펴본 Querydsl fetchOne() 구현Java & Kotlin 2023. 8. 27. 17:19
(이번 글은 깊은 내용이 없으므로 가볍게 읽어주세요) 1) Querydsl이란? Querydsl은 JPA의 아쉬운 점을 보조하기 위해서 나왔습니다. JPA 명세를 구현한 ORM 프레임워크는 관계형 데이터베이스의 테이블 설계와 애플리케이션에서의 객체지향적인 설계가 맞지 않는 것을 해결하기 위해서 탄생되었는데요. 자바 코드를 활용하여 객체를 설계하고 테이블의 연관관계를 나타낼 수 있다는 것이 큰 장점입니다. 즉 테이블도 객체로서 바라보며 쿼리를 사용하고 조작할 수 있게 되었습니다. 주로 사용되는 구현체인 Hibernate는 기본적으로 String 기반의 메서드명을 활용하여 쿼리(HQL)를 사용하는데요. 단순 조회, 저장 등은 여전히 간결하고 쉽습니다. 하지만 여러개의 where절, join 등 발생하게 되면..
-
JPA Repository 기본 postfix로 인한 순환참조 해결Spring Framework 2023. 7. 30. 19:40
1) 서론 요즈음 스프링 프레임워크를 사용한다면 Spring Data JPA는 기본적으로 사용하게 되는데요. ORM 프레임워크는 RDB의 테이블을 객체로서 나타내고 맵핑할 수 있게 합니다. 애플리케이션에서 테이블에 질의할 때 쿼리와 데이터 중심이 아닌 객체로서 바라보는 것이 가능해졌습니다. 객체지향적인 설계에 큰 도움을 주게 됩니다. 이외에도 메서드를 활용하여 자동완성 되는 쿼리를 손쉽게 사용할 수 있는데요. 하지만 JDBCTemplate 같은것을 활용하여 쿼리를 날리는 것에 비해 주의해야 할 점이 많이 생겼습니다. 영속성 컨텍스트를 이해하지 못하거나 트랜잭션의 관리가 잘 되지 않는다면 예상치 못한 문제들이 발생할 수도 있는데요. 이번에는 Repository를 정의하고, 이에 대한 순환참조가 발생한것을 ..
-
Kotlin Coroutine과 CompletableFutureJava & Kotlin 2023. 7. 27. 02:42
1) 서론 혹시 비슷한 일들을 두고 다른 점을 찾기 어려웠던 경험이 있으신가요? 무언가 다르다고 주장하며 존재하지만 자신이 볼 때는 똑같다고 생각이 들 수도 있는데요. 저는 유독 안심, 등심 돈가스의 차이점에 대해서 공감하지 못했습니다. 안심 돈까스는 지방이 포함되어 부드럽고, 등심 돈가스는 좀 더 쫄깃한 식감을 느낄 수 있다고 하는데요. 실제로 매장에서도 다르게 판매하고 있지만 개인적으로는 똑같이 돼지고기를 튀긴 돈가스라고 생각했습니다. 우연히 모 돈까스 가게를 방문하고 등심+안심이 함께 나오는 세트를 주문했는데요. 평소의 궁금증을 해소하고자 실험정신을 발휘하여 번갈아가며 먹어봤습니다. 막상 진지하게 번갈아먹어 보니 확실히 안심이 더 부드러웠는데요. 이처럼 겉모습만 보거나, 깊게 알지 못하는 비슷한 일..
-
Kotlin coroutine dispatcher란?Java & Kotlin 2023. 6. 26. 00:28
1) 코루틴과 쓰레드는 달라요 코루틴(CoRoutine)과 쓰레드(Thread)는 매우 비슷해 보이는데요. 코틀린 프로그래밍을 하면서 무언가 동시적인(concurrency) 작업을 처리하기 위해서 자주 사용되기 때문일 것 같습니다. 쓰레드는 프로세스를 이루는 가장 작은 단위의 흐름입니다. 예를 들어 일정 간격으로 자동 저장되는 메모장 프로세스가 실행된다고 가정합니다. 타이핑을 치면서 I/O를 담당하고, 일정 간격을 확인하며 저장하는 쓰레드는 다를 것입니다. 즉 하나의 프로세스에 여러 개의 쓰레드가 동작하고 있다고 생각할 수 있습니다. 코루틴은 일시 정지, 재개할 수 있는 함수입니다. 즉 쓰레드처럼 프로세스를 구성하는 일꾼이 아닌, 하나의 함수일 뿐입니다. 그리고 코루틴은 단순히 하나의 쓰레드에서만 이루어..
-
코틀린 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
빠르게 문제를 발견하고, 깊게 파고들어 근본 원인은 개선하고, 기록으로 공유하는 것을 좋아합니다. 특히 업무의 흐름과 문제 해결 과정을 기록하는 것을 중요하게 생각합니다. 이는 혼자 하는 일이 아닌, 협업의 가치를 중요하게 생각하기 때문입니다. 문서화를 사랑합니다.기술을 사용자와 비즈니스의 필요에 맞게 적용시킬 수 있는 개발자가 되고 싶습니다. 특히 빠르게 변화하는 환경 속에서 유연하게 대처하고 싶습니다. 기술이 문제 해결의 전부가 아닌것을 믿습니다.링크드인http://linkedin.com/in/yeoncheolGitHubgithub.com/YeonCheolGit이메일yeoncheol.jang@gmail.com
-
식탁위의 메뉴판, Local cache invalidateSpring Framework 2023. 5. 10. 23:47
1) 배경 설명 햄버거 가게에 들어갑니다. 그리고 각 식탁에 놓인 메뉴판을 보려고 하는데요. 메뉴판은 각 테이블에서 쉽게 볼 수 있어야 합니다 한 번 생성된 메뉴판은 거의 변경되지 않습니다 특정 테이블만 변경전 메뉴판 사용하더라도 심각한 문제는 아닙니다. 점원이 안내 후 새 메뉴판을 전달합니다. 2) 메뉴판을 조회합니다 DB에 저장된 메뉴 조회 (= 점원이 직접 메뉴판을 가져다주는 행위) 현재는 테이블에 메뉴판이 없습니다. 손님이 메뉴판을 보내는 방법은 이렇습니다. 손님은 점원을 불러야 합니다 점원은 메뉴판을 가지러 가야 합니다 점원은 메뉴판을 가지고 와야 합니다 손님은 메뉴판을 보기 위해 대기해야 합니다 만약 식사 중 메뉴판을 보기 위해서 다시 반복해야 합니다 메뉴판을 보기 위해서 위의 과정을 거쳐야..