본문 바로가기
728x90

Java Spring16

Resilience4j 기본 활용 시스템이 장애가 발생하는 상황에서도 탈력적으로 시스템을 버티게 만들어주는 라이브러리 [주요기능]1. Circuit Breaker : controller에서 이슈 시 일정 시간동안 호출 막기, 일정시간 경과 후 재시도, 괜찮으면 정상처리 2. Retry : 실패한 요청을 자동으로 재시도 3. Rate Limit : 초당 호출 수 제한(과도한 트래픽으로 부터 시스템 방어) 4. Bulkhead : 어떤 서비스가 과도하게 자원 차지 시 다른 서비스의 영향을 없앰(쓰레드 풀 격리) 5. TimeLimiter : 특정 작업이 오래 걸리 시 강제종료 Rate Limit AOP예시import io.github.resilience4j.ratelimiter.RateLimiter;im.. 2025. 4. 25.
Data Converting 을 왜 DTO Static 으로 처리할까? Domain entity 를 통해 db 조회 값을 가지고와서 처리 한 뒤 반환하기 위해 DTO로 값을 할당할 것이다.이것을 service layer나 controller 또는 repo class 내 직접하는 경우가 있는데 (new 로 객체 생성하여), 이렇게 하는 것보다 DTO 내 static 을 사용하여 정적메서드로 정의하면 클래스를 기반으로 객체를 만들지 않고 호출이 가능하며, 해당 메서드에 대해 한번만 메모리 할당할 수 있다는 장점이 있다. 2025. 4. 21.
spring-boot-starter-validation Java Spring 멘토링 중에 input 값에 대한 검증을 별도 DTO 나 entity 내 method를 만들어서 수행하는 멘티들이 종종 보였는데, 값에 대한 검증 (최소 숫자 등은) spring-boot-starter-validation 을 통해 DTO 단에서 간결하게 처리하고, 로직에 대한 validation 검증을 비지니스 레이어에서 수행 하게 되면은 단일책임원칙을 준수하면서 관련된 비지니스 로직과 Test Code 도 줄일 수 있다. 왜 그렇게 하지 않는걸까? 2025. 3. 29.
instancio 자바 스프링 테스트 객체(entity, dto) 빠르게 만들어 보자 단위테스트 코드를 짤때, DTO 나 entity 와 같은 object 단위를 생성하고 속성값들을 하나하나 씩 입력해줘야 했다.또한 단위테스트를 수행할 때는 실제 data 를 고려하지 않는다.(실제 data 와 유사한 data 를 직접 넣어주게 되는데, instancio 는 이러한 data 를 랜덤하게 자동 생성해준다.) 다양한 Data를 제공해주므로써 오히려, 테스트의 정확성도 높일 수 있다.왜? 내가 지정한 Data에서는 잘돌아갈 수 있는데 다른 Data 에서는 이슈가 발생할 수도 있기때문이다.이때 이슈 핸들링이 로직적으로 잘 수행되어있는지도 비지니스 레이어에서 처리가 되어야 하는데, instancio를 통해 이를 테스트 할 수 있기때문이다.그렇다고 우리가 매번 다른 Data를 넣는것도 현실적으로 힘.. 2024. 12. 27.
ReentrantReadWriteLock vs ReentrantLock Java의 ReentrantReadWriteLock과 ReentrantLock에 대한 비교분석 글을 작성해보려한다.( JDK 5.0 이상에서 Java 동시성 유틸리티의 일부로 제공되고 있으며, 둘다 나온지가 상당히 오래되서 다들 잘알겠지만...) 우선 결혼만 이야기하면 둘다 쓰레드를  기반으로한 Lock 제어 방식으로, DB나 분산락, MQ로 동시성제어 외에Lock 이 필요할 경우 사용하면 된다. 두개의 가장 큰 차이는 Data 정합성 측면과, Reading 이 많냐? Writing이 많냐? 의 상황 이 두가지일 것이다. 1. Data 정합성 측면    : 절대적으로 정합성이 보장되어야하면, ReentrantLock 사용이 필요하다.      (한번에, 오직 하나의 쓰레드만 락획득이 가능하기 때문이다.).. 2024. 12. 21.
Java 버전 관리 하기 temurin 하나의 PC 에서 여러 자바 버전을 개발해야할 때,어떻게 하는가?매번 환경변수를 바꿔주던지, 다 설치해놓고 설치된 경로에 하나하나씩 연결하진 않는가? 이럴때 유용하게 사용할 수 있는 툴이 temurin 이다! [설치 - Mac]brew install --cask temurin@21brew install jenv 설치된 jenv 를 zshrc 에 등록해보자밑에 명령어를 입력해서 편집기로 접속하면 된다.~/.zshrc 편집기에서 하단의 내용을 추가하고 저장!export PATH="$HOME/.jenv/bin:$PATH"eval "$(jenv init -)" 그리고 밑에 명령어들을 하나씩 입력해주자//jenv 설정$ eval "$(jenv init -)"$ jenv enable-plugin export$ ex.. 2024. 11. 28.
728x90