본문 바로가기

JAVA14

Koltin Gradle, Groovy Gradle 비교 주요 차이점 비교  장단점 장점단점 Groovy DSL - 간결한 문법- 더 나은 빌드 성능- 낮은 학습 곡선- 효율적인 증분 빌드 · 동적 타이핑으로 인한 타입 안전성 부족· IDE 지원이 상대적으로 약함 Kotlin DSL · 강력한 타입 안전성 · 우수한 IDE 지원 (자동완성, 오류 감지)· 리팩토링 용이성 · 상대적으로 장황한 문법 · 학습 곡선이 더 가파름  성능 비교[Gradle 개발자가 남긴 벤치마킹 정보] The Kotlin and Groovy DSLs should have similar performance characteristics · Issue #15886 · gradle/gradleExpected Behavior The Kotlin and Groovy DSLs have as .. 2025. 1. 21.
R2DBC-Proxy(DB Connection Proxy) 적용하기 적용 목적.  현재 WebFlux + R2DBC 환경에서 Join이 필요할 때 DatabaseClient을 이용한 Native Query으로 작성해서 DB에서 데이터를 가져오고 있습니다. Query를 작성할 때의 Human Issue가 발생하거나, ParameterBinding이 올바르게 진행되어 DB에 요청이 가는지 확인하기가 어렵습니다. public Flux findTableT1(String id) { return databaseClient.sql(queryStore.queryJoinTable2ByT1Id()) .bind("id", id) .map((row, rowMetadata) -> findTableT1Response.ofFindTableT1.. 2024. 7. 22.
Jackson Library 이해하기(Feat. Jackson NullPointerException) [상황]기존 코드 유지 보수 중, 수정 API 1개가 500 Error가 뜨고 있었습니다.  PostMan으로 API 호출을 진행하였을 때, NullpointException이 발생하였지만, DB에는 데이터가 변경된 것을 확인하였습니다.  API 구조 ※ 참고, Hexagonal Architecture으로 구성되어 있습니다. DB에 데이터가 변경되었다?→ Business Layer가 아닌 InBound Layer에서는 잘못되었다는 것이라고 생각하고 접근하기 시작하였습니다. InBound Layer을 생각하고, 코드 분석 및 디버깅을 돌렸을 때 Domain 객체를 그대로 응답으로 출력하고 있는 것을 확인되었습니다. get(Ex. getSearch)으로 시작하는 비즈니스 로직 함수가 존재하였으며, 해당 함수.. 2024. 5. 4.
Spring에서 Notification을 구현해보자(WebFlux, Reactor Sinks, SSE) 주의!! → 알림을 구현하기 위해서 경험을 정리한 글이며 대규모 트래픽은 환경은 아니지만, 알림(포탈, SMS, Email, Kakao Alim Talk)이 발생하는 서비스를 제공한 내용을 정리한 글입니다. → 잘못된 부분이 있을 수 있으며, 해당 부분에서는 바로바로 지적해주시면 정말 감사하겠습니다. [상황] 알림 서비스를 구현해야 하는 상황에 맞닥뜨렸다. 나는… 알림을 구현해본적이 없는데 먼저 구현하는 방법에 대해서 먼저 찾아보자!! 알림을 구현하는 방법에는 크게 4가지가 존재하며, 저는 SSE(Server-Sent Event)을 사용하였습니다. [알림을 구현하는 방법 4가지] 1) Short-Polling 클라이언트는 설정한 주기(예:2초)로 서버에 대한 요청을 반복한다. 장점 Client와 Serv.. 2024. 2. 27.
Spring Cache를 파헤쳐 보자!(WebMvc, WebFlux) 상황 여러 로직에서 간단한 정보를 조회가 반복되어 DB I/O 지속적으로 생기는 상황 자주 변하지도 않는 정보를 계속 I/O 생기도록 유지하는 것이 맞는가?? 프로젝트 시연 중, 갑자기 조회하는 로직에서 시간을 무지막지하게 잡아먹는 상황 원인 파악하기에는 시간이 부족하고…. Redis와 같은 외부 캐시 서버를 사용할 상황이 아닐 때…. Redis는 너무 Over-Spec이야 어떻게 해야 하지??? ► Spring Cache!!! 원인을 파악할 시간이 없어… 일단 조회 관련 급한 불은 꺼야 하는데 ► Spring Cache!!! Caching? 오랜시간이 걸리는 작업의 결과를 저장해서 시간과 비용을 필요로 회피하는 기법 캐시가 있을 때 1 → 2 → 3 → 6 캐시가 없을 때 1 → 2 → 4 → 5 → .. 2023. 12. 13.
[JAVA] Character형 숫자, 알파벳인지 확인하기 Character.isDigit/Character.isAlphabetic 상황 import java.io.*; public class Main { //입력값이 항상 숫자와 알파벳으로 구성된 문자열이 들어온다고 가정! public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); for(int i=0;i= 65) System.out.println(c + "는 알파벳입니다."); else System.out.println(c + "는 숫자입니다."); } } } if문 + 아스키 코드를 사용하여 각 char의 문자가 숫자인지 알파벳인지 확인하고 있습니다.. 2023. 2. 19.