Spring
-
Spring delete 메소드 주의사항Spring 2023. 2. 14. 22:33
Delete 쿼리 종류 TL;DR 속도 측면에서는 deleteAllInBatch() 가 가장 빠르다. test 코드를 제외하고는 deleteAllInBatch() 를 사용하지 말자 설명 delete(entity) 해당 메서드는 CrudRepository 에 등록되어 있는 메서드 입니다. 엔티티를 파라미터로 받아 해당 엔티티를 삭제합니다. deleteAll() 해당 메서드는 CrudRepository 에 등록되어 있는 메서드로 해당 레포지토리에서 관리 되는 모든 entity 를 삭제합니다. deleteAllInBatch() 해당 메서드는 JpaRepository 에 등록되어 있는 메서드로 모든 entity 를 한번의 함수 실행으로 삭제합니다. 예시 코드의 예시로 설명해보겠습니다. 예시로 다룰 엔티티는 Me..
-
Kotlin 에서 Spring 으로 테스트할 때 주의사항Spring 2023. 2. 14. 20:19
문제 상황 kotlin 에서 JUnit 을 사용하여 테스트를 구성했지만 org.junit.jupiter.api.extension.ParameterResolutionException: No ParameterResolver registered for parameter 오류가 발생했습니다. @SpringBootTest class MemberRepositoryTest( val memberRepository: MemberRepository, ) { @Test @DisplayName("멤버 삭제") fun deleteMember() { val member = memberRepository.save(MemberFactory.of("test")) memberRepository.delete(member) } } 해결 방..
-
Spring BeanSpring 2022. 7. 25. 23:40
스프링은 어노테이션, Java 혹은 xml 기반으로 bean 을 정의하면 객체를 bean 으로 등록하여 개발자가 편하게 주입 받아 사용할 수 있습니다. 이번 포스팅에선 Spring Bean 과 Spring IoC 컨테이너에 대해 알아보겠습니다. Bean 이란? 스프링 IoC 컨테이너가 관리하는 객체를 의미합니다. A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container. - 스프링 공식문서 - 그렇다면 스프링 IoC 컨테이너란 무엇을 의미할까요? Spring IoC 컨테이너란? ApplicationContext 인터페이스가 Spring IoC 컨테이너를 대표합니다. Bean을 관..
-
Filter 와 Interceptor 의 차이Spring 2022. 6. 26. 23:16
Spring Filter 와 Interceptor 이번 포스팅에선 닮은듯 다른 Filter 와 Interceptor 에 대해서 자세히 알아보도록 하겠습니다. 위 2개와 AOP 는 공통적으로 여러 작업을 처리함으로써 중복된 코드를 제거할 수 있다는 공통점이 있습니다. 3가지 지능들은 모두 어떤 행동을 하기전에 먼저 실행하거나, 실행한 후에 추가적인 행동을 할 때 사용되는 기능들입니다. 1. 필터(Filter) J2EE 표준 스펙 기능입니다. J2EE 란, 자바를 이용하여 서버 개발을 하기 위해 만들어진 플랫폼입니다. J2EE 스펙에 따라 제품으로 구현한 것을 웹 애플리케이션 서버 또는 WAS(대표적으로 톰캣)라 불립니다. Dispatcher Servlet 에 요청이 전달되기 전/후 에 URL 패턴에 맞는 ..
-
@Transaction(readOnly = True)Spring 2022. 5. 8. 15:07
TL;DR 안 써도 됩니다. 하지만 사용하면 성능 최적화 및 실수로 데이터를 변경하는 일을 방지할 수도 있습니다. 본문 JPA 를 사용하다보면 @Transactional(readOnly=True) 가 종종 사용되는 것을 볼 수 있습니다. @Transactional 을 사용하면 Spring AOP 가 해당 메소드 앞, 뒤에 transaction 시작과 transaction.commit() 을 실행해주기 때문에 사용해야 한다는 것을 알았지만 @Transactional(readOnly = True) 는 사용을 하던 하지 않던 별 차이(사실 그동안 어떤 차이도 느끼지는 못했습니다.) 를 느끼지 못했기 때문에 왜 써야하는지 의문이 많이 들었습니다. 최근에 동욱님 책으로 공부를 하고 있을 때 모든 포스팅을 읽어오는..
-
Spring Boot와 AWS 로 혼자 구현하는 웹서비스 1, 2 장책/스프링부트와 AWS로 혼자 구현하는 웹서비스 2022. 4. 22. 23:45
이동욱님이 쓰신 "스프링부트와 AWS로 혼자 구현하는 웹 서비스" 를 현재(SpringBoot 2.6.7) 버전에 맞게 일부 변형했습니다. 전반적인 내용은 동일합니다. 1장 intellij 의 간단한 세팅 및 github 와 intellij 를 연결한 부분이 나옵니다. 이 부분은 다른 블로그 글도 있으니 참고하셔도 될 거 같습니다. 2장 테스트 코드는 현재 웹 서비스에서 매우 중요한 요소입니다. 테스트 코드에서 꼭 짚고 넘어가야 하는것은 TDD와 단위테스트(unit test)입니다. 2.1 테스트 코드 소개 TDD 테스트가 주도하는 개발(Test-Driven-Development, 혹은 Test-First-Development) 을 의미합니다. 항상 실패하는 테스트를 먼저 작성하고(RED) 테스트가 통과..
-
Spring Cloud Sleuth(1)Spring 2022. 1. 29. 23:30
Spring Cloud Sleuth(1) 아래의 내용은 Spring Cloud Sleuth 2.2.8 RELEASE 버전을 한국말로 번역한 내용입니다. https://docs.spring.io/spring-cloud-sleuth/docs/2.2.8.RELEASE/reference/html/ 소개 Spring Cloud Sleuth 는 Spring Cloud 를 위한 분산 추적을 구현한 솔루션입니다. 용어 Spring Cloud Sleuth 는 구글에서 개발한 Dapper 의 용어를 빌려 사용합니다. Span 일의 가장 기본적인 단위입니다. 예를 들어 RPC에 응답을 보내는 것처럼 RPC 를 보내는 것은 새로운 Span 입니다. 스팬은 고유한 64비트 ID 로 식별됩니다. 또한 Trace(스팬의 총 묶음)..
-
Spring Annotation 정리Spring 2021. 5. 4. 22:07
왜 저는 스프링에서 어노테이션들을 볼떄마다 처음보는거 같을까요? 이번기회에 다 정리하려고 합니다. 이 상태로는 정말 안되겠어요 ㅠㅠ @Component Component-scan을 선언에 의해 특정 패키지 안의 클래스들을 스캔하고 해당 어노테이션이 있는 클래스에 대해서 bean을 생성합니다. @Qualifier 같은 타입의 빈이 두 개 이상이 존재하는 경우에 스프링이 어떤 빈을 주입해야 할 지 알 수 없어서 스프링 컨테이너를 초기화하는 과정에서 예외를 발생시킨다. 이 경우 @Qualifier과 @Autowired를 함께 사용하여 정확히 어떤 bean을 사용할지 지정하여 특정 의존 객체를 주입할 수 있도록 한다. @Inject @Autowired와 동일한 기능을 수행하지만 이는 JSR 표준이다. 따라서 S..