본문 바로가기

분류 전체보기124

[스프링 AOP] 1. 스프링 AOP와 Proxy 패턴 개요최근 스프링 공식 문서를 시작하여 내부 코드부터 구현 원리까지 학습은 매우 많이 했는데 정리는 하지 못한 것 같아 이번 글부터 Aop를 시작으로 스프링에 대해 완벽 정리를 해보고자 한다.  스프링 AOP란?스프링 AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)은 스프링 프레임워크에서 지원하는 프로그래밍 패러다임 중 하나로, 주된 기능은 애플리케이션의 핵심 비즈니스 로직과 공통적인 부가 기능(예: 로깅, 트랜잭션 관리, 보안 등)을 분리하는 것을 말한다. 예를 들어, 한 상품 판매자가 상품을 등록 하는 기능을 만들어야 한다고 가정해보자.여기서 핵심 비즈니스 로직은 아래와 같을 것이다.상품의 이름은 10자를 넘어서면 안된다.상품의 이미지는 5개를 넘어서면 안된다.상품을 .. 2024. 9. 28.
Refactoring : if-else문을 사용하는 팩토리 클래스 제거하기 개발을 하다보면 VIP 유저, 일반 유저 등의 여러 상황과 정책에 대응하기 위해 하나의 인터페이스가 여러 구현체를 갖게되는 경우가 더러 있다. 위와 같은 경우 특정 상황에서 특정 구현체를 찾아주어야 하는 팩토리 클래스를 만들어야 하는데, 이 팩토리 클래스에 If-else문 혹은 switch, when 등을 사용하기 쉽상이다. 이때, 어떻게 대응해야할지 고민과 그 결과를 공유해보고자한다.if-else를 사용한 팩토리 클래스VVIP 유저, VIP 유저, GOLD, SILVER 유저마다 다르게 할인율을 계산해주는 정책이 있었다고 가정해보자. 보통의 상황에서 우리는 UserSalePolicy라는 인터페이스를 정의하고 각 유저에 맞는 정책들을 구현할 것이다.interface UserSalePolicy { fun .. 2023. 12. 26.
AbstractRoutingDataSource 를 통한 DB replication 환경 설정과 Spring Data JPA에서의 Transactional 이슈 해결을 위해 스프링 구현 코드를 까보는 (약간은 바보 같은) journey.. 문제 상황 Spring Data Jpa에서 메서드 명만 작성하면 알아서 jpql을 만들어내주는 신기한 기능을 많이들 써봤을 것이다. 나 또한 그랬고, 이번에도 어김없이 사용하고 있었다. 다만, 현재 하고 있는 프로젝트에서는 현재 트랜잭션이 read-only일 시에는 read-only DB, 데이터 변경 관련 트랜잭션일 경우에는 write 전용 DB를 바라보게 하고 있었다. (전형적인 DB replication 구조) 이때 클라이언트 단에서 post로 데이터를 작성하고, 직후 get을 통해 데이터를 조회할 시 read DB와 write DB의 동기화 시간 차이로 인한 문제로 not found exception이 발생했고 새로고침하면 동기화가 되어 다시 데이터가 정상적으로 조회되는 상황이었다. 해결? 사실 .. 2023. 10. 22.
sql Join 알고리즘에 대해 알아보자 join은 관계형 DB를 사용하게 되면 거진 필수적으로 다루게 되며, 매우 자주 쓰인다. 이번에는 이렇게 join할 때 사용되는 여러가지 join 알고리즘에 대해 살펴보고 언제 어떤 알고리즘을 사용하는게 좋을지 정리해보려한다. 크로스 결합 크로스 결합은 테이블과 테이블을 곱했을 때 나오는 모든 경우의 수를 결과로 나올 때 사용하는 알고리즘이다. 이렇게 모든 결과가 나오는 크로스 결합의 테이블과 테이블의 곱을 카테시안 곱(Cartesian Product)이라고 한다. 들으면서 느꼈겠지만 거의 쓰지 않을 뿐더러 성능이 좋지 않다. 아래와 같은 쿼리문을 수행할 때 크로스 결합이 수행된다. select * from a,b Nested Loops join 시 중첩 반복문을 사용하는 알고리즘이다. SQL에서 결합은.. 2023. 10. 7.