배경 동시성 이슈를 제어하는 프로젝트를 진행하던 중 JPA의 Pessimistic lock 을 활용해서 연결된 MySQL DB의* X-lock*을 통해 동시성 문제를 해결하려고 하였다. 콘서트 예약 환경에서 어떤 공연(show)의 특정 좌석(seat)에 대한 예약이
배경 최근 프로젝트 진행 중 동시성 제어 이슈를 경험하게 되었다. 문제를 해결하기 위해 테스트 코드를 작성하는 상황에서 @Transactional 의 내부 동작을 제대로 알지 못해 어려움을 겪었다. Spring에서 @Transactional을 사용해 비즈니스 로직을
JPA를 사용해서 연관관계를 맺게되면 필연적으로 겪게되는 문제가 있다. 바로 오늘 이야기할 N+1 쿼리 문제이다. 연관관계에 있는 데이터를 조회할 때 예상했던 것 보다 더 많은 수의 쿼리가 발생하는 문제로 예상치 못한 성능 이슈를 가져오기 때문에 반드시 문제를 해결해야
배경 지난 글에서 Entity 사이의 연관관계 매핑에 대해서 살펴보았다. 이번에는 연관된 Entity 들의 영속성을 다룰 수 있는 옵션 중 하나인 영속성 전이에 대해서 살펴보자. 아래와 같은 상황을 생각해보자. 게시글과 댓글을 1:N 관계이며, 게시글 쪽에 @One
이번 포스팅에서는 지난번 영속성 컨텍스트에 이어서 Entity 사이의 연관관계를 어떻게 구현하는지, 그리고 연관관계를 가지는 Entity 사이의 영속성 전이에 대해서 살펴보도록 하자. 데이터베이스의 테이블에는 Foreign key(FK) 를 활용해서 두 테이블 사이에
배경 Spring 어플리케이션을 개발하면서 JPA의 동작 방식에 대해 이해가 되지 않는 부분이 많았다. @Transactional은 언제 걸어야 하는지, 코드의 흐름은 이상이 없는데 원하는 update가 이루어지지 않는 이유, Repository의 함수들 중 왜 특정
배경 객체지향을 공부하면서 내가 나름 느낀 가장 많이 등장했던 키워드는 변경이라고 생각한다. 객체들 사이에 서로 책임을 가지고 믿고 위임하는 것도 중요한 얘기지만, 결국 이런 의존 관계 사이에서 변경의 전파를 막는 것에 대해 얼마나 고민하느냐가 중요했던 것 같다.
이제느 새로운 앱을 다운 받고 가입을 하려고 하는데 소셜 로그인 기능이 없다면 굉장히 아쉬운 느낌이 든다. 그만큼 우리 사용자들에게 굉장한 편의성을 주는 소셜 로그인 기능을 어떻게 구현할 수 있는지 한 번 살펴보자. 예전에 발로란트라는 게임의 1일 상점을 확인할 수 있
저번에 DI와 IoC container에 대해서 공부하다 보면 자연스럽게 IoC Container의 동작 원리에 대해 궁금해진다. 오늘은 그 중 싱글톤 패턴에 대해서 살펴볼 것이다. 먼저 스프링에 대한 생각을 잠시 내려두고 싱글톤이라는 패턴 자체에 대해서 고민해보자.
객체 지향에 관심을 가지고 공부를 하다보면 SOLID라는 5가지 원칙을 알게된다. 수학이나 물리 등과 같은 과목을 공부할 때도 그렇지만 우리는 원칙, 법칙, 공식 등과 같은 단어가 등장하면 무의식 중에 이를 사용하거나 지키려고 집착하는 경향이 있다. 하지만 이 원칙이
지난 시간에 DI에 대해서 알아보면서, 외부에서 의존성을 주입하는 것이 왜 중요한지 알게되었다(추상화 타입과 캡슐화의 관점에서). 만약 기억이 나지 않는다면 아래 포스팅을 다시 살펴보자. DI와 IoC에 대해서 - 1의존성 주입 형태로 객체사이의 협력관계를 구성하기 위
지난 번 포스팅에서 양방향 연관관계를 맺었을 때 발생했던 문제에 대해서 소개했었다.Spring Data JPA에서 양방향 영속성 전파 문제이번 포스팅에서는 왜 이런 문제가 발생했는지 살펴보자.지난 번 이슈가 발생했던 코드에 대해서 살펴보자.위의 코드에서 course의
오늘 Spring 강의를 들으며 간단한 웹 어플리케이션 구현을 따라해보았는데, 강의랑 똑같이 해보았는데 문제가 생기는 부분이 있었다.
알고리즘 문제를 Kotlin으로 하기 시작 한 후, 여러 collection들을 활용해 조금 복잡하게 처리하다 보면 extension function들을 제대로 공부 해야겠다는 생각이 든다. 길게 썼던 코드도 다른 사람의 코드를 보면 정말 짧게 해결되는 경우가 많은데
배경 Kotlin을 쓰면서 열심히 코드를 작성하다가 다른 사람이 작성한 코드를 봤는데 나보다 훨씬 짧은 경우가 있을 것이다. 오늘 튜터님의 과제 해설을 보다가 몇 줄짜리 코드가 그냥 단순히 한 줄의 표현으로 설명되는 것을 보고 Kotlin의 Scope function
Kotlin을 써서 어느정도 간단한 프로그램들을 몇 개 개발하다 보니 처음 왜 Kotlin이어야 할까 하는 생각이 들었다. 단순히 요즘 나온 언어이고, Java를 대체하고 있다라는 말만 들어서 막연하게 시작했던 것이지 왜 Java를 대체하고 있고, 요즘 나왔다면 어떤
Kotlin 문법에 슬 적응하고 있던 시점, 몇 가지 과제를 마치고 Kotlin 공식 Document에 제공되어 있는 Spring 튜토리얼을 따라가 보고 싶어졌다. Spring에 대해 배우려고 검색하다 보면 Java 기반으로 되어 있는 경우가 많아 헷갈려서 그냥 공식
객체지향 프로그래밍을 공부하다 보면 간단한 예시에서는 이해가 되지만 조금 복잡해지면 클래스를 어떻게 나누어야 할지, 어떤 부분을 추상화 해야하는 지, 함수는 어떻게 분리하는 게 좋은 지 헷갈리는 경우가 정말 많다. 이번 글에서는 내가 공부하면서 가졌던 의문들과 튜터님에
오늘 간단하게 Kotlin을 활용한 숫자야구 게임을 만들다가 중복된 숫자 없는 n자리 숫자를 만드는 함수를 작성하게 되었다. 해당 문제에서는 자리수가 적어 상관이 없겠지만 자리수가 많아지는 경우에 어떻게 하면 비교적 효율적으로 작성할 수 있을 지 고민해보았다. 가장 쉽
배경 객체지향 프로그래밍(Object-Oriented Programming)에 대해서 들어본 적이 있을 것이다. 지금 까지 내가 알고 있는 객체지향이란 단순히 '객체'를 만들고 이 객체들이 각각의 역할을 가지고 소통하게 끔 하는 것 정도였다. 어떻게 하는 것이 객체지