Programming/Languages (Java, etc)40 [Spring] AOP 2편 - Spring의 AOP과 @Transactional 2023.12.02 - [Programming/JAVA] - [Java] AOP 핵심 기술 - Proxy, Dynamic proxy, Factory bean [Java] AOP 핵심 기술 - Proxy, Dynamic proxy, Factory bean 목차 AOP란 프락시(Proxy)의 정의, 프락시 패턴 다이내믹 프락시 다이내믹 프락시 예제 한계 스프링의 ProxyFactoryBean : 어드바이저 Spring 3대 기술 (DI, PSA, AOP) 중 하나인 AOP는 프락시 기반으로 동작한 kghworks.tistory.com 이전 포스팅에서 이어진다. 이번 포스팅에서는 트랜잭션을 스프링 AOP를 사용해 구현해 본다. 스프링이 제공하는 어노테이션 @Transactional을 사용해 더 직관적이고 간단.. 2023. 12. 3. [Java] AOP 1편 - 핵심 기술 Proxy, Dynamic proxy, Factory bean 목차 AOP란 프락시(Proxy)의 정의, 프락시 패턴 다이내믹 프락시 다이내믹 프락시 예제 한계 스프링의 ProxyFactoryBean : 어드바이저 Spring 3대 기술 (DI, PSA, AOP) 중 하나인 AOP는 프락시 기반으로 동작한다. Spring AOP를 보기에 앞서, 프락시의 개념을 알아보고, 다이내믹 프락시를 통해 동적으로 프락시를 생성해본다. 팩토리 빈을 통해 다이내믹 프록시를 빈으로 등록해 Spring DI로 편하게 사용해 본다. 그리고 스프링 ProxyFactoryBean을 통해 어드바이저 (Advisor)의 개념을 익힌다. 이어지는 포스팅에서 스프링 AOP를 본격적으로 다룬다. AOP란? (Aspect Oriented Programming( 애플리케이션을 설계하다면 코드 여기저기.. 2023. 12. 2. [JPA] Spring Boot JPA 초간단 CRUD 테스트 작성하기 목차 Spring initializr 의존성 추가 Datasource / Hibernate 설정 Entity 정의 테스트 추가 실행 개발환경 Java 17 Spring Boot 3.2.0 Gradle 8.4 H2 Database Spring Data JPA Lombok spring initializr 아래에서 개발환경에 맞게 스프링 프로젝트 생성 https://start.spring.io/ 의존성 추가 plugins { id 'java' id 'org.springframework.boot' version '3.2.0' id 'io.spring.dependency-management' version '1.1.4' } group = 'com.sample.jpa' version = '0.0.1-SNAPSHOT.. 2023. 11. 29. [Java] JPA N+1 원리 이해하기 목차 N+1 문제 정의 N+1 원인 1. 연관관계의 주인이 누구인가 N+1 원인 2. JPQL은 연관객체의 fetchType을 모른다 N+1 해결방법 정리 참고 포스팅에는 아주 간단히 아래 2개의 테이블을 사용한다. @Entity @Table(name = "team") public class Team { @Id private String id; private String name; @OneToMany(mappedBy = "team", fetch = FetchType.LAZY) private List members = new ArrayList(); // 생략 } @Entity @Table(name = "member") public class Member { @Id private String id; priv.. 2023. 11. 14. [Java] Java 8 사용하기 : 람다와 스트림으로 리팩터링 목차 람다로 대체할 수 있는 코드 method reference로 한번 더 리팩터링 Streams를 활용한 declarative programming 람다와 OOP 디자인 패턴 https://kghworks.tistory.com/140 [Java] Java 8 사용하기 : 가독성과 유연성, 람다와 Streams API 목차 Java 8로 향상되는 가독성과 유연성 익명 클래스 -> 람다 표현식 람다 표현식 -> 메서드 참조 명령적 데이터 가공 -> Streams API 함수형 인터페이스 Java 8 이상의 버전을 사용하면서 legacy를 Java 8 kghworks.tistory.com 앞선 포스팅에서 Java 8이 제공하는 람다와 스트림에 대한 유용함을 간단히 알아보았다. 이번에는 기존 코드들을 람다로 .. 2023. 9. 23. [개발일지] Java application에서 RDBMS에 bulk insert 목차 step1. 최적의 bulk insert sql script 찾기 step2. Java 구현 : UNION ALL batch insert Spring Data JPA saveAll과의 성능 비교 정리 다들 엑셀을 참 좋아한다. 몇만 개의 row를 가지고 엑셀로 이리저리 조작하는 사업부서 분들을 보면 경이롭다. 동시에 컴퓨터가 매우 힘들어하는 게 옆에서도 느껴진다. 아무튼 이번에 엑셀 업로드 기능으로 대용량으로 테이블에 insert 할 기능이 생겼다 (최대 수만 건 규모). 이런 대용량 insert는 실제 요구사항이 있는 편이다. 사업 부서에서 이벤트 소스를 모아 엑셀 파일로 개발팀에 전달한다던지, 일정 기간 동안 소스를 모집해서 디비 테이블에 넣는다던지, 백오피스 시스템에서 엑셀 업로드 기능을 활용.. 2023. 9. 21. 이전 1 2 3 4 5 ··· 7 다음