전체 글
[Spring] Pointcut 유형에 따라 Proxy 생성 방식이 달라진다? (CGLIB or JDK Proxy)
"토비의 스프링 3.1 Vol.1 > 6.5.3 포인트컷 표현식을 이용한 포인트컷"을 공부하면서 배운 부분을 기록. 여기 프록시 관련 빈 설정 파일이 있다.@Configurationclass BeanConfig { @Bean fun userService(): UserService = UserServiceImpl(userLevelUpgradePolicy(), userDao()) @Bean fun defaultAdvisorAutoProxyCreator(): DefaultAdvisorAutoProxyCreator = DefaultAdvisorAutoProxyCreator() @Bean fun transactionAdvisor(): DefaultPointcutAdvisor = ..
[Spring] junit test에서 lombok 사용하는 방법
만약 lombok을 junit test에서 사용할 수 없다면?build.gradle 파일에 다음 조건이 추가됐는지 확인해보자.dependencies { compileOnly("org.projectlombok:lombok") annotationProcessor("org.projectlombok:lombok") ... // Lombok을 테스트 환경에서도 사용하기 위한 추가 설정 testCompileOnly("org.projectlombok:lombok") testAnnotationProcessor("org.projectlombok:lombok")}-> Lombok의 애노테이션 프로세서가 테스트 코드에서도 동작하게 하자.
[JPA] drop table if exists user cascade " via JDBC
-> User 엔티티 클래스를 ddl-auto: create로 자동 DDL 생성을 하면 발생하는 오류 메시지다.-> h2에서 "user"라는 키워드가 예약어라서 그렇다.-> 엔티티에 @Table(name="users")로 테이블명을 "users"로 변경하면 해결할 수 있다.
[Kotlin] Private primary constructor is exposed via the generated 'copy()' method of a 'data' class.
문제kotlin에서는 toString(), equals(), hashCode()를 편하게 사용하기 위해 data class를 많이 사용한다.또한, 어떤 객체에 정적 팩토리 메서드를 추가하면, 보통 생성자는 private 처리하는 경우가 많다.다음은 data class + 정적 팩토리 메서드 + private 생성자를 적용한 예제이다.data class Customer private constructor( val id: String, val name: String,) { companion object { fun of(id: String, name: String): Customer { verifyIdFormat(id) return Custo..
[Kotlin] JPA 플러그인 정리
기본 생성자@Entity 클래스는 기본 생성자를 가져야 한다.why? JPA의 구현체인 hibernate는 기본생성자(protected 이상) + Reflection을 이용해 엔티티를 생성한다. 보통 kotlin 클래스는 다음과 같이 정의 하는데,@Entityclass Customer private constructor( @EmbeddedId val id: CustomerId, var password: CustomerPassword, var name: String,)이러면 기본 생성자가 안생기니, 별도로 기본 생성자를 정의해줘야 하나 싶다.-> kotlin-jpa 플러그인을 추가하면 @Entity, @MappedSuperClass, @Embeddable 클래스에 기본 생성자를 생성해..
[리액티브 프로그래밍] Operator
스프링으로 시작하는 리액티브 프로그래밍 책 정리 스프링으로 시작하는 리액티브 프로그래밍 | 황정식 - 교보문고스프링으로 시작하는 리액티브 프로그래밍 | *리액티브 프로그래밍의 기본기를 확실하게 다진다*리액티브 프로그래밍은 적은 컴퓨팅 파워로 대량의 요청 트래픽을 효과적으로 처리할 수 있는product.kyobobook.co.kr Operator란?✅ Operator리액티브 스트림즈에서 연산자 역할.ex) just(), create(), fromArray(), filter(), map()-> Reactor에서 가장 중요한 구성요소. +) Operator를 처음 이해할 때는 마블 다이어그램을 보는 것이 좋은데, 마블 다이어그램에 대한 설명은 다음 글을 참고하자.https://gksdudrb922.tistor..
[리액티브 프로그래밍] Testing
스프링으로 시작하는 리액티브 프로그래밍 책 정리 스프링으로 시작하는 리액티브 프로그래밍 | 황정식 - 교보문고스프링으로 시작하는 리액티브 프로그래밍 | *리액티브 프로그래밍의 기본기를 확실하게 다진다*리액티브 프로그래밍은 적은 컴퓨팅 파워로 대량의 요청 트래픽을 효과적으로 처리할 수 있는product.kyobobook.co.kr 시작하기에 앞서, reactor-test 모듈의 기능을 사용하기 위해, build.gradle 파일에 다음 의존성을 추가한다.dependencies { testImplementation 'io.projectreactor:reactor-test'} StepVerifier를 사용한 테스팅Reactor에서 가장 일반적인 테스팅 방식은,구독 시점에 Operator 체인이 시나리오..
[Java] String + null
Java에서 String 타입과 null에 대해 '+' 연산을 수행하면 어떻게 될까?System.out.println("123" + null);// 결과123nullNPE가 발생할줄 알았는데, 123null이 출력된다..? 그 이유는 자바 doc을 보면 알 수 있다. If an operand of type String is null, then the string "null" is used instead of that operand. -> 어느 한 피연산자가 null이면 해당 피연산자 대신 문자열 "null"이 사용된다는 뜻이다. 만약 특정 문자열에 null이 더해질 때 NPE를 발생시키고 싶다면 String.concat() 메서드를 사용하면 된다."123".concat(null)null.concat("1..