development 19

[DB] 낙관적, 비관적 락 (Optimistic Lock, Pessimistic Lock)

개요다중 요청을 처리하는 동시성 환경에서 데이터의 정합성과 일관성을 보장하기 위해 Lock을 사용한다.이 글에서는 Lock의 종류와 스프링 애플리케이션에서 Jpa를 활용하여 Lock을 처리하는 방법에 대해 정리한다. 락 (LOCK)데이터베이스에는 중요한 정보가 저장된다. 따라서 무결성과 일관성, 정합성이 반드시 지켜져야 한다. 하지만, 여러 사용자(Transaction)가 동시에 자원을 획득하게 되면 문제가 생기게 될 것이다. 이러한 문제를 방지하기 위해 데이터베이스는 Lock 기능을 제공한다. 한 트랜잭션이 특정 Row에 대한 Lock을 획득하면, 다른 트랜잭션이 이를 변경할 수 없는 것이다. 이는 데이터에 대한 처리 순서를 보장하여 정합성과 무결성을 지키고 안전한 데이터 처리를 가능하게 한다. Loc..

[Java] Design-Pattern Proxy

프록시 패턴이란?- 프록시는 사전적 의미로 대리자·대리인을 뜻한다. Http 프로토콜을 사용하는 Client-Server 아키텍처에서 Client가 요청을 보내면 Server는 응답을 전달하게 되는데, 이 사이에 일종의 미들웨어처럼 프록시가 적용될 수 있다. 프록시 서버는 클라이언트의 요청을 대신 받아 서버에 전달한다. - 프록시 디자인 패턴 역시 동일한 원리가 적용된다고 볼 수 있다. 스프링 부트에서 Aop는 CGlib 방식의 Proxy 패턴을 적용하여 부가 기능 (Aspect-Advice)을 주 관심사로부터 분리한 후 Runtime Weaving을 수행한다. 즉 프록시 패턴을 활용하면 타겟이 되는 객체의 로직을 수행하기 전에 프록시 객체가 이를 intercept 하여 부가 기능을 주입하게 되는 것이다..

[Java] Design-Pattern Observer

Observer는 스타크래프트 게임을 해본 사람이라면 익숙한 단어일 것이다. Observer는 사용자에게 시야를 제공할 뿐만 아니라 보이지 않는 유닛이나 지뢰 등을 비추어 보여주는 능력을 가지고 있다. 사전적 의미는 관찰자, 관측자 이며 단어의 의미에 부합하는 역할을 수행하는 유닛이다.디자인 패턴 중 하나인 Observer Pattern의 Observer도 동일한 의미로 생각하면 된다. 한 개 이상의 Observer 객체가 특정 객체의 메서드 호출이나 상태 변경 등을 관찰하고 있다가 해당 객체에 변경 사항이 발생하면 변경을 감지하여 각 Observer 객체의 내부 로직을 수행하게 된다. Observer 패턴은 스프링과 연계하여 사용하면 순수한 자바 기반의 코드보다 더욱 결합도, 의존도를 낮출 수 있을 것..

[Spring] Reflect + Aop 를 활용한 로그 처리

Spring에서는 Reflection을 개발자가 쉽게 사용할 수 있도록 개발용, 테스트용 ReflectionUtils을 제공한다.본 글에서는 ReflectionUtils과 Spring Aop의 @Around Advice를 활용하여 요청과 응답 데이터에 대한 로그를 남기는 작업을 진행한다. 개발환경id 'java'id 'org.springframework.boot' version '3.3.3'id 'io.spring.dependency-management' version '1.1.6'...java { toolchain { languageVersion = JavaLanguageVersion.of(17) }}...implementation 'org.springframework.boot:..

development/spring 2024.09.23

[Java] Design-Pattern Singleton

Java, Spring Framework (Spring Boot) 기반의 개발을 진행할 때 유용하게 사용할 수 있는 디자인 패턴에 대해 정리할 것이다.첫 시작은 대망의 싱글톤 패턴이다. 스프링은 Ioc 컨테이너에서 관리하는 객체를 싱글톤으로 관리한다. 뿐만 아니라, 환경 설정을 할 때 사용하는 @Configuration 어노테이션이 붙은 클래스 역시 Spring CGlib Proxy 방식을 적용하여 싱글톤으로 관리한다. 도대체 싱글톤이 무엇이고, 왜 스프링은 시키지도 않은 싱글톤 방식을 Default로 적용하는걸까? 우선 싱글톤이 무엇인지 정리한 후 왜, 그리고 어떻게 사용하는지 순차적으로 살펴보자. 싱글톤이란 무엇인가?  특정 클래스에 대해 객체(인스턴스)를 단 한 개만 생성하여 관리하는 것을 의미한다..