전체 글
-
25년 1분기 회고카테고리 없음 2025. 3. 30. 22:39
벌써 25년 1분기가 끝나간다.. (마란돼.)지난 3달동안 꽤 많은 일들이 있었다. 현타 오기도 하고 재밌기도 하고 여러 감정이 오간 시간들이었다! AI가장 큰 이슈는 AI 열풍..!정말 개발자 패러다임이 바뀔 정도로 느껴질만큼 AI가 급속도로 발전하고 있다!!특히 Cursor를 써봤을 때 체감이 확 왔다.내가 만들고싶은 서비스를 Cursor에게 설명하고 만들어달라고 하면 뚝딱 만들어준다. 그런데 디자인은 조금 아쉬운데, creatie.ai 라는 디자인보조툴로 커버할 수 있다! 이 조합은 정말 금상첨화다… 위의 서비스는 v0로 만들어보았다.최근에 틴트에 빠져서 "잘 어울리는 틴트 조합을 추천해주는 서비스가 있었으면 좋겠다!"는 생각이 들어 v0로 만들어봤는데, 퀄리티가 꽤 괜찮아서 놀랐다. 심지어 D..
-
Spring Boot에서 Google Vertex AI Gemini 연동하기📖 개발 공부 2025. 3. 16. 21:46
최근 프로젝트에서 Gemini 모델을 Spring Boot에 연동하는 작업을 진행했다.이 과정에서 Google Cloud Vertex AI에서 제공하는 java-vertexai 라이브러리를 활용했다. 연동을 진행하면서 Gemini API 요청 시 다양한 옵션을 활용하여 원하는 방식으로 LLM을 제어할 수 있다는 점을 알게 되었다. 이 글에서는 Gemini 모델을 연동하는 과정과 함께 주요 설정값들을 정리해보려고 한다.Google Cloud Vertex AI란Google Cloud Vertex AI는 머신러닝(ML) 모델의 개발, 학습, 배포를 손쉽게 수행할 수 있도록 지원하는 통합 AI 플랫폼이다.Vertex AI를 사용하면 다음과 같은 작업을 수행할 수 있다.AutoML 모델 학습 및 배포사전 학습된 ..
-
[데이터 중심 애플리케이션 설계] 분산시스템의 골칫거리📚 개발 도서/데이터 중심 애플리케이션 설계 2025. 3. 2. 22:12
결함과 부분 장애단일 시스템은 결정적이다. (하드웨어가 올바르게 동작하면, 같은 연산은 항상 같은 결과를 낸다.)↔ 분산 시스템은 비결정적이다. (부분장애 → 어떨 때는 동작, 어떨 때는 실패)컴퓨터는 구현 기반이 되는 불분명한 물리적 현실을 감추고 수학적 완벽함을 갖고 동작하는 이상화된 시스템 모델을 보여준다.하지만, 네트워크로 연결된 여러 컴퓨터에서 실행되는 소프트웨어를 작성할 때는 근본적으로 상황이 다르다. 분산 시스템에서는 더이상 이상화된 시스템 모델에서 동작하지 않는다. 분산 시스템에서는 시스템의 어떤 부분은 잘 동작하지만 다른 부분은 예측할 수 없는 방식으로 고장날 수 있다.이를 부분 장애(partial failure)라고 한다. 부분 장애는 비결정적이라서 예측하기 어려운 문제를 일으킨다.클라..
-
메시지 큐 비교하기 (RabbitMQ, Kafka, SQS, Redis Pub/Sub)📖 개발 공부 2025. 2. 2. 23:03
회사에서 메시지 큐(Message Queue)를 도입해야 할 기회가 생겨 팀원과 함께 고민했다. 처음에는 가볍게 RabbitMQ, AWS SQS, Kafka, Redis Pub/Sub을 비교하며 선택했지만,각 메시지 큐의 특징과 차이점을 좀 더 깊이 이해하고 정리하고 싶었다. (개발 방향이 바뀌어 도입을 하진 않았다 😅) 이 글에서는 메시지 큐의 주요 기능과 차이점을 정리해보겠다. 메시지 큐 선택 기준한 메시지는 하나의 작업 서버에서만 처리해야 한다.중복 처리를 방지해야 함여러 작업 서버가 동시에 병렬적으로 처리할 수 있어야 한다.다수의 Consumer가 동시에 작업을 수행 가능해야 함빠른 성능이 중요하다.낮은 지연 시간 (Low Latency)높은 처리량 (High Throughput)이제 이 조건에..
-
코루틴 예외 처리: supervisorScope를 활용한 문제 해결📖 개발 공부/kotlin 2025. 1. 19. 15:16
후기 작성 이벤트 코드를 개발하던 중, 코루틴의 예외 처리로 인해 테스트 코드가 실패하는 문제가 발생했다.특정 유저가 이벤트 대상자인지 확인하는 로직에 코루틴이 적용되어 있었고, 다음과 같은 조건들을 비동기로 검증하고 있었다.이미 해당 업체에 후기를 작성했는지유효한 사용자인지이벤트 예산을 초과했는지문제 상황유효한 사용자인지 확인하는 조건은 다음과 같은 코드를 통해 검증하고 있었다.return runBlocking { val validUserDeferred = async(Dispatchers.IO) { checkValidUser(userId) } try { validUserDeferred.await() } catch (e: UserRestException) { return Respo..
-
2024 회고카테고리 없음 2025. 1. 5. 20:04
월별 회고1월, 2월, 3월#Study 기술 문서 읽고 정리하는 시간 갖기 시작 올해 초부터 일주일에 한번씩 기술 문서를 읽고 정리하는 시간을 가졌다. 관련 블로그 링크 >>Toss | null return은 코드 복잡성을 만든다.Line | 오픈채팅 시스템 설계Spring AOP를 Kotlin으로 개선해보기! (feat. 카카오페이 테크블로그)Toss | 서버 증설 없이 처리하는 대규모 트래픽Kotlin의 Value Class로 성능 최적화하기 (Codes like a class, works like an int.)Netflix | BFF에서 GraphQL Federation으로 전환기 이렇게 유익한 정보들도 얻고, 실제로 프로젝트에 적용해볼 수 있었다.(하지만 하반기 들어가서부터 점점 안하게 되었다는..
-
Spring Batch Partitioning로 대용량 데이터 마이그레이션 최적화 및 롱 트랜잭션 해결📖 개발 공부 2024. 12. 22. 21:58
Spring Batch Partitioning 도입이번 프로젝트에서 400만개 데이터 대상으로 마이그레이션 작업을 수행해야 했다. 기존에는 하나의 스레드에서 Reader, Processor, Writer를 순차적으로 처리했기 때문에, 대용량 데이터를 다루기에는 시간이 너무 오래 걸리는 문제가 있었다. (거의 5시간 이상이 걸렸다)그래서 이번에 id 기반으로 데이터를 파티션으로 분할하고, 각 파티션에서 병렬로 Reader/Processor/Writer를 동작하도록 파티셔닝 방식을 적용했다. 파티셔닝 방식은 다음과 같은 장점이 있다.독립적인 실행: 각 파티션은 독립적으로 실행되므로, 특정 파티션에서 오류가 발생해도 다른 파티션 작업에는 영향을 주지 않는다.효율적인 에러 관리: 각 파티션의 상태와 데이터 범위..
-
Hikari CP 설정 알아보기📖 개발 공부 2024. 11. 24. 21:07
최근 회사에서 DB 관련한 이슈가 꽤 발생했었다."Unable to acquire JDBC Connection 에러 발생""연결된 connection 수가 예상보다 2배 많은 상황""slow query가 잡혀서 error가 튀는 상황"…위 이슈들을 대응하면서, HikariCP의 동작 원리와 설정값들을 충분히 이해하고 있어야만 이슈 파악에 도움이 될 것이라는 생각이 들었다. 그래서 이번 기회에 HikariCP에 대해 정리해려고 한다!Connection Pool커넥션 풀(Connection Pool)은 데이터베이스와의 연결을 미리 생성해 두고, 필요할 때마다 이를 재사용하는 방식으로 성능을 최적화하는 기술이다. 커넥션을 매번 새로 생성하는 것은 시간이 많이 걸리고 리소스를 낭비할 수 있다. 커넥션 풀은 애플..