개-발/Java + Spring + Kotlin

JDK Dynamic Proxy 와 CGLib Dynamic Proxy와 CGLib은 모두 런타임 위빙 방식이며 프록시 패턴으로 동작한다. 따라서 메서드 실행 시에만 위빙이 가능하다. 그래서 Dynamic Proxy와 CGLib를 사용하는 스프링 AOP도 메서드 실행 조인포인트만 지원한다.위빙 이란 ?위빙(Weaving)은 AOP(Aspect-Oriented Programming)에서 사용되는 중요한 개념으로, 어드바이스(Advice)와 타겟 객체 사이에 관점 지향 기능을 적용하는 프로세스를 의미합니다. 클래스 로딩 시점이나 프록시 객체 생성 시점에, AOP 프레임워크가 바이트코드를 수정하여 어드바이스를 적용하는 방식입니다. 이 방식은 JDK Dynamic Proxy나 CGLIB Dynamic ..
트랜잭션하나의 작업단위로 묶어 실행 시킨다. 트랜잭션은모든 작업을 완료 (commit) / 모든 작업을 무효화 (rollBack)단 두가지만 가능해야 한다.원칙트랜잭션에는 4가지 원칙이 있다.원자성 (Atomicity)트랜잭션은 원자적인 단위로 간주된다.트랜잭션에 속한 모든 연산은 전체가 성공하거나 전체가 실패하는 것만 보장한다.트랜잭션이 동작 중 어떤 연산이 실패하면 모든 상태가 이전으로 돌아간다(rollback). 일관성 (Consistency)트랜잭션의 실행 전후에 데이터베이스는 일관된 상태여야 한다. 은행 A 계좌에서 돈을 인출 한다 B 계좌로 돈이 입금 된다  쇼핑몰 고객이 A상품을 구매한다A상품은 재고가 차감 된다   고립성 (Isolation)여러 트랜잭션이 동..
problem CICD 를 하다가 application.properties 관리를 서버에서 was로 빌드때 항상 복사해 주는 번거로움이 있었다. 번거로움이라고 하기엔 조금 그렇고.... 더 보안에 신경 쓰려면 이렇게 관리하는게 맞지만 조금 더 간편한 방법을 찾다가 jasypt 라이브러리를 찾았다. solution Jasypt Jasypt is a java library which allows the developer to add basic encryption capabilities to his/her projects with minimum effort, and without the need of having deep knowledge on how cryptography works. 개발자가 암호화 작동 ..
problem 누구나 한번쯤 테스트 코드를 짜다보면 이런 생각을 해봤을 것이다. " 누가 테스트 데이터 좀 자동으로 만들어주면 안되나... " 그래서 찾았다.... solution 네이버페이에서 개발한 오픈소스 Fixture Monkey https://github.com/naver/fixture-monkey GitHub - naver/fixture-monkey: Let Fixture Monkey generate test instances including edge cases automatically Let Fixture Monkey generate test instances including edge cases automatically - naver/fixture-monkey github.com Buil..
problem 저번 글에 addBatch에 대한 글을 적었는데 기초에 대한 정리 글이 없어서 적어본다. https://soobysu.tistory.com/131 [Spring Batch] addBatch로 다량 쿼리문 한번에 실행 (bulk insert) 결과 10만건 데이터 > JPA 27분 , addBatch 28초 Problem 엔터티 indexes 를 설정하고 검색최적화를 위해 더미데이터를 DB에 저장 하려고 하는데 10만건의 데이터를 넣는데 굉장히 많은 시간이 걸렸다. 어떻 soobysu.tistory.com solution 스프링 배치 구성 잡 런처 -> 잡 실행 시키는 주체 잡 -> 작업의 단위 ( 한개이상의 스텝으로 구성 되어있다 ) 스텝 -> 행위 ( 데이터 읽기 read , 데이터 작업..
prblem version 정보를 환경변수로 사용 할 수 없을까 ? 따로 관리 하고 싶었다. //build.gradle.kts plugins { id("org.springframework.boot") version "3.1.0" apply false id("io.spring.dependency-management") version "1.1.0" kotlin("jvm") version "1.8.21" kotlin("plugin.spring") version "1.8.21" apply false } solution //gradle.properties ###application version applicationVersion = 0.0.1 ###kotlin version kotlinVersion=1.8.21 ..
Problem 레이어드아키텍처 나 헥사고날아키텍처.. 등등 에서 모듈을 나누는 경우가 많다. 모듈을 분리 하는 이유는 재사용성 , 계층간 관심사 분리 , 추상화 등이 있다. 무엇보다 이번에 계획하게 된 이유는 컨트롤러를 코틀린으로 작성하고 JPA를 직접적으로 사용하는 Service계층은 자바로 작 성하고 싶었다. 코틀린은 Null에 대한 안정성과 자바코드보다 훨신 더 간결함을 가지고 있는 언어이다. 위 장점은 요청을 받는 Controller 단에 최적의 언어라고 생각했다. 하지만 코틀린은 아직 Jpa 와 100프로는 어울리지 않는 언어라고 한다. https://tech.inflab.com/20240110-java-and-kotlin/ Spring Boot & JPA에서 Java와 Kotlin을 함께 사용..
problem Read 기능은 요청의 90프로를 차치 할 만큼 굉장히 중요하다 또한, 일반적인 웹서비스의 기능은 서비스가 복잡해질수록 다양한 요구가 생기며, 변경 역할과 조회 역할은 다른 성격을 띄게 되어 분리의 필요성이 커진다. ( 관심사 분리 ) 조회 서버의 스케일 업/아웃 하여 조회성능을 높일 수도 있다. 그만큼 서비스의 복잡도도 엄청나게 늘어나고 유지보수 비용도 늘어난다. 복잡도는 공부로 유지보수 비용은 몸빵으로 극복하면 되지 않는가 ! solution DB 를 분리하고 최종적으로 Read서버를 분리하는 모습으로 변화 된다. 변경 전파 ( EventSourcing ) Pub/Sub 구조로 Kafka, Redis ,RabitMQ 등이 있다. 이렇게 분리 해두면 Read의 성능 CreateUpdate..
imSoo
'개-발/Java + Spring + Kotlin' 카테고리의 글 목록