본문 바로가기

Spring21

[Spring] 간편 결제 기능 팩토리 클래스 적용하기 간편 결제 기능이 있는 프로젝트를 진행하다가, 기존에는 현금결제와 카카오페이결제 기능이 있었다. 이번에 네이버페이결제 기능을 추가하기 위해서, 코드를 작성하면 새로운 기능 추가로 인해서 기존의 코드들이 대폭 수정하는 일이 발생하였다. OCP 법칙에 맞지 않게 코드를 설계했었다. 코드를 설계할 때부터, 기능이 추가될 것을 예상하고 설계를 했으면 좋았을 텐데.. 아무튼 새로운 결제 기능을 추가함에 있어서, 기존의 코드가 수정되지 않도록 팩토리 패턴을 적용하였다. 팩토리 패턴을 적용하기 위해서 아래와 같이 PayService 인터페이스와 각각 구현체를 구현하였다. public interface PayService { String pay(Long orderId); } @Service public class Ka.. 2023. 5. 2.
[Spring] 동일한 클래스 내에서 내부 메서드 호출시 @Transactional 적용 안되는 이슈 프로젝트를 개발하던 도중 다음과 같은 이슈가 발생했다. 이슈 아래 코드는 낙관적 락을 이용하여, 메뉴 재고에 대한 동시성 문제를 해결하기 위한 코드이다. 낙관적 락에서 락 획득이 실패한 경우에는 개발자가 실패에 대한 처리를 직접 구현해주어야 하기 때문에, 다음과 같이 무한 루프를 통해서 일정시간 대기하고 다시 락 획득을 할 수 있도록 구현하였다. * 실제 매번 무한 루프를 돌며 락을 재획득하는 방법은 성능적인 측면에서 비효율적일 수 있다. 하지만 예시를 쉽게 작성하기 위해서 다음과 같이 작성하였습니다. ✍🏻 중요한 것은 낙관적 락(@Lock(value = LockModeType.OPTIMISTIC))을 사용하는 decrease 메서드는 반드시 트랜잭션 내에서 실행해야 한다는 점이다. @Service pu.. 2023. 4. 2.
[Spring] OSIV 에 대해서 Spring으로 웹 애플리케이션을 실행하였을 때, 특별한 설정을 해주지 않으면 아래와 같은 경고가 출력되는 것을 확인할 수 있다. 이번 포스팅을 통해 해당 경고는 왜 출력되는 것이고, spring.jpa.open-in-view가 무엇인지에 대해서 정리하려고 한다. 2023-03-24 20:52:47.034 WARN 63885 --- [ restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open.. 2023. 3. 24.