개발/Java

Optional은 정말로 필요한가? (feat. JSpecify)

필자는 실무에서 처음 Java를 사용할 때부터 Optional을 싫어했습니다. 최소한 한 번은 팀에서 "Optional을 사용하지 말자"는 의견을 제안하는데요.이제는 시간을 아끼고자 이런 생각을 정리해서 블로그로 기록하려합니다.   Optional의 본래 목적  - [출처]  Java Language Architect 중 한 명인 Brian Goetz의 말을 따르면, Java 8에서 Optional을 추가한 목적은라이브러리 메서드에서 반환값이 없을 수도 있음을 명확히 표현하기 위함이었다고 합니다. 이는 라이브러리 메서드에서, 특히 메서드 체이닝과 같은 경우, 아래 방식으로 처리하는 것보다 Method matching =    Arrays.asList(enclosingInfo.getEnclosingClas..

2024.12.29 게시됨

개발

Mikado Method와 레거시 개선 계획을 짜보자

레거시 시스템은 개발자들에게 늘 고통을 안겨줍니다.  기술 부채가 쌓인 코드베이스를 마주할 때마다“이걸 고치기 시작하면 끝이 보이지 않을 텐데…”라는 생각이 들곤 합니다. 하지만 레거시를 방치할수록 시스템의 유지보수성과 확장 가능성은 악화되고, 이는 결국 비즈니스의 발목을 잡습니다.결국은 개발자들은 기술 부채 상환을 위해 대규모 리팩토링을 제안하게 됩니다.(슬픈 소방수의 삶) 그러나 우리는 개발자이기 전에, 회사에서 비즈니스 목표를 달성하기 위해 일하는 회사원이기도 합니다.이 말은, 어떤 작업을 수행하든 명확한 근거와 체계적인 계획이 요구된다는 뜻입니다.단순히 "더 좋은 코드"를 위해 리팩토링을 제안하는 것은 윗선의 설득력을 얻기 어렵습니다. Mikado Method 란? 미카도 메서드는 복잡한 리팩토링..

2024.11.29 게시됨

개발

ArchUnit을 사용하여 공통 개발 컨벤션을 검증하자

개발자로서 회사생활을 하다 보니 팀원들과 개발 컨벤션을 정의하고 합의된 컨벤션을 유지할 수 있도록 노력하고 있습니다.  하지만 노력만으론 부족합니다. 팀원들 간에 합의가 되었다고 해도 사람은 언제나 실수할 수 있습니다. 실수로 컨벤션을 어긴 코드를 작성할 가능성이 있으며, 이는 코드리뷰에서 발견될 수밖에 없습니다.그러나 코드리뷰 과정에서 이미 합의된 컨벤션까지 확인하는 것은 팀원 간의 커뮤니케이션 비용을 증가시킵니다. 이런 상황이 반복되다보니 자연스레 테스트코드를 통해팀의 아키텍처와 코딩 컨벤션을 코드로 문서화하는 방법을 찾게 되었습니다. 해결책을 찾다가 ArchUnit을 찾게 되었고 위의 문제를 해결해보고자 합니다.예시코드는 "여기"에서 확인 할 수 있습니다.   ArchUnit이란 ArchUnit은 ..

2024.11.05 게시됨

개발

모두가 JPA를 외치는 세상에서 jOOQ를 꺼내다.

https://inf.run/2Fxib 실전 jOOQ! Type Safe SQL with Java | 설동민 - 인프런설동민 | jOOQ를 통해 Type Safe한 SQL의 강력함을 경험해보세요!, SQL은 불편하지 않습니다.SQL을 문자열로 작성하는 방식이 불편할 뿐입니다.실전 jOOQ! Type Safe SQL with Java데이터베이스와 SQL을 잘 다루www.inflearn.com 1. 인프런에 jOOQ 강의를 출시했다. 올해 컨퍼런스에서 발표를 하고, 인프런 강의를 출시하며jOOQ에 대해 가지고 있던 개인적인 생각들을 정리해보고 마무리해보려합니다. (주저리 주저리...)(사실 JPA가 불편하다고 글을 쓸땐 살짝 무섭습니다. ㅎㅎ)   2. 여태까지 jOOQ를 사용하며 고민한 글 2021년에 처..

2024.05.25 게시됨

개발/Spring

jOOQ를 JPA와 같이 써보자

jOOQ에 대해 좀 더 알아보자 라는 글을 쓴 지 벌써 8개월 가까이 지났습니다.현재 재직 중인 회사에서는 아직 jOOQ를 사용하지 않고 있는데요. 그래도 언젠가는 쓰일 수 있다는 생각에 기술검증을 하기 위해 이것저것 시도했었습니다. 삽질을 많이 하다 보니 혼자 알고 있기에는 아까운 점들이 있어 정리합니다.여러 고난이 있었고 jOOQ의 창시자의 도움을 받아 진행한 점도 있었습니다. 프로젝트에 jOOQ 또는 jOOQ + JPA 조합을 도입하길 원하시는 분들은이 글을 읽고 고민하시는 것도 좋을 듯합니다. - 본 포스트는 아래를 목표로 지정하고 작성하였습니다. 1. Gradle 환경에서 JPA 엔티티를 사용하여 jOOQ DSL 만들기2. 하나의 프로젝트에서 jOOQ와 JPA를 같이 사용하기 - 본 포스트는 독..

2022.09.10 게시됨

개발/Java

jOOQ 를 좀 더 알아보자

[입문] jOOQ에 대해 알아보자 에 대해 글을 쓴지 1년이 지났습니다. jOOQ에서 이것저것 커스텀을 해서 썼었는데 딱히 정리를 하지 않아서 필자가 자주 사용하는 일부 커스텀한 부분이나 겪었던 팁들을 정리하고자 합니다. 코드는 [여기] 서 확인 할 수 있습니다. 1. jOOQ는 앞으로 JAVA 11 부터 Jooq는 3.15 부터 Java 11이 요구됩니다.  [2021.07 release]자주 사용되는 jOOQ용 gradle 플러그인도 Java 8을 드랍하고 최소사양이 Java 11 이 되면서 앞으로 jOOQ를 사용하려면 이에 대응해야합니다.  기업용은 8까지 지원하지만, 플러그인에서 지원을 드랍했기 때문에 설정 삽질을 조금 해야할것으로 보이네요.  2.  jOOQ DSL에 전용 Prefix  생성 [..

2022.01.03 게시됨