<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>로키의 개발 블로그</title>
    <link>https://yejun-the-developer.tistory.com/</link>
    <description>백엔드를 공부하는 로키의 개발 블로그입니다</description>
    <language>ko</language>
    <pubDate>Sat, 15 Aug 2026 17:40:01 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>DevLoki</managingEditor>
    <item>
      <title>[React] 리액트와 렌더링</title>
      <link>https://yejun-the-developer.tistory.com/18</link>
      <description>리액트란?

리액트는 페이스북에서 개발한 사용자 인터페이스를 만들기 위한 자바스크립트 라이브러리입니다.
&amp;nbsp;리액트는 프레임워크가 아닌, 라이브러리입니다. 따라서 MVC(Model-View-Controller)와 MVW(Model-View-Whatever) 등의 아키텍쳐를 가진 프레임워크와는 달리 오직 뷰만을 관리합니다.&amp;nbsp;다른 웹 프레임워크가 AJAX, 데이터 모델링, 라우팅 등의 기능을 내장하는 반면 리액트는 기타 기능을 직접 구현하거나..</description>
      <category>[Front-end]/[React]</category>
      <author>DevLoki</author>
      <guid isPermaLink="true">https://yejun-the-developer.tistory.com/18</guid>
      <comments>https://yejun-the-developer.tistory.com/18#entry18comment</comments>
      <pubDate>Tue, 16 Aug 2022 11:20:53 +0900</pubDate>
    </item>
    <item>
      <title>[이슈 #5] Spring Life Cycle Event를 이용한 런타임에러를 컴파일 시점으로 변경하기</title>
      <link>https://yejun-the-developer.tistory.com/17</link>
      <description>현 프로젝트에서 분산락을 적용하는 방법은 MySQL의 USER_LEVEL_LOCK, 즉 NAMED_LOCK 방식입니다.
NAMED_LOCK은 get_lock() 함수를 이용해 임의의 문자열에 대해 잠금을 거는 방식으로 동작합니다. 따라서 임의의 문자열인 LockName이 반드시 지정되어야 합니다.
&amp;nbsp;
분산락 AOP를 사용하는 요청이 발생할 때마다, 분산락 Advice에서 파라미터에 @LockName 애노테이션이 존재하는지 검사하며, 해당 파라미..</description>
      <category>[Project]/[Momo]</category>
      <author>DevLoki</author>
      <guid isPermaLink="true">https://yejun-the-developer.tistory.com/17</guid>
      <comments>https://yejun-the-developer.tistory.com/17#entry17comment</comments>
      <pubDate>Fri, 5 Aug 2022 15:00:08 +0900</pubDate>
    </item>
    <item>
      <title>[이슈 #4] 분산락을 활용한 중복 데이터 삽입 이슈 해결3</title>
      <link>https://yejun-the-developer.tistory.com/16</link>
      <description>분산락 중첩 적용
특정 사용자 요청을 처리하는 경우 분산락에 대한 중첩 적용이 필요했습니다.
모임을 생성하는 경우로 예시를 들어보겠습니다.

모임을 생성하는 요청은 우선, 회원에 대한 분산락을 획득하여 한 회원이 모임 생성 제한 갯수를 초과하여 생성하는 것을 검사합니다.
그 후, 모임이름에 대한 분산락을 획득하여 동일한 이름의 모임이 생성되는 것을 검사한 후 모임을 생성합니다.

따라서 다음과 같이 메서드를 분리하여 각 메서드에 별도의 분산락 적용을 위..</description>
      <category>[Project]/[Momo]</category>
      <category>DistributedLock</category>
      <category>Self Invocation</category>
      <category>Self-invocation</category>
      <category>Stack</category>
      <category>분산락</category>
      <author>DevLoki</author>
      <guid isPermaLink="true">https://yejun-the-developer.tistory.com/16</guid>
      <comments>https://yejun-the-developer.tistory.com/16#entry16comment</comments>
      <pubDate>Tue, 2 Aug 2022 22:37:16 +0900</pubDate>
    </item>
    <item>
      <title>[이슈 #3] 분산락을 활용한 중복 데이터 삽입 이슈 해결2</title>
      <link>https://yejun-the-developer.tistory.com/15</link>
      <description>이전 이슈를 통해 동시 요청시 중복 데이터 삽입 문제를 해결할 수 있었습니다.
그러나 아직 몇 가지 개선해야 할 점이 남아있습니다.

하드코딩된 lockname 파라미터
메서드 분리와 추상화

하드코딩된 lockname 파라미터 개선
현재 작성된 분산락 어드바이저는 다음과 같은 방식으로 lockname을 가져옵니다.
String lockName = joinPoint.getArgs()[0].toString();
위 방식은 분산락 AOP를 사용하는 경우 항..</description>
      <category>[Project]/[Momo]</category>
      <category>DistributedLock</category>
      <category>분산락</category>
      <category>소프트코딩</category>
      <category>애노테이션 파라미터</category>
      <category>추상화</category>
      <author>DevLoki</author>
      <guid isPermaLink="true">https://yejun-the-developer.tistory.com/15</guid>
      <comments>https://yejun-the-developer.tistory.com/15#entry15comment</comments>
      <pubDate>Tue, 2 Aug 2022 20:35:22 +0900</pubDate>
    </item>
    <item>
      <title>[이슈 #2] 분산락을 활용한 중복 데이터 삽입 이슈 해결1</title>
      <link>https://yejun-the-developer.tistory.com/14</link>
      <description>문제인식
개발 중 클라이언트로부터 동일한 데이터에 대한 삽입 요청이 동시에 들어오는 경우, 중복 데이터 검사 로직을 거치더라도 데이터가 중복 삽입되는 문제를 발견했습니다.
&amp;nbsp;
회원이 모임을 가입할 때 발생하는 문제를 예시로 들어보겠습니다.

위와 같은 로직을 거쳐 회원이 모임에 가입하는 경우입니다.

위처럼 클라이언트의 오류로 동일한 두 요청이 동시에 들어온 경우 회원이 한 모임에 중복으로 가입하게 되는 문제가 발생하게 됩니다.
&amp;nbsp;
이..</description>
      <category>[Project]/[Momo]</category>
      <category>DistributedLock</category>
      <category>NAMED_LOCK</category>
      <category>USER_LEVEL_LOCK</category>
      <category>네임드락</category>
      <category>분산락</category>
      <author>DevLoki</author>
      <guid isPermaLink="true">https://yejun-the-developer.tistory.com/14</guid>
      <comments>https://yejun-the-developer.tistory.com/14#entry14comment</comments>
      <pubDate>Tue, 2 Aug 2022 18:57:54 +0900</pubDate>
    </item>
    <item>
      <title>[이슈 #1] Spring Transaction의 Self Invocation 이슈</title>
      <link>https://yejun-the-developer.tistory.com/13</link>
      <description>Spring Transaction의 Self Invocation 이슈
문제 인식
Spring Security를 이용한 OAuth 로그인 기능을 구현하기 위해 커스텀한 OAuth2UserService를 개발하던 중, 영속 상태에 있는 인스턴스의 필드 변경 사항이 DB에 저장되지 않는 문제를 발견하였습니다. 로그를 출력하며 확인해본 결과, 영속성 컨텍스트의 스냅샷을 이용한 변경 감지(dirty checking)뿐만 아니라 트랜잭션을 지원하는 쓰기 지연도 정..</description>
      <category>[Project]/[Momo]</category>
      <author>DevLoki</author>
      <guid isPermaLink="true">https://yejun-the-developer.tistory.com/13</guid>
      <comments>https://yejun-the-developer.tistory.com/13#entry13comment</comments>
      <pubDate>Fri, 4 Mar 2022 01:53:57 +0900</pubDate>
    </item>
    <item>
      <title>람다식과 외부 변수 참조</title>
      <link>https://yejun-the-developer.tistory.com/12</link>
      <description>모던 Practical 자바 5장 스트림 API를 읽다 흥미로운 코드를 발견했다. 
(설명을 위해 약간 변형했습니다.)
List&amp;lt;Integer&amp;gt; intList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
int sum = 0;

intList.stream().forEach(n -&amp;gt; sum+=n);

System.out.println(&quot;sum : &quot; + sum);
문제가 전혀 없어보이는 코드지만, 다음과 ..</description>
      <category>[Back-end]/[Java]</category>
      <author>DevLoki</author>
      <guid isPermaLink="true">https://yejun-the-developer.tistory.com/12</guid>
      <comments>https://yejun-the-developer.tistory.com/12#entry12comment</comments>
      <pubDate>Sat, 18 Dec 2021 20:43:40 +0900</pubDate>
    </item>
    <item>
      <title>[Java] 인터페이스의 문제점과 발전 방향</title>
      <link>https://yejun-the-developer.tistory.com/11</link>
      <description>자바를 공부해본 경험이 있는 사람이라면 객체지향 프로그래밍에서 인터페이스가 얼마나 큰 비중을 차지하는지 알고 계실 거라 생각합니다. 이번 포스팅에서는 객체지향의 핵심 개념인 인터페이스의 문제점과 이를 해결하기 위해 자바에서 제공하는 기능에 대해 이야기해보고자 합니다.
인터페이스의 문제점
인터페이스는 동일한 목적의 동작을 수행하도록 구격을 정의하는 명세서의 역할을 하며, 이를 구현한 클래스에서는 구격에 맞춰 세부적인 동작을 작성합니다. 좀더 구체적으로 표..</description>
      <category>[Back-end]/[Java]</category>
      <category>default</category>
      <category>interface</category>
      <category>java</category>
      <category>static</category>
      <category>인터페이스</category>
      <category>자바</category>
      <author>DevLoki</author>
      <guid isPermaLink="true">https://yejun-the-developer.tistory.com/11</guid>
      <comments>https://yejun-the-developer.tistory.com/11#entry11comment</comments>
      <pubDate>Sat, 18 Dec 2021 02:21:46 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] @Aspect</title>
      <link>https://yejun-the-developer.tistory.com/10</link>
      <description>이전 포스팅에서는 스프링의 빈 후처리기인 AnnotationAwareAspectJAutoProxyCreator에 대해 알아보았습니다.

&amp;nbsp;

[Spring] 스프링의 빈후처리기(AnnotationAwareAspectJAutoProxyCreator)
이전 프록시에서는 직접 빈 후처리기를 구현하였고 빈으로 등록되는 객체들을 프록시로 대체하는 작업을 진행해보았습니다. [Spring] 빈 후처리기(BeanPostProcessor) 이전 글에서는 프록시..</description>
      <category>[Back-end]/[Spring]</category>
      <category>@Aspect</category>
      <category>AnnotationAwareAspectJAutoProxyCreator</category>
      <category>AOP</category>
      <category>Aspect</category>
      <category>JoinPoint</category>
      <category>Spring</category>
      <category>스프링</category>
      <author>DevLoki</author>
      <guid isPermaLink="true">https://yejun-the-developer.tistory.com/10</guid>
      <comments>https://yejun-the-developer.tistory.com/10#entry10comment</comments>
      <pubDate>Fri, 10 Dec 2021 02:30:01 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] 스프링의 빈후처리기(AnnotationAwareAspectJAutoProxyCreator)</title>
      <link>https://yejun-the-developer.tistory.com/9</link>
      <description>이전 프록시에서는 직접 빈 후처리기를 구현하였고 빈으로 등록되는 객체들을 프록시로 대체하는 작업을 진행해보았습니다.

&amp;nbsp;

[Spring] 빈 후처리기(BeanPostProcessor)
이전 글에서는 프록시 팩토리의 장점과 한계점에 대해 알아보았습니다. [Spring] 프록시 팩토리(ProxyFactory) 한계점을 다시 정리해보자면 다음과 같습니다. 프록시를 적용할 스프링 빈의 갯수만큼
yejun-the-developer.tistory.com..</description>
      <category>[Back-end]/[Spring]</category>
      <category>AnnotationAwareAspectJAutoProxyCreator</category>
      <category>AOP</category>
      <category>pointcut</category>
      <category>Spring</category>
      <category>빈 후처리기</category>
      <category>스프링</category>
      <category>포인트컷</category>
      <author>DevLoki</author>
      <guid isPermaLink="true">https://yejun-the-developer.tistory.com/9</guid>
      <comments>https://yejun-the-developer.tistory.com/9#entry9comment</comments>
      <pubDate>Tue, 7 Dec 2021 21:53:04 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] 빈 후처리기(BeanPostProcessor)</title>
      <link>https://yejun-the-developer.tistory.com/8</link>
      <description>이전 글에서는 프록시 팩토리의 장점과 한계점에 대해 알아보았습니다.

&amp;nbsp;

[Spring] 프록시 팩토리(ProxyFactory)
이전 포스팅에서 다이내믹 프록시의 단점을 정리하며 마무리하였습니다. [Spring] 다이내믹 프록시(DynamicProxy) (프록시에 대한 이해가 부족하신 분들은 이전 포스팅을 참고하세요!!) [Spring] 프록시
yejun-the-developer.tistory.com


한계점을 다시 정리해보자면 다음과 같습..</description>
      <category>[Back-end]/[Spring]</category>
      <author>DevLoki</author>
      <guid isPermaLink="true">https://yejun-the-developer.tistory.com/8</guid>
      <comments>https://yejun-the-developer.tistory.com/8#entry8comment</comments>
      <pubDate>Sun, 5 Dec 2021 03:17:53 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] 프록시 팩토리(ProxyFactory)</title>
      <link>https://yejun-the-developer.tistory.com/7</link>
      <description>이전 포스팅에서 다이내믹 프록시의 단점을 정리하며 마무리하였습니다.

&amp;nbsp;

[Spring] 다이내믹 프록시(DynamicProxy)
(프록시에 대한 이해가 부족하신 분들은 이전 포스팅을 참고하세요!!) [Spring] 프록시와 디자인패턴 프록시와 디자인 패턴 스프링의 3대 기반기술 중 AOP를 공부하던 중 관심사 분리를 위한&amp;nbsp;다이
yejun-the-developer.tistory.com


&amp;nbsp;
이번 포스팅에서는 다이내믹 프록시..</description>
      <author>DevLoki</author>
      <guid isPermaLink="true">https://yejun-the-developer.tistory.com/7</guid>
      <comments>https://yejun-the-developer.tistory.com/7#entry7comment</comments>
      <pubDate>Fri, 3 Dec 2021 03:46:17 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] 다이내믹 프록시(DynamicProxy)</title>
      <link>https://yejun-the-developer.tistory.com/6</link>
      <description>(프록시에 대한 이해가 부족하신 분들은 이전 포스팅을 참고하세요!!)

&amp;nbsp;

[Spring] 프록시와 디자인패턴
프록시와 디자인 패턴 스프링의 3대 기반기술 중 AOP를 공부하던 중 관심사 분리를 위한&amp;nbsp;다이내믹 프록시와 팩토리 빈이라는 개념의 등장에 당황했습니다. 평소 객체지향과 디자인 패턴을 공부
yejun-the-developer.tistory.com


&amp;nbsp;
프록시를 사용하여 기존코드를 수정하지 않고, 타깃의 기능을 추가하..</description>
      <category>[Back-end]/[Spring]</category>
      <category>cglib</category>
      <category>dynamicproxy</category>
      <category>JDK동적프록시</category>
      <category>다이내믹프록시</category>
      <category>동적 프록시</category>
      <author>DevLoki</author>
      <guid isPermaLink="true">https://yejun-the-developer.tistory.com/6</guid>
      <comments>https://yejun-the-developer.tistory.com/6#entry6comment</comments>
      <pubDate>Tue, 30 Nov 2021 23:54:12 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] 프록시와 디자인패턴</title>
      <link>https://yejun-the-developer.tistory.com/5</link>
      <description>프록시와 디자인 패턴
스프링의 3대 기반기술 중 AOP를 공부하던 중 관심사 분리를 위한&amp;nbsp;다이내믹 프록시와 팩토리 빈이라는 개념의 등장에 당황했습니다. 평소 객체지향과 디자인 패턴을 공부할 때 프록시라는 단어를 들어본 적은 있었지만 실제 동작 원리에 대해 이해가 부족해 포스팅을 하게 되었습니다.

프록시란?
프록시(Proxy)는 대리자&amp;nbsp;라는 뜻으로, 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 ..</description>
      <category>[Back-end]/[Spring]</category>
      <category>proxy</category>
      <category>데코레이터패턴</category>
      <category>디자인패턴</category>
      <category>프록시</category>
      <category>프록시패턴</category>
      <author>DevLoki</author>
      <guid isPermaLink="true">https://yejun-the-developer.tistory.com/5</guid>
      <comments>https://yejun-the-developer.tistory.com/5#entry5comment</comments>
      <pubDate>Tue, 30 Nov 2021 00:50:27 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] DispatcherServlet이란?</title>
      <link>https://yejun-the-developer.tistory.com/4</link>
      <description>스프링 웹 MVC 프레임워크의 레퍼런스의 첫 문장은 다음과 같습니다.
The Spring Web model-view-controller (MVC) framework is designed around a DispatcherServlet&amp;nbsp;that dispatches requests to handlers, with configurable handler mappings, view resolution, locale and theme resolution ..</description>
      <category>[Back-end]/[Spring]</category>
      <category>DispatcherServlet</category>
      <category>Spring</category>
      <category>Spring MVC</category>
      <category>디스패처서블릿</category>
      <author>DevLoki</author>
      <guid isPermaLink="true">https://yejun-the-developer.tistory.com/4</guid>
      <comments>https://yejun-the-developer.tistory.com/4#entry4comment</comments>
      <pubDate>Sat, 18 Sep 2021 02:27:14 +0900</pubDate>
    </item>
    <item>
      <title>[Spring Boot] @SpringBootApplication이란?</title>
      <link>https://yejun-the-developer.tistory.com/3</link>
      <description>스프링부트 프로젝트를 생성하면 [projectName]Application.java에는 다음과 같이 '@SpringBootApplication'이 있는 걸 확인할 수 있습니다. 

&amp;nbsp;
지금부터&amp;nbsp;@SpringBootApplication의 역할과 내부 구현에 대해서 알아보겠습니다.

[Spring Boot] @SpringBootApplication이란?
&amp;nbsp;
'/spring-boot-autoconfigure-2.5.4.jar/org..</description>
      <category>[Back-end]/[Spring]</category>
      <category>@SpringBootApplication</category>
      <category>springboot</category>
      <category>스프링부트</category>
      <author>DevLoki</author>
      <guid isPermaLink="true">https://yejun-the-developer.tistory.com/3</guid>
      <comments>https://yejun-the-developer.tistory.com/3#entry3comment</comments>
      <pubDate>Tue, 14 Sep 2021 18:36:20 +0900</pubDate>
    </item>
  </channel>
</rss>