<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Hae02y Devlog</title>
  <link href="https://blog.hae02y.me/blog"/>
  <link href="https://blog.hae02y.me/atom.xml" rel="self"/>
  <id>https://blog.hae02y.me</id>
  <updated>2026-06-03T10:26:21.016Z</updated>
  <author><name>정해영</name></author>
  <subtitle>정해영(hae02y)의 백엔드, 인프라, DevOps 기술 블로그</subtitle>
  <entry>
    <title><![CDATA[GCP 입문부터 인프라 구축까지]]></title>
    <link href="https://blog.hae02y.me/blog/gcp"/>
    <id>https://blog.hae02y.me/blog/gcp</id>
    <updated>2026-03-23T00:00:00.000Z</updated>
    <summary><![CDATA[그동안 `NCP`와 `AWS`를 사용해왔는데, 이번에 GCP를 사용할 일이 생겨서 기초부터 정리하고 실제 인프라를 구축해보기로 했다. GCP의 계층 구조부터 VPC, VM, Cloud SQL까지 구축하면서 다른 클라우드와 다르다고 느꼈던 부분들을 기록해보자. GCP 계층 구조GCP는 리소스를 관리하는 계층 구조가 좀 독특하다. AWS와 비교하면]]></summary>
    <author><name>정해영</name></author>
    <category term="cloud"/>
    <category term="gcp"/>
    <category term="Infra"/>
  </entry>
  <entry>
    <title><![CDATA[MongoDB 연동을 위한 튜토리얼]]></title>
    <link href="https://blog.hae02y.me/blog/mongodb-tutorial"/>
    <id>https://blog.hae02y.me/blog/mongodb-tutorial</id>
    <updated>2025-12-10T00:00:00.000Z</updated>
    <summary><![CDATA[```java//Config@Configuration  @EnableMongoAuditing  class MongoConfig {  }``````java//Repositoryinterface MailContentsRepository : MongoRepository<MailContents, String> {  }``````j]]></summary>
    <author><name>정해영</name></author>
    <category term="DB"/>
    <category term="NoSQL"/>
    <category term="MongoDB"/>
    <category term="spring"/>
    <category term="Kotlin"/>
  </entry>
  <entry>
    <title><![CDATA[Github로 OAuth2 빠르게 구현하기]]></title>
    <link href="https://blog.hae02y.me/blog/oauth-github"/>
    <id>https://blog.hae02y.me/blog/oauth-github</id>
    <updated>2025-12-05T00:00:00.000Z</updated>
    <summary><![CDATA[개인 프로젝트에 로그인 기능을 넣으려고 하다가, 직접 회원가입/로그인을 구현하는게 너무 번거로워서 `OAuth2`를 도입하기로 했다. 그중에서도 개발자라면 누구나 가지고 있는 `GitHub` 계정을 활용한 소셜 로그인을 구현해보자. OAuth2 간단 정리`OAuth2`는 외부 서비스(GitHub, Google 등)에 사용자 인증을 위임하는 프로]]></summary>
    <author><name>정해영</name></author>
    <category term="oauth2"/>
    <category term="spring"/>
    <category term="Kotlin"/>
  </entry>
  <entry>
    <title><![CDATA[RabbitMQ 구성하면서 어려웠던거]]></title>
    <link href="https://blog.hae02y.me/blog/rabbitmq"/>
    <id>https://blog.hae02y.me/blog/rabbitmq</id>
    <updated>2025-11-15T00:00:00.000Z</updated>
    <summary><![CDATA[사내 프로젝트에서 서비스간 비동기 메시지 통신이 필요한 상황이 생겨서 `RabbitMQ`를 도입하게 되었다. 적용하면서 개념적으로 헷갈렸던 부분들과 실제로 마주한 문제들을 정리해보자. RabbitMQ 기본 구조먼저 `RabbitMQ`의 핵심 구성요소를 짚고 넘어가자.```bashProducer → Exchange → Binding → Qu]]></summary>
    <author><name>정해영</name></author>
    <category term="RabbitMQ"/>
    <category term="spring"/>
    <category term="Infra"/>
  </entry>
  <entry>
    <title><![CDATA[자바로 배우는 자료구조 알고리즘 정리]]></title>
    <link href="https://blog.hae02y.me/blog/java-algorithm-book"/>
    <id>https://blog.hae02y.me/blog/java-algorithm-book</id>
    <updated>2025-11-10T00:00:00.000Z</updated>
    <summary><![CDATA[이 내용은 '자바로 배우는 자료구조 알고리즘' 책을 읽고 내용을 정리한 내용이다. 해당 내용에 대한 실습 및 예제 코드는 아래 깃허브 링크를 참고하면 된다.[깃허브 Repo](https://github.com/hae02y/Blog-Code-Repo/tree/main/think-data-structures) LinkedList 클래스Arra]]></summary>
    <author><name>정해영</name></author>
    <category term="review"/>
    <category term="book"/>
    <category term="Java"/>
    <category term="algorithm"/>
  </entry>
  <entry>
    <title><![CDATA[개인프로젝트에 AI 코드리뷰를 도입해보자 (feat. 코드래빗)]]></title>
    <link href="https://blog.hae02y.me/blog/coderabbit"/>
    <id>https://blog.hae02y.me/blog/coderabbit</id>
    <updated>2025-10-23T00:00:00.000Z</updated>
    <summary><![CDATA[개인 프로젝트를 진행하면서 백엔드를 혼자 구현하다보니 코드리뷰가 불가능한 상황이였다. 이전에 만들었던 딥시크 기반 코드리뷰어를 사용해 볼까 하다가, 써보자 하고 계속 미뤄졌던 `coderabbit`서비스를 한번 도입해 보기로 하였다. 구현 과정에서 놓친 부분을 AI로 보완하고, 추가적인 학습 인사이트를 얻을 수있었던 경험을 글로 남겨보려고한다. 코]]></summary>
    <author><name>정해영</name></author>
    <category term="review"/>
    <category term="coderabbit"/>
    <category term="AI"/>
  </entry>
  <entry>
    <title><![CDATA[API 아키텍처s (feat. WSDL 연동하기...)]]></title>
    <link href="https://blog.hae02y.me/blog/soap"/>
    <id>https://blog.hae02y.me/blog/soap</id>
    <updated>2025-10-04T00:00:00.000Z</updated>
    <summary><![CDATA[백앤드 개발을 하면서 `RESTful`한 API은 자주 사용하였지만, 다른 API 아키텍처를 반영하는 경우는 거의 없었다. 특히 SOAP과 같은 조금은 오래된 기술들은 개념적으로 잠깐 찾아본적은 있어도 동작 방식이나 사용방법은 전혀 알지 못했다. 최근에 진행한 프로젝트에서 타사 프로그램을 연동하는 과정에서 `WSDL`를 통해 연동을 진행했는데 이때 배운 내]]></summary>
    <author><name>정해영</name></author>
    <category term="soap"/>
    <category term="API"/>
    <category term="Architecture"/>
  </entry>
  <entry>
    <title><![CDATA[SQL Server NVARCHAR 해결]]></title>
    <link href="https://blog.hae02y.me/blog/nvarchar"/>
    <id>https://blog.hae02y.me/blog/nvarchar</id>
    <updated>2025-09-15T00:00:00.000Z</updated>
    <summary><![CDATA[프로젝트 QA중 특정 기능에서 조회 성능이 굉장히 떨어져 타임아웃까지 응답이 불가능한 문제가 발생하였다. 조회 요청을 보내는 테이블에 데이터가 꽤나 많았고, 추후 최적화를 진행하려고 했던터라 개발 단계에서 신경쓰지 못했었지만, 이번 오류 대응 과정을 통해서 배웠고, 앞으로도 주의해야할 내용을 공유해 보고자 한다. 문제점```javaInOutDT]]></summary>
    <author><name>정해영</name></author>
    <category term="Java"/>
    <category term="TroubleShootiong"/>
    <category term="MSSQL"/>
  </entry>
  <entry>
    <title><![CDATA[멀티모듈 적용]]></title>
    <link href="https://blog.hae02y.me/blog/multimodule"/>
    <id>https://blog.hae02y.me/blog/multimodule</id>
    <updated>2025-08-01T00:00:00.000Z</updated>
    <summary><![CDATA[MSA 전환을 염두해둔 상태에서 첫번째 스텝으로 멀티모듈에 대해서 공부하고 적용해보자. MSA / 멀티모듈사내의 서비스는 다음과 같이 나눠진다.1. API2. ADMIN3. BATCH(Gateway)4. WEB5. Cache 등> 좋은 아키텍처는 시스템이 모놀리틱 구조로 태어나서 단일 파일로 배포되더라도, 이후에는 독립적으로 배포]]></summary>
    <author><name>정해영</name></author>
    <category term="Java"/>
    <category term="Architecture"/>
  </entry>
  <entry>
    <title><![CDATA[NCP와 함께하는 쿠버네티스 구축]]></title>
    <link href="https://blog.hae02y.me/blog/nks"/>
    <id>https://blog.hae02y.me/blog/nks</id>
    <updated>2025-07-15T00:00:00.000Z</updated>
    <summary><![CDATA[이번 프로젝트를 진행하면서 Naver Cloud Platform을 이용해 쿠버네티스를 구축하고 개발하게 되었다. 클라우드로 쿠버네티스를 구축하는 방법과 구축 과정에서 만났던 많은 어려움들을 어떻게 해결해 나갔는지 기록해보려고 한다. 구축 순서```bash1. VPC 준비2. Subnet 생성3. NKS클러스터 생성4. 노드풀 생성5.]]></summary>
    <author><name>정해영</name></author>
    <category term="Kubernetes"/>
    <category term="API"/>
    <category term="NCP"/>
    <category term="Infra"/>
  </entry>
  <entry>
    <title><![CDATA[JPA 도입 그리고 ID 생성 방식]]></title>
    <link href="https://blog.hae02y.me/blog/generateid"/>
    <id>https://blog.hae02y.me/blog/generateid</id>
    <updated>2025-07-02T00:00:00.000Z</updated>
    <summary><![CDATA[이번 프로젝트에서 ORM으로 `JPA`를 사용하게 되었다. 설계단계에서 비즈니스 로직의 대부분이 CRUD로 이뤄져 생산성 향상 측면에서 유리할것 같아 제안했고, 도입이 이뤄졌다. 이로인해 실제로 코드의 복잡도나 유지보수성이 크게 향상되었지만 예상치 못한곳에서 문제가 발생했다. 바로 `ID` 생성 방식때문이였다.    기존에는 `fn_sys_seq`와 같]]></summary>
    <author><name>정해영</name></author>
    <category term="API"/>
    <category term="Java"/>
    <category term="Jpa"/>
  </entry>
  <entry>
    <title><![CDATA[Servlet에 숨참고 Deep Dive!]]></title>
    <link href="https://blog.hae02y.me/blog/servlet"/>
    <id>https://blog.hae02y.me/blog/servlet</id>
    <updated>2025-06-15T00:00:00.000Z</updated>
    <summary><![CDATA[Spring을 통해 코드를 작성하다가 `HttpServletRequest`와 `HttpServletResponse`은 어디서 온걸까 하는 의문이 생겼다. `HTTP`를 통해 전송된 내용이 톰캣과 같은 WAS를 통해 변환된다는 것 까지는 알고있었지만 자세하게 알아보고싶어 블로그 작성을 시작하게 되었다. 자 그럼 서블릿에 대해 깊이 알아보기 전에 정적페]]></summary>
    <author><name>정해영</name></author>
    <category term="Java"/>
    <category term="Servlet"/>
    <category term="WAS"/>
  </entry>
  <entry>
    <title><![CDATA[CI/DI와 본인인증 기능 구현]]></title>
    <link href="https://blog.hae02y.me/blog/sci"/>
    <id>https://blog.hae02y.me/blog/sci</id>
    <updated>2025-06-12T00:00:00.000Z</updated>
    <summary><![CDATA[프로젝트를 진행하면서 본인인증 기능을 직접 구현해 볼수있는 좋은 기회가 생겼다. 기능 구현을 하면서 겪었던 문제들과 새롭게 알게된 내용을 공유해보고자 글을 작성하게 되었다. 구현에 대한 내용에 들어가기전 본인인증에 대해 찾아본 내용을 먼저 전달한다. 본인 인증![나는누구..?](screen2.png)본인인증에 관해서는 해외와 한국의 상황이 많]]></summary>
    <author><name>정해영</name></author>
    <category term="Service"/>
    <category term="Java"/>
    <category term="spring"/>
    <category term="Backend"/>
  </entry>
  <entry>
    <title><![CDATA[N+1 문제를 마주하게된 나]]></title>
    <link href="https://blog.hae02y.me/blog/jpa-problem"/>
    <id>https://blog.hae02y.me/blog/jpa-problem</id>
    <updated>2025-05-30T00:00:00.000Z</updated>
    <summary><![CDATA[실무에서 `N+1`가 발생하여 해결했던 경험에 대해서 작성해보고자 한다. 진행중인 프로젝트는 `JPA`를 사용중이며, `Mybatis`를 포함한 모든 `N+1` 문제에 대한 해결 방법을 다뤄보겠다. N+1 이란?N+1 문제는 데이터를 1번의 Query로 조회한 후, 각 데이터의 연관된 데이터를 추가로 N번 Query 하는 비효율적인 데이터 조회]]></summary>
    <author><name>정해영</name></author>
    <category term="Java"/>
    <category term="spring"/>
    <category term="payment"/>
  </entry>
  <entry>
    <title><![CDATA[JJWT 라이브러리 parserbuilder 컴파일 오류 해결]]></title>
    <link href="https://blog.hae02y.me/blog/jwt-parserbuilder"/>
    <id>https://blog.hae02y.me/blog/jwt-parserbuilder</id>
    <updated>2025-04-18T00:00:00.000Z</updated>
    <summary><![CDATA[JJWT라이브러리를 사용하던중 이전까지 사용하고있던 메서드에서 컴파일 오류가 발생하여 해결했던 경험을 공유하고자 한다.```javaimport io.jsonwebtoken.JwtException  import io.jsonwebtoken.Jwts  import io.jsonwebtoken.SignatureAlgorithm  import io.js]]></summary>
    <author><name>정해영</name></author>
    <category term="Java"/>
  </entry>
  <entry>
    <title><![CDATA[페이지네이션에 대해 깊게 고민해보자]]></title>
    <link href="https://blog.hae02y.me/blog/pagination"/>
    <id>https://blog.hae02y.me/blog/pagination</id>
    <updated>2024-12-23T00:00:00.000Z</updated>
    <summary><![CDATA[`JPA`를 사용하다보면 `Pageble`을 통해 손쉽게 구현하던 페이지네이션을 `Mybatis`로 어떻게 구현할지 고민하고 프로젝트에 적용하며 알게된 내용을 기록하고자 한다.  페이지네이션대용량 데이터를 다루는 서비스에서 사용자에게 데이터를 보여줄 때, 전체 데이터를 한 번에 가져오는 것은 비효율적이다. 이를 해결하기 위해 페이지네이션(Pagin]]></summary>
    <author><name>정해영</name></author>
    <category term="DB"/>
    <category term="Java"/>
  </entry>
  <entry>
    <title><![CDATA[ffmpeg를 이용한 스트리밍 서버 구축기]]></title>
    <link href="https://blog.hae02y.me/blog/streaming"/>
    <id>https://blog.hae02y.me/blog/streaming</id>
    <updated>2024-09-20T00:00:00.000Z</updated>
    <summary><![CDATA[회사에서 LPR 기반의 대시보드 구현 PoC를 진행하면서 대시보드에 CCTV 영상을 Live로 송출해야하는 요구사항이 있었다. 하지만 문제는 `RTSP` 프로토콜을 통해 제공되는 CCTV 영상이 브라우저에서 직접 재생되지 않아 다양한 접근 방식을 고민했었고, 이문제를 해결했던 내용을 기록하고자 작성하였다.이글에서는 아래 내용을 다루고자 한다.1. N]]></summary>
    <author><name>정해영</name></author>
    <category term="Java"/>
    <category term="ffmpeg"/>
    <category term="Backend"/>
    <category term="Streaming"/>
  </entry>
  <entry>
    <title><![CDATA[UUID를 PK로 사용하면 안됩니다.]]></title>
    <link href="https://blog.hae02y.me/blog/uuid"/>
    <id>https://blog.hae02y.me/blog/uuid</id>
    <updated>2024-08-27T00:00:00.000Z</updated>
    <summary><![CDATA[회사에서 레거시 코드를 보던 도중 PK를 `UUID`로 관리하고 있다는 것을 알게 되었다. `UUID`를 사용하는 이유에 대해 찾아보던 중 새롭게 알게된 내용과 어떻게 사용하는 것이 효율적인지 기록해보려고 한다. UUID 란?![alt text](image.png)UUID(Universally Unique Identifier) 는 전세계적으]]></summary>
    <author><name>정해영</name></author>
    <category term="database"/>
    <category term="uuid"/>
  </entry>
  <entry>
    <title><![CDATA[블로그를 이사하려고 합니다.(feat. 도큐사우르스)]]></title>
    <link href="https://blog.hae02y.me/blog/makeblog2"/>
    <id>https://blog.hae02y.me/blog/makeblog2</id>
    <updated>2024-08-20T00:00:00.000Z</updated>
    <summary><![CDATA[회사에서 작은 사내 스터디를 시작하게 되었다. 같이 참여한 동료들은 개발팀 5명으로 1일 1커밋과 주 1회 블로그 업로드를 규칙으로 정했다. 하지만 내가 운영 중이던 블로그는 많은 수정이 필요한상태다.이전부터 기록을 제대로 해보고 싶은 생각이 있어서 다양한 플랫폼을 이용해봤지만 딱 마음에 드는 게 없었고, 현실에 타협해서 구축은 나중으로 미루고 있었지만]]></summary>
    <author><name>정해영</name></author>
    <category term="blog"/>
  </entry>
  <entry>
    <title><![CDATA[필드주입을 쓰면 안되는 이유를 아시는지요.]]></title>
    <link href="https://blog.hae02y.me/blog/field"/>
    <id>https://blog.hae02y.me/blog/field</id>
    <updated>2024-08-07T00:00:00.000Z</updated>
    <summary><![CDATA[레거시 코드를 마이그레이션 하던중 `@Autowired`을 통해 필드 주입으로만 의존성을 주입되어 있는 것을 발견하였다. 이를 생성자 주입으로 변경 하려고 하였지만 왜? 라는 의문이 들었고 이 포스팅 작성을 시작하였다. 의존성 주입Spring Framework에서 의존성을 주입하는 방법은 3가지가 있다.	1. 생성자 주입(Construct]]></summary>
    <author><name>정해영</name></author>
    <category term="spring"/>
    <category term="Java"/>
  </entry>
</feed>