
  <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
      <title>Junyoung Yang</title>
      <link>https://jun0.dev/blog</link>
      <description>Junyoung Yang</description>
      <language>ko</language>
      <managingEditor>y@jun0.dev (Junyoung Yang)</managingEditor>
      <webMaster>y@jun0.dev (Junyoung Yang)</webMaster>
      <lastBuildDate>Wed, 06 May 2026 00:00:00 GMT</lastBuildDate>
      <atom:link href="https://jun0.dev/feed.xml" rel="self" type="application/rss+xml"/>
      
  <item>
    <guid>https://jun0.dev/blog/ollama-to-vllm-serving</guid>
    <title>AI 조교 기획 및 Ollama를 vLLM으로 전환해 동시 사용자 50명 처리하기</title>
    <link>https://jun0.dev/blog/ollama-to-vllm-serving</link>
    <description>Ollama 기반 LLM 서버의 동시 요청 병목을 분석하고 vLLM으로 전환해 동시 사용자 50명 수준까지 안정적으로 처리하도록 개선했습니다.</description>
    <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>대표글</category><category>llm</category><category>vllm</category><category>kubernetes</category><category>infra</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/ollama-to-vllm-serving</guid>
    <title>Planning an AI Teaching Assistant and Moving from Ollama to vLLM to Handle 50 Concurrent Users</title>
    <link>https://jun0.dev/blog/ollama-to-vllm-serving</link>
    <description>I analyzed the performance bottlenecks that appeared when concurrent requests increased on an Ollama-based LLM server, then moved the serving layer to vLLM so it could stably handle around 50 concurrent users.</description>
    <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>대표글</category><category>llm</category><category>vllm</category><category>kubernetes</category><category>infra</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/k3s-vllm-gpu-workload</guid>
    <title>k3s에서 vLLM GPU 워크로드 실행하기</title>
    <link>https://jun0.dev/blog/k3s-vllm-gpu-workload</link>
    <description>Code Place AI 조교 기능을 운영 클러스터에서 실행하기 위해 NVIDIA 드라이버, runtime, k3s containerd, RuntimeClass, device plugin 설정을 맞췄습니다.</description>
    <pubDate>Sat, 02 May 2026 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>대표글</category><category>kubernetes</category><category>k3s</category><category>vllm</category><category>cuda</category><category>infra</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/k3s-vllm-gpu-workload</guid>
    <title>Running a vLLM GPU Workload on k3s</title>
    <link>https://jun0.dev/blog/k3s-vllm-gpu-workload</link>
    <description>Setting up the NVIDIA driver, runtime, k3s containerd, RuntimeClass, and device plugin needed to run the Code Place AI assistant on an operations cluster.</description>
    <pubDate>Sat, 02 May 2026 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>대표글</category><category>kubernetes</category><category>k3s</category><category>vllm</category><category>cuda</category><category>infra</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/longhorn-cnpg-troubleshooting</guid>
    <title>WAL 폭주 이후 Longhorn/CNPG 장애 복구기</title>
    <link>https://jun0.dev/blog/longhorn-cnpg-troubleshooting</link>
    <description>Code Place 운영 중 WAL 증가로 시작된 디스크 부족 장애를 Longhorn replica 조정, CNPG 복구, multipathd 간섭 해결, 디스크 추가, WAL 상태 점검으로 복구했습니다.</description>
    <pubDate>Mon, 27 Apr 2026 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>대표글</category><category>kubernetes</category><category>longhorn</category><category>cnpg</category><category>postgresql</category><category>infra</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/longhorn-cnpg-troubleshooting</guid>
    <title>Recovering a Longhorn and CNPG Failure After WAL Growth</title>
    <link>https://jun0.dev/blog/longhorn-cnpg-troubleshooting</link>
    <description>Recovering a Code Place disk pressure failure that started with WAL growth by adjusting Longhorn replicas, restoring CNPG, resolving multipathd interference, adding disk space, and checking WAL state afterward.</description>
    <pubDate>Mon, 27 Apr 2026 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>대표글</category><category>kubernetes</category><category>longhorn</category><category>cnpg</category><category>postgresql</category><category>infra</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/longhorn-mount-conflict-multipathd</guid>
    <title>Longhorn Mount Conflict와 multipathd 간섭 가능성 추적</title>
    <link>https://jun0.dev/blog/longhorn-mount-conflict-multipathd</link>
    <description>WAL 폭주 이후 Longhorn·CNPG 복구 과정에서 발생한 볼륨 마운트 실패를 Kubernetes 이벤트, share-manager, ext4 메시지, multipathd 간섭 가능성으로 추적했습니다.</description>
    <pubDate>Thu, 23 Apr 2026 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>대표글</category><category>longhorn</category><category>kubernetes</category><category>linux</category><category>storage</category><category>infra</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/longhorn-mount-conflict-multipathd</guid>
    <title>Longhorn Mount Conflict and Possible multipathd Interference</title>
    <link>https://jun0.dev/blog/longhorn-mount-conflict-multipathd</link>
    <description>Tracing a Longhorn volume mount failure after WAL growth through Kubernetes events, share-manager state, ext4 messages, and possible multipathd interference.</description>
    <pubDate>Thu, 23 Apr 2026 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>대표글</category><category>longhorn</category><category>kubernetes</category><category>linux</category><category>storage</category><category>infra</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/grit-livekit-senddata-events</guid>
    <title>GRIT에서 LiveKit SendData로 방 이벤트 전달하기</title>
    <link>https://jun0.dev/blog/grit-livekit-senddata-events</link>
    <description>GRIT 실시간 화상 스터디 플랫폼에서 LiveKit SendData로 이모지 리액션과 포모도로 타이머 상태를 방 안에 전달하는 구조를 설계했습니다.</description>
    <pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>spring-boot</category><category>livekit</category><category>webrtc</category><category>realtime</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/grit-livekit-senddata-events</guid>
    <title>Sending GRIT Room Events with LiveKit SendData</title>
    <link>https://jun0.dev/blog/grit-livekit-senddata-events</link>
    <description>Using LiveKit SendData in GRIT to deliver emoji reactions and Pomodoro timer state inside a real-time video study room.</description>
    <pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>spring-boot</category><category>livekit</category><category>webrtc</category><category>realtime</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/spring-security-filter-exception-handling</guid>
    <title>Spring Security 필터 예외 처리 방식 정리</title>
    <link>https://jun0.dev/blog/spring-security-filter-exception-handling</link>
    <description>GRIT의 JWT 인증 필터 에러가 공통 응답이 아니라 Tomcat 500으로 내려오던 문제를 기준으로 Spring Security 필터 예외 처리 흐름을 정리했습니다.</description>
    <pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>대표글</category><category>spring-security</category><category>jwt</category><category>spring-boot</category><category>backend</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/spring-security-filter-exception-handling</guid>
    <title>Understanding Exception Handling in Spring Security Filters</title>
    <link>https://jun0.dev/blog/spring-security-filter-exception-handling</link>
    <description>Tracing why JWT authentication filter errors in GRIT bypassed the common API response and handling them at the correct Spring Security layer.</description>
    <pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>대표글</category><category>spring-security</category><category>jwt</category><category>spring-boot</category><category>backend</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/entity-validation-refactoring</guid>
    <title>반복 null 체크를 줄인 엔티티 검증 로직 리팩토링</title>
    <link>https://jun0.dev/blog/entity-validation-refactoring</link>
    <description>GRIT 사용자 프로필 초기화·수정 로직에서 반복되던 검증과 대입 흐름을 엔티티 내부 규칙으로 정리했습니다.</description>
    <pubDate>Fri, 06 Mar 2026 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>java</category><category>refactoring</category><category>validation</category><category>domain-model</category><category>backend</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/entity-validation-refactoring</guid>
    <title>Refactoring Entity Validation Logic to Reduce Repeated Null Checks</title>
    <link>https://jun0.dev/blog/entity-validation-refactoring</link>
    <description>Moving repeated validation and assignment logic in GRIT&#39;s user profile flow into entity-level rules.</description>
    <pubDate>Fri, 06 Mar 2026 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>java</category><category>refactoring</category><category>validation</category><category>domain-model</category><category>backend</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/grit-observability-prometheus-loki-grafana</guid>
    <title>GRIT 모니터링 구성: Prometheus + Loki + Grafana + Spring Actuator</title>
    <link>https://jun0.dev/blog/grit-observability-prometheus-loki-grafana</link>
    <description>GRIT 운영 준비를 위해 Spring Actuator, Prometheus, Loki, Grafana로 메트릭과 로그를 수집하고 확인할 수 있는 기본 모니터링 구성을 만들었습니다.</description>
    <pubDate>Thu, 19 Feb 2026 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>spring-boot</category><category>prometheus</category><category>loki</category><category>grafana</category><category>monitoring</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/grit-observability-prometheus-loki-grafana</guid>
    <title>GRIT Monitoring Setup: Prometheus + Loki + Grafana + Spring Actuator</title>
    <link>https://jun0.dev/blog/grit-observability-prometheus-loki-grafana</link>
    <description>Preparing GRIT operations by collecting and checking metrics and logs with Spring Actuator, Prometheus, Loki, and Grafana.</description>
    <pubDate>Thu, 19 Feb 2026 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>spring-boot</category><category>prometheus</category><category>loki</category><category>grafana</category><category>monitoring</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/timetable-ai-recognition</guid>
    <title>시간표 이미지 AI 인식 및 프롬프트 개선</title>
    <link>https://jun0.dev/blog/timetable-ai-recognition</link>
    <description>UniSchedule에서 시간표 이미지를 일정 데이터로 변환하기 위해 GPT Vision과 Structured Output을 사용하고 프롬프트를 개선했습니다.</description>
    <pubDate>Mon, 27 Oct 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>ai</category><category>prompt-engineering</category><category>structured-output</category><category>backend</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/timetable-ai-recognition</guid>
    <title>Timetable Image Recognition and Prompt Improvement</title>
    <link>https://jun0.dev/blog/timetable-ai-recognition</link>
    <description>Using GPT Vision and Structured Output in UniSchedule to convert timetable images into schedule data and improve prompt reliability.</description>
    <pubDate>Mon, 27 Oct 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>ai</category><category>prompt-engineering</category><category>structured-output</category><category>backend</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/unischedule-redis-pubsub-schedule-events</guid>
    <title>멀티 인스턴스 환경에서 채팅 메시지 전파하기: Redis Pub/Sub</title>
    <link>https://jun0.dev/blog/unischedule-redis-pubsub-schedule-events</link>
    <description>UniSchedule의 멀티 인스턴스 환경에서 일부 사용자에게 채팅 메시지가 전달되지 않던 문제를 Redis Pub/Sub으로 해결했습니다.</description>
    <pubDate>Tue, 14 Oct 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>대표글</category><category>spring-boot</category><category>redis</category><category>pubsub</category><category>aws</category><category>architecture</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/unischedule-redis-pubsub-schedule-events</guid>
    <title>Propagating Chat Messages in a Multi-Instance Environment: Redis Pub/Sub</title>
    <link>https://jun0.dev/blog/unischedule-redis-pubsub-schedule-events</link>
    <description>Using Redis Pub/Sub in UniSchedule to deliver chat messages reliably across multiple application instances.</description>
    <pubDate>Tue, 14 Oct 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>대표글</category><category>spring-boot</category><category>redis</category><category>pubsub</category><category>aws</category><category>architecture</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/webclient-vs-resttemplate</guid>
    <title>WebClient와 RestTemplate 선택 기준 정리</title>
    <link>https://jun0.dev/blog/webclient-vs-resttemplate</link>
    <description>UniSchedule에서 외부 API를 연동하며 Spring의 공식 지원 방향, 설정 유연성, 현재 MVC 구조를 기준으로 RestTemplate과 WebClient 중 WebClient를 선택했습니다.</description>
    <pubDate>Thu, 18 Sep 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>spring</category><category>webclient</category><category>http-client</category><category>backend</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/webclient-vs-resttemplate</guid>
    <title>Choosing Between WebClient and RestTemplate</title>
    <link>https://jun0.dev/blog/webclient-vs-resttemplate</link>
    <description>How I chose WebClient over RestTemplate in UniSchedule based on Spring&#39;s direction, configuration flexibility, and the existing MVC structure.</description>
    <pubDate>Thu, 18 Sep 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>spring</category><category>webclient</category><category>http-client</category><category>backend</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/ondelete-vs-jpa-cascade</guid>
    <title>@OnDelete와 JPA Cascade 선택 기준 정리</title>
    <link>https://jun0.dev/blog/ondelete-vs-jpa-cascade</link>
    <description>상품 삭제 시 옵션까지 함께 삭제해야 하는 요구사항에서 Hibernate @OnDelete와 JPA Cascade를 비교하고 영속성 컨텍스트 일관성까지 고려했습니다.</description>
    <pubDate>Sun, 29 Jun 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>jpa</category><category>hibernate</category><category>cascade</category><category>database</category><category>backend</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/ondelete-vs-jpa-cascade</guid>
    <title>Choosing Between @OnDelete and JPA Cascade</title>
    <link>https://jun0.dev/blog/ondelete-vs-jpa-cascade</link>
    <description>How I compared Hibernate @OnDelete and JPA Cascade for deleting product options while keeping persistence context consistency in mind.</description>
    <pubDate>Sun, 29 Jun 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>jpa</category><category>hibernate</category><category>cascade</category><category>database</category><category>backend</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/circular-reference-lazy-limit</guid>
    <title>순환 참조 문제와 @Lazy 적용의 한계</title>
    <link>https://jun0.dev/blog/circular-reference-lazy-limit</link>
    <description>선물하기 API 구현 중 ProductService와 OptionService의 순환 참조를 @Lazy로 덮지 않고 의존 방향과 역할 분리 관점에서 해결했습니다.</description>
    <pubDate>Sun, 22 Jun 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>spring</category><category>dependency-injection</category><category>architecture</category><category>backend</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/circular-reference-lazy-limit</guid>
    <title>Circular References and the Limits of @Lazy</title>
    <link>https://jun0.dev/blog/circular-reference-lazy-limit</link>
    <description>How I resolved a circular reference between ProductService and OptionService in a gift API by revisiting dependency direction instead of hiding it with @Lazy.</description>
    <pubDate>Sun, 22 Jun 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>spring</category><category>dependency-injection</category><category>architecture</category><category>backend</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/pageable-input-validation</guid>
    <title>Pageable 입력 검증: PageRequestDto 설계</title>
    <link>https://jun0.dev/blog/pageable-input-validation</link>
    <description>Spring Pageable을 그대로 노출했을 때 정렬 기준과 페이지 크기 규칙이 느슨해지는 문제를 PageRequestDto로 제어했습니다.</description>
    <pubDate>Tue, 17 Jun 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>spring</category><category>pagination</category><category>validation</category><category>api-design</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/pageable-input-validation</guid>
    <title>Pageable Input Validation: Designing a PageRequestDto</title>
    <link>https://jun0.dev/blog/pageable-input-validation</link>
    <description>Why I introduced a PageRequestDto instead of exposing Spring Pageable directly, so sort fields and page size rules could be controlled more clearly.</description>
    <pubDate>Tue, 17 Jun 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>spring</category><category>pagination</category><category>validation</category><category>api-design</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/pagination-count-query-cost</guid>
    <title>JPA Page의 숨겨진 비용: count 쿼리</title>
    <link>https://jun0.dev/blog/pagination-count-query-cost</link>
    <description>목록 조회 API에서 Page가 자동 수행하는 count 쿼리 비용을 확인하고 Page와 Slice 선택 기준을 정리했습니다.</description>
    <pubDate>Thu, 12 Jun 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>jpa</category><category>pagination</category><category>spring-data</category><category>performance</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/pagination-count-query-cost</guid>
    <title>Reducing Count Query Cost in Pagination</title>
    <link>https://jun0.dev/blog/pagination-count-query-cost</link>
    <description>How I compared Page and Slice after reviewing the cost of automatic count queries in list APIs.</description>
    <pubDate>Thu, 12 Jun 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>jpa</category><category>pagination</category><category>spring-data</category><category>performance</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/jpa-n-plus-one-problem</guid>
    <title>JPA N+1 문제: 원인 분석부터 해결까지</title>
    <link>https://jun0.dev/blog/jpa-n-plus-one-problem</link>
    <description>선물하기 API에서 연관 데이터 조회 시 발생할 수 있는 JPA N+1 문제를 Fetch Join, EntityGraph, Batch Size 관점에서 비교했습니다.</description>
    <pubDate>Wed, 04 Jun 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>jpa</category><category>hibernate</category><category>spring</category><category>performance</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/jpa-n-plus-one-problem</guid>
    <title>JPA N+1 Problem: Cause and Fix Options</title>
    <link>https://jun0.dev/blog/jpa-n-plus-one-problem</link>
    <description>A comparison of Fetch Join, EntityGraph, and Batch Size while handling related data queries in a gift API.</description>
    <pubDate>Wed, 04 Jun 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>jpa</category><category>hibernate</category><category>spring</category><category>performance</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/rest-delete-body-design</guid>
    <title>REST API DELETE 요청에서 Body 사용을 지양한 이유</title>
    <link>https://jun0.dev/blog/rest-delete-body-design</link>
    <description>선물하기 API DELETE 요청에서 삭제 관련 값을 Body, Query Parameter, Path Variable 중 어디에 둘지 검토하고 삭제 대상을 더 명확히 표현했습니다.</description>
    <pubDate>Thu, 29 May 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>rest-api</category><category>http</category><category>api-design</category><category>backend</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/rest-delete-body-design</guid>
    <title>Why I Avoided Using a Body in a REST API DELETE Request</title>
    <link>https://jun0.dev/blog/rest-delete-body-design</link>
    <description>Choosing where DELETE request values belong in a gift API and avoiding request bodies when the target can be expressed more clearly.</description>
    <pubDate>Thu, 29 May 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>rest-api</category><category>http</category><category>api-design</category><category>backend</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/uuid-index-performance</guid>
    <title>UUID PK와 인덱스 성능: UUIDv4, ULID, UUIDv7 비교</title>
    <link>https://jun0.dev/blog/uuid-index-performance</link>
    <description>UUID를 식별자로 사용할 때 UUIDv4, ULID, UUIDv7이 인덱스 성능과 정렬 특성에 어떤 차이를 만드는지 비교했습니다.</description>
    <pubDate>Fri, 23 May 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>uuid</category><category>database</category><category>index</category><category>performance</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/uuid-index-performance</guid>
    <title>UUID Primary Keys and Index Performance: UUIDv4, ULID, and UUIDv7</title>
    <link>https://jun0.dev/blog/uuid-index-performance</link>
    <description>Comparing UUIDv4, ULID, and UUIDv7 for identifier design, index performance, and ordering behavior.</description>
    <pubDate>Fri, 23 May 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>uuid</category><category>database</category><category>index</category><category>performance</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/attacklab-buffer-overflow-writeup</guid>
    <title>AttackLab - Buffer Overflow Writeup</title>
    <link>https://jun0.dev/blog/attacklab-buffer-overflow-writeup</link>
    <description>Buffer Overflow 취약점을 이용해 AttackLab 5개 Phase를 해체하고 Code Injection과 ROP(Return-Oriented Programming)를 적용했습니다.</description>
    <pubDate>Tue, 20 May 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>system-software</category><category>assembly</category><category>gdb</category><category>x86</category><category>buffer-overflow</category><category>rop</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/attacklab-buffer-overflow-writeup</guid>
    <title>AttackLab - Buffer Overflow Writeup</title>
    <link>https://jun0.dev/blog/attacklab-buffer-overflow-writeup</link>
    <description>Solving the five AttackLab phases with buffer overflow, code injection, and ROP(Return-Oriented Programming).</description>
    <pubDate>Tue, 20 May 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>system-software</category><category>assembly</category><category>gdb</category><category>x86</category><category>buffer-overflow</category><category>rop</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/bomblab-binary-bomb-writeup</guid>
    <title>BombLab - Binary Bomb Writeup</title>
    <link>https://jun0.dev/blog/bomblab-binary-bomb-writeup</link>
    <description>주어진 Binary 파일을 GDB로 disassembly하고 디버깅해 6개 Phase와 Secret Phase를 해체했습니다.</description>
    <pubDate>Mon, 19 May 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>system-software</category><category>assembly</category><category>gdb</category><category>x86</category><category>reverse-engineering</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/bomblab-binary-bomb-writeup</guid>
    <title>BombLab - Binary Bomb Writeup</title>
    <link>https://jun0.dev/blog/bomblab-binary-bomb-writeup</link>
    <description>Defusing six BombLab phases and the secret phase by disassembling and debugging the given binary with GDB.</description>
    <pubDate>Mon, 19 May 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>system-software</category><category>assembly</category><category>gdb</category><category>x86</category><category>reverse-engineering</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/application-validation-select-update</guid>
    <title>애플리케이션 계층에서 직접 검증이 필요한 이유</title>
    <link>https://jun0.dev/blog/application-validation-select-update</link>
    <description>카카오테크캠퍼스 선물하기 API에서 DB 제약조건에만 맡길지, 애플리케이션에서 먼저 검증할지 기준을 세웠습니다.</description>
    <pubDate>Wed, 07 May 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>spring</category><category>jpa</category><category>validation</category><category>database</category><category>backend</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/application-validation-select-update</guid>
    <title>Why Some Validation Belongs in the Application Layer</title>
    <link>https://jun0.dev/blog/application-validation-select-update</link>
    <description>Deciding when a Kakao Tech Campus gift API should rely on database constraints and when it should validate rules in the application layer.</description>
    <pubDate>Wed, 07 May 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>spring</category><category>jpa</category><category>validation</category><category>database</category><category>backend</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/rag-pipeline-llm-hallucination</guid>
    <title>RAG 파이프라인으로 LLM 환각 현상 완화하기</title>
    <link>https://jun0.dev/blog/rag-pipeline-llm-hallucination</link>
    <description>DocDoc에서 질문만 LLM에 전달할 때 생기는 근거 없는 답변을 RAG, reranking, SSE 스트리밍으로 줄였습니다.</description>
    <pubDate>Sun, 13 Apr 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>rag</category><category>llm</category><category>pinecone</category><category>langchain</category><category>ai</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/rag-pipeline-llm-hallucination</guid>
    <title>Reducing LLM Hallucination with a RAG Pipeline</title>
    <link>https://jun0.dev/blog/rag-pipeline-llm-hallucination</link>
    <description>Building a medical paper-based answer flow in DocDoc with RAG, reranking, and SSE streaming to reduce unsupported LLM answers.</description>
    <pubDate>Sun, 13 Apr 2025 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>rag</category><category>llm</category><category>pinecone</category><category>langchain</category><category>ai</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/android-fragment-savedinstancestate</guid>
    <title>Android Fragment 생명주기와 savedInstanceState 문제 해결 기록</title>
    <link>https://jun0.dev/blog/android-fragment-savedinstancestate</link>
    <description>Android 편의 앱에서 백그라운드 복귀 후 Fragment 표시 상태가 깨지던 문제를 savedInstanceState와 생명주기 흐름으로 해결했습니다.</description>
    <pubDate>Sun, 22 Mar 2020 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>android</category><category>fragment</category><category>lifecycle</category><category>debugging</category><category>early-project</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/android-fragment-savedinstancestate</guid>
    <title>Fixing an Android Fragment Lifecycle and savedInstanceState Issue</title>
    <link>https://jun0.dev/blog/android-fragment-savedinstancestate</link>
    <description>Fixing an Android Fragment display issue after background return by tracing savedInstanceState and lifecycle behavior.</description>
    <pubDate>Sun, 22 Mar 2020 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>android</category><category>fragment</category><category>lifecycle</category><category>debugging</category><category>early-project</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/iot-tcp-socket-lighting</guid>
    <title>IoT 자율형 전등에서 TCP 소켓 서버 만들기</title>
    <link>https://jun0.dev/blog/iot-tcp-socket-lighting</link>
    <description>IoT 자율형 전등 프로젝트에서 NodeMCU와 Android 앱 사이의 상태를 실시간으로 주고받기 위해 HTTP polling 대신 TCP 소켓 서버를 만들었습니다.</description>
    <pubDate>Fri, 18 Oct 2019 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>nodejs</category><category>tcp</category><category>socket</category><category>iot</category><category>early-project</category>
  </item>

  <item>
    <guid>https://jun0.dev/blog/iot-tcp-socket-lighting</guid>
    <title>Building a TCP Socket Server for an Autonomous IoT Lamp</title>
    <link>https://jun0.dev/blog/iot-tcp-socket-lighting</link>
    <description>Building a TCP socket server for an autonomous IoT lamp so a NodeMCU device and Android app could exchange state updates in real time without HTTP polling.</description>
    <pubDate>Fri, 18 Oct 2019 00:00:00 GMT</pubDate>
    <author>y@jun0.dev (Junyoung Yang)</author>
    <category>nodejs</category><category>tcp</category><category>socket</category><category>iot</category><category>early-project</category>
  </item>

    </channel>
  </rss>
