본문 바로가기

프로그래밍/Spring17

[JPA] JPA의 IDENTIFY 테이블에서 다건 insert 시간 비교 - save vs saveAll 안녕하세요. 오늘은 JPA에서 auto_increment 테이블에 bulk insert를 지원하지 않는 이유에 대해서 알아보도록 하겠습니다. 그리고 JPA를 이용해서 다량의 데이터를 넣어보고 각 insert가 완료되기 까지의 시간을 확인해보는 포스팅을 진행하도록 하겠습니다. 또한 왜 이런 상대적인 결과가 나왔는지도 알아보도록 하겠습니다. JPA와 bulk insert, 그리고 IDENTIFY 일반적으로 RDBMS에서는 bulk insert라고 하여 한번의 쿼리로 여러건의 데이터를 insert 할 수 있는 기능을 제공해주고 있습니다. 이런 bulk insert 쿼리를 이용하면 한번의 쿼리로 여러건의 데이터를 한번에 insert 할 수 있기 때문에 데이터베이스와 어플리케이션 사이의 통신에 들어가는 비용을 줄.. 2021. 9. 24.
[Spring] Spring의 Event를 어떻게 사용하는지에 대해서 알아봅시다. - @TransactionalEventListener에 대해서 안녕하세요. 오늘은 Spring의 Event의 2번째 시간으로 @TransactionalEventListener에 대해서 알아보는 시간을 가져보도록 하겠습니다. 이전 포스팅에서는 Spring에서 Event란 무엇이며 기본적인 구현에 대해서 알아보았습니다. 이쪽은 [Spring] Spring의 Event를 어떻게 사용하는지에 대해서 알아봅시다 포스팅을 참고해주시기 바랍니다. @TransactionalEventListener Event를 사용할 때 기본적으로 사용하는 @EventListener는 event를 publishing 하는 코드 시점에 바로 publishing합니다. 그런데 우리는 event를 퍼블리싱 할때는 대부분 메인 작업이 아닌 서브의 작업이 많고 비동기로 진행해도 되는 경우도 많습니다. 다른.. 2021. 8. 23.
[Spring + JPA] jpa에서 Repository를 이용한 비관적락을 구현해봅시다. With MariaDB 안녕하세요. 오늘은 이전 시간에 이어서 비관적락을 JPA를 통해 이론적인 부분과 이를이용하여 구현하는 방법, 그리고 도출되는 쿼리를 알아보도록 하는 시간을 가져보도록 하겠습니다. 비관적 락 비관적락은 내가 접근하고 하는 Database 리소스에 다른사람이 접근조차 하지못하도록 락을 걸고 작업을 진행하는 것을 말합니다. 물론 여기서 접근이라는 것은 READ 작업과 WRITE 작업이 분할되어 있습니다. 경우에 맞춰 둘다 불가능할지 아니면 하나만 가능할지를 정하는것이 가능합니다. 비관적락을 사용할 때 2가지 옵션을 선택할 수 있습니다. 배타락(exclusive lock)과 공유락(shared lock)입니다. 공유락을 걸면 다른 트랜잭션에서는 읽기는 가능하지만 쓰기는 불가능힙니다. 베타락에서는 다른 트랜잭션에.. 2021. 8. 16.
[JPA] jpa에서 Repository를 이용한 낙관적락을 구현해봅시다. 안녕하세요. 이전 시간에 저희는 [database] 낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock) 포스팅에서 낙관적락과 비관적락의 이론에 대해서 알아보았었습니다. 오늘은 이어서 Spring의 JPA에서 낙관적락을 구현하는 방법과 결과에 대해서 알아보는 시간을 가져보도록 하겠습니다. 환경설정 오늘의 테스트를 진행하기 위해서는 Spring과 JPA의 설정이 필요합니다. 해당 설정에 대한 부분은 생략하도록 하겠습니다. 만약 빌드도구로 gradle kotlin dsl 을 이용하신다면 [kotlin + Spring] 코틀린, Spring Boot 환경에서 JPA 사용하기, plugin과 함께를 참고해주시면 좋을것 같습니다. 테스트 Entity 오늘 테스트를 도와줄 Entit.. 2021. 8. 14.
[Spring] Spring의 Event를 어떻게 사용하는지에 대해서 알아봅시다 안녕하세요. 오늘은 Spring의 Event에 대해서 알아보는 시간을 가져보도록 하겠습니다. 오늘 알아볼 내용은 Event란 무엇인가 ? 그리고 Spring에서 구현하는 방법은 무엇인가 ? 에 대한 내요입니다. Event ? Spring은 내부에 Event라는 메커니즘을 가지고 있습니다. Event란 Spring의 Bean과 Bean 사이의 데이터를 전달하는 방법중 하나입니다. 일반적으로 데이터를 전달하는 방법은 DI를 통해서 이루어집니다. 아래의 코드를 보시면 A 클래스에서 B에 대한 의존성을 주입받는 것을 알 수 있습니다. 이렇게 A는 이제 B의 메서드를 호출하여 본인의 클래스에서 사용할 수 있게 됩니다. @Service public class A { private final B service; pu.. 2021. 8. 11.
[JPA] 테이블의 한 컬럼 내에서 N개의 값을 가지는 방법 안녕하세요. 오늘은 처음으로 여러분들께 JPA에 관련하여 포스팅을 하려고합니다. 저는 대부분의 프로젝트에서 JPA와 QueryDsl을 사용하고 있습니다. 사용하는 이유는 확실히 간편하기 때문입니다.. 그리고 String이 아닌 메서드 형으로 쿼리를 작성하기 때문에 만약 잘못된 점이 있다면 QueryDsl 덕분에 컴파일 타임에 찾을 수 있고 객체로 DB Table을 관리할 수 있다는 점이 있습니다. 사용하기 위한 러닝커브는 상당히 높은 편이지만 익숙해지기만 한다면 다시 Mybatis로는 돌아갈 수 없는 편함을 제공합니다. 여러분들과 오늘 이야기 나눠보고자 하는 내용은 JPA를 이용할 때 테이블의 컬럼에 내의 N개의 값을 가지는 방법입니다. 요구사항 한 게임에 게임에 대해서 리뷰를 남깁니다. 리뷰를 남길 때.. 2020. 12. 12.
[Spring] Spring의 핵심기술 PSA - 개념과 원리 안녕하세요. 오늘은 오랜만에 Spring에 대해서 이야기 해보고자합니다. [Spring] Spring의 정의와 기본 개념 포스팅에서 Spring의 대표적인 핵심가치 3가지로 IoC, AOP, PSA가 있다고 말씀드렸었습니다. 그리고 [Spring] Spring의 핵심 기술 IoC / DI에서 그 중 하나인 IoC/DI에 대해서 알아보는 시간을 가졌습니다. 그리고 이후 AOP에 대해서 3개의 포스팅 ([Spring] Spring AOP - 기본 이론편, [Spring] Spring AOP - 실전편, [Spring] Spring AOP - 원리편)에 걸쳐서 함께 알아보는 시간을 가졌습니다. 오늘은 마지막 남은 핵심가치인 PSA(Portable Service Abstraction)에 대해서 알아보는 시간을 .. 2020. 11. 25.
[Spring] Scheduler 어떤걸 사용해야 할까 ? - Spring Scheduler와 Spring Quartz 일정한 시간간격 또는 일정한 시각에 특정 로직을 돌리기 위해서 사용하는 것을 Scheduler라고 합니다. 이런 Scheduler는 Spring에서 Spring Scheduler와 Spring Quartz라는 2가지 방식으로 제공됩니다. 1가지 일에 2가지 방식을 Spring에서 제공하다니... 어떤걸 쓰면 좋을까요? 오늘은 2가지의 공통점과 차이점 그리고 내 프로젝트에서는 어떤 Library를 사용하면 좋을지 알아보는 시간을 가져보도록 하겠습니다. 사용법 먼저 각 라이브러리를 어떻게 사용할 수 있는지 확인해보겠습니다. 먼저 말씀 드리자면 Spring Scheduler를 사용하는 것보도 Spring Quartz를 사용하는 것이 좀 더 복잡하며 어렵습니다. Spring Scheduler Spring Sch.. 2020. 9. 15.
[Spring] Spring AOP - 원리편 안녕하세요. 오늘은 Spring AOP의 3번째 시간으로 마지막 시간입니다. 오늘은 AOP가 Spring 내부에서 구현되는 원리에 대해서 한번 알아보는 시간을 가져보도록 하겠습니다. AOP를 사용하는 방법 및 기본적인 이론은 아래 링크를 통해 이전 포스팅을 확인해주시기 바랍니다. [Spring] Spring AOP - 기본 이론편 [Spring] Spring AOP - 실전편 정적 프록시와 동적 프록시 Spring의 AOP는 프록시 패턴을 사용합니다. proxy pattern에 대해서는 예전에 [Spring & Design Pattern] Spring에서 발견한 디자인패턴_Proxy Pattern 으로 포스팅 한적이 있으니 참고하시면 자세히 알 수 있습니다. 만약 Class에 .. 2020. 7. 1.
[Spring] Spring AOP - 실전편 안녕하세요. 오늘은 저번 포스팅, 기본 이론편에 이어서 Spring AOP에 대해서 실제 적용을 해보며 알아보는 시간을 가지도록 하겠습니다. 저번 포스팅에서 배운 이론이 어떻게 적용되는지 눈으로 확인하시며 쉽게 이해가 되셨으면 좋겠습니다. AOP 적용 타입 Spring AOP는 아래와 같은 type의 Advice를 제공합니다. @Before Before는 target 메서드가 실행되기 전에 Advice가 실행됩니다. target이 실행되지 못하도록 막는 방법은 가지고 있지 않습니다. (exception을 발생시키면 되기는 합니다.) @After After는 target 메서드가 실행된 후에 Advice가 실행됩니다. 정상적으로 메서드가 마무리되든 비정상적으로 exception이 발생하든 무조건 실행되는 .. 2020. 6. 23.
[Spring] Spring AOP - 기본 이론편 안녕하세요. 오늘은 Spring AOP에 대해서 알아보고 실제로 적용하는 방법에 대해서 이야기해보고자합니다. AOP는 [Spring] Spring의 정의와 기본 개념에서 Spring을 비침투적인 기술로 만들기위한 3가지 기술중 하나라고 언급한 적이있습니다. 오늘부터는 Spring AOP에 대해서 알아보는 시간을 가져보도록 하겠습니다. AOP 먼저 아래 코드의 상황을 보면서 문제를 이해해보도록 하겠습니다. doSomething이라는 메서드가 있습니다. 이 메서드는 어떤 바쁜 일을 합니다. 이렇게 운영하던 중 새로운 요구사항이 들어왔습니다. 바로 doSomething 메서드가 실행되는 시간을 찍어달라고 합니다. 그렇다면 우리는 아래와 같이 timeCheck 메서드를 만들어 코드를 작성할 수 있습니다. pub.. 2020. 6. 20.
[Spring] Spring의 IoC/DI Container 안녕하세요. 저번 포스팅에서 IoC와 DI의 개념에 대해서 알아보았습니다. IoC 개념을 설명하며 Spring의 IoC는 일반적인 IoC 개념에 DI를 의 개념을 추가한 IoC/DI Container라고 설명을 드렸습니다. 오늘은 구체적으로 일반적인 IoC에 어떤 개념이 추가 된것인지 한번 보도록 하겠습니다. 본편에 들어가기 전에 먼저 Spring에 대한 용어를 정리한 후 Spring Container의 구조에 대해서 알아보도록 하겠습니다. 용어 정리 Spring IoC를 공부하다보면 생소하지만 한번쯤은 흘려 들어본 용어들이 많이 나옵니다. 이러한 용어를 정리하는 시간을 가지도록 하겠습니다. 빈(Bean) 빈 또는 빈 오브젝트는 Spring이 IoC 방식으로 관리하는 오브젝트라는 뜻. 즉, 우리가 일반적.. 2020. 3. 21.