⚙️
🌱
💻
🚀
Skip to content
thumbnail
AI
·📖 7분

월 100원도 안 되는 비용으로 블로그에 AI 기능 붙이기 (1편) - OpenAI + Netlify Functions

서론 코드를 작성하다 보면 문득 이런 생각이 들 때가 있습니다. “블로그에 코드 예시를 올려놓으면, 독자들이 다 이해할까?” 저도 함수형 프로그래밍 포스팅을 작성하면서 Stream API 코드 블록을 10개 넘게 올렸는데요. 코드 리뷰할 때도 이해하기 어렵다는 피드백을 받는데, 블로그에서는 오죽할까 싶었습니다. 그래서 이런 기능을 생각했습니다. “코드 블록마다 AI 설명 버튼을 달면 어떨까?” 구글에 “gatsby opena…

  • #AI
  • #OpenAI
  • #Netlify Functions
thumbnail
Java
·📖 8분

JDK 17 vs JDK 21 비교 - 임대운영 서비스 관점에서

서론 최근 팀에서 JDK 버전 업그레이드 검토 회의를 했습니다. 현재 JDK 11을 쓰고 있는데, 17로 갈지 21로 갈지 의견이 나뉘더군요. 사실 이전 회사(DAU 10만 메신저 서비스)에서는 이런 고민이 단순했습니다. “성능 좋은 거 쓰면 되지” 였죠. 실시간 메시징이라 동시 접속자 수천 명을 감당하려면 스레드 관리가 생명이었으니까요. 하지만 지금은 다릅니다. 저희는 임대운영 서비스업을 하는 회사입니다. MAU 2,000…

  • #Java
  • #JDK 17
  • #JDK 21
thumbnail
SpringFW
·📖 6분

멀티 벤더 IoT 연동 설계하기 (2편) - Event-Driven Architecture로 확장하기

서론 이전 편에서는 Adapter 패턴으로 여러 제조사 API를 통합하는 방법을 다뤘습니다. 그런데 서비스가 커지면서 새로운 요구사항이 계속 들어왔습니다. “기기 제어 성공하면 사용자한테 푸시 알림 보내주세요.” “IoT 기기 제어 이력을 남겨서 통계 내야 해요.” “제어 실패 시 슬랙으로 알림 보내주세요.” “기기 사용 패턴 분석을 위해 데이터를 수집해야 합니다.” 처음엔 에 코드를 추가했습니다. 한두 개는 괜찮았는데, 요…

  • #Spring
  • #Event-Driven Architecture
  • #IoT
thumbnail
SpringFW
·📖 6분

멀티 벤더 IoT 연동 설계하기 (1편) - Adapter 패턴으로 통합하기

서론 “각 제조사 API 연동 언제까지 걸릴까요?” 기획자의 질문에 저는 이렇게 대답했습니다. “첫 번째 제조사는 2주, 두 번째는… 아마 1주? 세 번째부터는 2-3일이면 될 것 같습니다.” “왜 점점 빨라지나요?” 그게 바로 제가 이번에 설계한 추상화 레이어의 힘입니다. 저희 서비스는 IoT 기기 제어 기능을 제공합니다. 문제는 각 제조사마다 API가 완전히 다르다는 점이었습니다. 같은 “조명 켜기” 기능인데, A사는 ,…

  • #Spring
  • #IoT
  • #Design Pattern
thumbnail
SpringFW
·📖 5분

AWS Lambda + AOP로 분산 캐시 무효화하기

서론 저희 서비스는 로컬 캐시를 사용합니다. Redis 같은 외부 캐시 서버를 쓰면 되지 않냐고요? 네, 맞습니다. 그게 정석입니다. 하지만 현실은 그렇게 이상적이지 않았습니다. 레거시 시스템에 이미 깊숙이 박혀있는 로컬 캐시를 당장 걷어낼 수도 없었고, 급하게 캐시 불일치 문제를 해결해야 하는 상황이었거든요. 이번 포스팅에서는 “최선이 아닌, 하지만 우리 상황에서는 최선이었던” 해결 방법에 대해 이야기하려고 합니다. 문제 …

  • #Spring
  • #AWS Lambda
  • #AOP
thumbnail
Spring
·📖 9분

복잡한 비즈니스 로직에 파사드 패턴 적용하기 - 200줄 메서드 정복기

서론 코드 리뷰 때 팀원이 제 화면을 보더니 이렇게 말했습니다. “이 메서드… 스크롤이 언제 끝나요?” 200줄짜리 메서드였습니다. 외부 시스템에서 데이터를 받아와서 우리 DB에 저장하는 로직인데, 비즈니스 규칙이 복잡하다 보니 if문과 예외 처리가 중첩되면서 점점 비대해졌죠. “이거 수정할 때마다 겁나요. 뭘 건드리면 어디가 터질지 모르겠어요.” 팀원의 말이 뼈아프게 다가왔습니다. 저도 이 코드를 6개월 만에 다시 보면 3…

  • #Refactoring
  • #Clean Code
  • #Facade Pattern
thumbnail
Spring
·📖 6분

Checked Exception을 버린 이유 - @Transactional 롤백 전략

서론 실무에서 트랜잭션 관리를 하다 보면 정말 황당한 버그를 만날 때가 있습니다. 분명히 예외가 발생했는데 데이터베이스에는 일부 데이터만 저장되어 있는 경우입니다. 주문은 생성됐는데 결제 정보는 없고, 사용자 정보는 업데이트됐는데 로그는 남지 않은 상황이죠. 저는 이런 문제를 입사 후 첫 달에 마주했습니다. 원인을 파악하는 데만 이틀이 걸렸고, 결국 범인은 Checked Exception이었습니다. 이번 포스팅에서는 왜 저희…

  • #Spring
  • #Transaction
  • #Exception Handling
thumbnail
블로그 개발
·📖 5분

Gatsby 블로그 관리자 기능 총정리 - Netlify CMS 활용편

서론 블로그를 운영하면서 가장 불편했던 점은 포스팅을 작성할 때마다 마크다운 파일을 직접 수정하고 Git에 커밋해야 한다는 것이었습니다. 솔직히 처음엔 괜찮았는데, 이런 번거로움이 쌓이다 보니 자연스럽게 글을 쓰는 빈도가 줄어들더군요. 그래서 Netlify CMS를 도입해서 웹 브라우저에서 편하게 글을 관리할 수 있는 시스템을 만들었습니다. 추가로 구독자 관리 기능도 직접 개발해서 통합했고, 생각보다 꽤 쓸만한 관리자 시스템…

  • #Gatsby
  • #Netlify CMS
  • #Blog
thumbnail
Java
·📖 6분

실무에서 마주한 함수형 프로그래밍 - 명령형에서 선언적으로

서론 코드 리뷰 시간, 팀장님이 제 코드를 보시더니 물으셨습니다. “이 메서드, 뭐 하는 거예요?” 저는 자신 있게 설명했습니다. “고객 목록에서 활성 상태인 VIP 고객들의 이번 달 총 구매액을 계산하는 로직입니다.” “아… 그렇군요. 근데 코드를 읽어도 그게 잘 안 보이네요.” 순간 당황했습니다. 제가 작성한 코드였는데도, 다시 보니 정말 한눈에 이해가 안 됐습니다. 3단계 중첩 루프에 if문이 여러 개… 로직은 맞지만 …

  • #Java
  • #Functional Programming
  • #함수형 프로그래밍
thumbnail
Spring
·📖 7분

ForkJoinPool로 병렬 처리하기 (2편) - 20배 빠른 배치 만들기

서론 이전 편에서는 배치가 느린 이유를 분석했습니다. 문제의 핵심: 독립적인 5개 작업을 순차 실행 5개 Step이 서로 독립적인데도 순차적으로 실행되면서 약 3시간이 걸렸습니다. 이론상으로는 병렬 실행하면 40~50분으로 줄일 수 있을 것 같았죠. 그런데 실제로 구현하고 나니 20배 이상 빨라졌습니다. 이번 편에서는 ForkJoinPool을 사용해서 병렬 처리를 구현한 과정과, 왜 예상보다 훨씬 더 빨라졌는지 공유합니다. …

  • #Spring Batch
  • #Performance
  • #ForkJoinPool