본문 바로가기
728x90

Java Spring17

Java 버전 관리 brew install caskbrew install --cask temurin@21 brew install jenv 설치된 jenv 를 등록하기 위해 ~/.bashrc 또는 ~/.bash_profile 혹은 ~/.zshrc에 아래 내용을 추가한다.export PATH="$HOME/.jenv/bin:$PATH"eval "$(jenv init -)" 아래와 같이 직접 명령어를 수행해서 추가해도 된다.$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc$ echo 'eval "$(jenv init -)"' >> ~/.zshrc아래 명령어들도 차례로 수행한다. Enable the export plugin$ eval "$(jenv init -)"$ jenv e.. 2025. 4. 29.
Resilience4j 기본 활용 시스템이 장애가 발생하는 상황에서도 탈력적으로 시스템을 버티게 만들어주는 라이브러리 [주요기능]1. Circuit Breaker : controller에서 이슈 시 일정 시간동안 호출 막기, 일정시간 경과 후 재시도, 괜찮으면 정상처리 2. Retry : 실패한 요청을 자동으로 재시도 3. Rate Limit : 초당 호출 수 제한(과도한 트래픽으로 부터 시스템 방어) 4. Bulkhead : 어떤 서비스가 과도하게 자원 차지 시 다른 서비스의 영향을 없앰(쓰레드 풀 격리) 5. TimeLimiter : 특정 작업이 오래 걸리 시 강제종료 기타- Reactive type 지원(mono, flux), WebFlux 환경에서도 구현 가능 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 검증만을 비지니스 레이어 or 도메인엔티티 레벨에서 수행 하게 되면은 단일책임원칙을 준수하면서 관련된 비지니스 로직을 줄이고, 재사용성을 향상시킬 수 있다. 왜 그렇게 하지 않는걸까? 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.
728x90