본문 바로가기

Spring28

[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.
[kotlin + Spring] 코틀린 환경에서 Spring Boot 사용하기 우리가 자바를 사용하는 이유는 스프링 프레임워크가 있기 때문이다라는 말이 있을 정도로 자바 언어를 사용하는 유저에게 스프링은 정말 없어서는 안될 존재이기도 합니다. 최근 코틀린이 자바유저들의 관심을 받기 시작한것도 물론 언어적으로 좀 더 실용적이라는 관점도 있지만 스프링을 사용할 수 있기때문에 진입장벽이 낮게 여겨지는 이유도 있을것이라고 봅니다. 그런이유로, 오늘은 코틀린 환경에서 스프링 프레임워크를 사용해보도록 하겠습니다. 환경 오늘 프로젝트는 아래의 환경을 기반으로 이루어집니다. 만약 동일하게 따라했으나 오류가 난다면 버전문제일 수 있으니 확인해주시기 바랍니다. JDK 버전 : 1.8.0.292 kotlin 버전 : 1.4.32 spring boot 버전 : 2.4.5 gradle 버전 : 6.8.3.. 2021. 7. 25.
[redis + Spring] Spring Data Redis를 이용한 Transaction 처리 안녕하세요. 오늘은 Java의 Spring 환경에서 Transaction을 적용해보도록 하겠습니다. 의존성 먼저 Spring에서 Redis를 사용하기 위해서 아래와 같은 의존성을 부여하도록 하겠습니다. spring-boot-starter의 버전은 본인이 사용하시는 SpringBoot 버전을 기본적으로 따라가기 때문에 버전은 따로 명시하지 않았습니다. implements("org.springframework.boot:spring-boot-starter-data-redis") 환경설정 아래는 redis와 연결하기 위한 관련된 application.yml 파일입니다. spring: redis: port: 6379 host: localhost Redis도 @Transactional을 이용해서 트랜잭션을 관리할 .. 2021. 7. 22.
[spring + spock + TestContainer] Spring, Spock Framework에서 기능 테스트 하기 - TestContainer 사용 안녕하세요. Spring에서 DB 기능 테스트를 할 때 어떤 걸 주로 이용하시나요? 제가 생각하기로는 여러분들은 로컬에서 쉽게 돌릴 수 있는 인메모리 DB인 H2를 가장 많이 사용하실 것 같습니다. 왜냐하면 사용하기 쉽기 때문이겠죠. 오늘제가 여러분들께 알려드리고자 하는 것은 조금 다른 기능 테스트 방법을 제공해주는 TestContainers입니다. H2를 사용하는 것과 어떻게 다르며 사용할 수 있는지 알아보도록 하겠습니다. :) TestContainer TestContainer는 로컬 환경에서 실제 DB에 테스트를 할 수 있도록 지원하는 Java 라이브러리입니다. DB라면 인메모리 DB인 H2를 사용하면 되지 않느냐? 라고 생각하실 수 있습니다. 그럼에도 불구하고 TestContainer를 왜 사용할까.. 2021. 4. 30.
[elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - 기본적인 검색 만들기 안녕하세요. 오늘 실습해볼 내용은 elasticsearch를 이용하여 Spring에 빠른 검색을 적용해 보는 것입니다. 이전시간까지 우리는 아래 포스팅을 통해서 환경설정, index를 만들고 document의 CRUD를 적용해보는 것에 대해서 실습해 보았습니다. [elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - 환경설정과 Index 만들기 [elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - Document CRUD 만들기 ElasticSearch를 사용한다는 것은 일반적으로 빠른 검색 서비스를 이용하기 위한 목적을 가지고 계실 것입니다. 이전까지는 검색을 하기위해 데이터를 쌓는 부분에 .. 2021. 4. 23.
[elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - Document CRUD 만들기 안녕하세요. 오늘은 이전 시간에 이어서 elasticsearch를 java Spring에서 사용하는 방법에 대해서 코드로 알아보도는 시간을 가져보도록 하겠습니다. 오늘 알아볼 내용은 Java Spring을 이용하여 ElasticSaerch와 기본적인 Document의 CRUD 작업을 하는 방법입니다. Document는 ElasticSearch에 저장되는 실제 데이터입니다. RDB로 치자면 Table의 row에 해당한다고 볼 수 있습니다. 주의사항 제가 사용하는 ElasticSearch 버전은 7.9.3 버전입니다. Java High Level REST Client SDK 같은 경우 버전에 종속적이기 때문에 만약 버전을 꼭 맞추시고 사용하시기를 권장드립니다. 대표적인 예로 6 버전에는 Type 이라는 In.. 2021. 3. 23.
[elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - 환경설정과 Index 만들기 안녕하세요. 오늘은 Elastic에서 제공하는 SDK를 이용하여 Java에서 ElasticSearch에 통신히여 결과를 가져올 수 있도록 해보겠습니다. ElasticSearch의 이론적인 내용에 대해서는 추후에 별도 포스팅으로 여러분들께 공유드리도록 하겠습니다. ElasticSearch API 종류 Elastic에서 제공하는 Java SDK는 2가지 종류가 있습니다. 첫번째는 Low Level SDK이며 두번째는 Hight Level SDK 입니다. 저희가 이번에 사용할 SDK는 Hight Level SDK입니다. Java Low Level REST Client ElasticSearch에서 제공하는 Low Level Java 통신 SDK 입니다. http 요청을 만들 수 있는 라이브러리입니다. Elast.. 2021. 3. 10.
[spring + 객체 지향 원칙] Spring에서의 의존성 역전의 원칙(Dependency Inversion Principle) 안녕하세요. 오랜만에 포스팅을 올리게 되네요. 새해가 되서 책한권 읽어야지 했는데... 생각보다 오래 걸렸습니다. 그 책을 다 읽고 이제 포스팅을 하려고 합니다. 아쉽지만 책과 관련된 내용은 아닙니다. 책을 읽다가 이거 포스팅하면 좋겠다 싶었던 부분이 있었거든요. 오늘 여러분들께 알려드릴 것은 객체 지향 5가지 원칙 중 하나인 의존성 역전의 원칙(Dependency Inversion Principle)입니다. 사실 객체 지향의 5가지 원칙에 대해서는 2년정도 전에 한번 일괄적으로 포스팅을 했었습니다. 해당 원칙에 대해서 생소하신 분들은 객체지향 설계의 5가지 원칙 S.O.L.I.D 포스터를 참고해주시면 도움이 될 것입니다. 오늘은 java Spring을 사용할 때의 예를 들어 DIP에 대해서 좀 더 이해.. 2021. 1. 10.
[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.