반응형 전체 글242 API 재호출 라이브러리 - Spring Retry 한번의 API 호출실패로 비지니스 로직을 모두 실패처리하는 것은 몇번 다시 호출하는 것보다 리소스 낭비가 클 수 있다. 따라서 보통 최대 3번의 재호출을 하는 방법을 사용한다. 단, Read Timeout 상황은 특정 시간동안 네트워크 이슈가 지속되는 경우가 많기 때문에 재시도를 하더라도 모두 실패할 수 있다. 재호출 고려해야할점 재시도를 몇 번 실핼할 것인가? 재시도 하기 전 지연시간을 얼마나 줄 것인가? 재시도를 모두 실패했을 경우 어떻게 처리할 것인가? -> 순수 코드로 구현할 수 있지만, 비지니스 로직에 집중하고 유지보수가 쉽도록 스프링 라이브러리를 사용하자! Spring Retry 라이브러리 구현 방법 1) 어노테이션 2) RetryTemplate @EnableRetry : Spring Retr.. 2023. 1. 22. Spring @Transactional 이란? 스프링 트랜잭션 처리 @Transactional 스프링 AOP (관점 지향 프로그래밍) 기반 기능 1 @Transactional이 포함된 메소드가 호출되면 2 프록시 객체를 생성 3 트랜잭션 생성 및 커밋 또는 롤백 후 트랜잭션 닫는 작업을 프록시 객체에게 위임한다. 스프링 AOP 기반으로 하는 기능들 (@Transactional, @Cacheable, @Async) 사용시 self invocation 문제로 인하여 장애가 발생할 수 있다 self invocation 해결 방법 방법 1. 트랜잭션 위치를 외부에서 호출하는 bar() 으로 이동 방법 2. 객체의 책임을 최대한 분리하여 외부 호출 하도록 리팩토링 Spring Transactional 주의사항 @Transactional(readOnly = t.. 2023. 1. 22. JPA Auditing JPA Auditing 테이블에 들어가야하는 필수적인 Column을 쉽게 사용할 수 있도록 제공하는 기능 JPA Auditing 사용 이유 엔티티마다 공통적으로 필요한 값 ex) 등록일, 수정일 을 매번 구현해야한다면 실수가 생기기 쉽다. => 이를 자동화할 수 있다. (aduit: 감시하다) @MappedSuperclass : 엔티티의 공통 매핑정보 @EntityListeners : 해당 클래스에 auditing 기능을 포함 @CreatedDate : Entity가 생성되어 저장될 때 시간이 자동 저장 @LastModifiedDate : Entity값을 변경할 때 시간이 Update @Column(updatable=false) : 실수로 값을 바꿔도 업데이트 되지 않는다. @PrePersist : IN.. 2023. 1. 21. troubleshooting - Failed to load ApplicationContext 테스트케이스 작성 후 실행 시 에러가 발생하는데 알 수 없었다. java.lang.IllegalStateException: Failed to load ApplicationContext 환경변수로 사용하고 있는 부분이 있는데 실행/디버그 수정에 환경변수를 선언해줘야한다! 2023. 1. 19. Spring Data JPA 주의사항 - 영속성 컨텍스트 주의할점 영속성 컨텍스트 및 Dirty Checking 개념을 이해하지 못하고 사용하면 데이터 손실 및 성능 이슈가 있을 수 있다. JPA의 모든 데이터 편경은 트랜잭션 안에서 실행된다. @Transactional 즉, 트랜잭션 밖에서 데이터 변경은 반영되지 않는다. 영속성 컨텍스트 Persistence Context 애플리케이션과 데이터베이스 사이에서 엔티티와 레코드의 괴리를 해소하는 기능과 객체를 보관하는 기능을 수행한다.. entity를 저장하고 관리하는 저장소 (가상의 데이터베이스 역할) 이미 영속상태인 경우 merge를 통해 덮어쓴다. 영속 객체 Persistence Object 엔티티 객체가 영속성 컨텍스트에 들어와 JPA의 관리 대상이 되는 시점부터의 객체 영속성 컨텍스트는 세션 단위의 생명.. 2023. 1. 19. Spring Data JPA, DAO, DTO, Entity, Repository 란? Spring Data JPA 자바 어플리케이션에서 관계형 데이터베이스 사용하는 방식을 정의한 인터페이스 Spring에서 JPA를 더 쉽고 편하게 사용할 수 있도록 도와준다. JPA를 한단계 추상화시킨 Repository 인터페이스 제공 build.gradle 의존성 추가, 인터페이스를 정의하면 JPA의 CRUD 사용이 가능하다. implementation 'org.springframework.boot:spring-boot-starter-data-jpa' public interface PharmacyRepository extends JpaRepository { } 스프링부트 어플리케이션 구조 DAO (Data Access Object) DB의 data에 접근하기 위한 객체 직접 DB에 접근하여 데이터 CR.. 2023. 1. 16. EFK 로그 수집 아키텍처 Elasricsearch + Fluentd + Opendashboard ELKElasricsearch + Logstash + KibanaElastic stack으로 구성된 ELK (Loagsash) 라는 용어로 더 잘 불리운다.EFK (EFO) 로그 수집 아키텍처Elasricsearch + Fluentd + Kibana (Opendashboard)Elastic stack의 유료화 때문에 Opensearch + Opendashboard를 사용한다. Fluntd로그의 수집, 파싱, 전송 역할어플리케이션의 파일을 읽어야하므로 어플리케이션과 같은 호스트에 뜬다.CRuby로 만들어져있다. (Fluenbit이라는 C기반 경량화 버전도 있으며, forwarder로서 사용하기에 적합)장점적은 리소스를 사용하면서 로그를 파싱하고 전송한다.규칙을 태그방식으로 정하기때문에 사용성이 직관적이다... 2023. 1. 12. 로그란? & 로그 수집 아키텍처 Log 유의미한 내용을 남기는 기록 내용 로그를 남긴 시간 로그 레벨 TRACE : 어플리케이션에서 어떤 상황이 일어나는지 상세한 내용을 보고 싶을 때 ex) 라이브러리의 내부 동작 DEBUG INFO WARN ERROR FATAL : 시스템 이용이 불가능한경우 ex) Memory Crash, Disk Full 로그 내용 로그가 발생한 위치 로그가 WARN, ERROR라면 Line 까지 남기면 좋다. 로그가 파일에 남아있다면 찾아보면될텐데 왜 수집을 해야할까? 1. 시스템에 장애가 나면 로그 파일에 다시 접근하지 못할 수 있다. 2. 사용하는 프로그램이 많아지거나 인스턴스의 수가 많다면 일일히 들어가서 확인하기 어렵다 3. 필터링, 그룹, 검색을 이용하여 더 신뢰있는 시스템을 만들 수 있다. 로그 수집 .. 2023. 1. 11. ElasticSearch Cluster와 Node Elasticsearch에서의 노드: Elasticsearch 서비스가 설치되어있는 단위Elasticsearch에서의 클러스터: 노드들을 연결해 놓은 것, 하나 이상의 노드들로 구성하여 서비스로 제공하는 것Master node 1 + Data Node (>= 2) 시스템 구조는 크게 Cluster, Node, Index, Shard 로 구성된다. Elasticsearch node 종류Master-eligible node / Master node마스터 후보 노드 -> 마스터 노드가 죽을 경우를 대비해 후보들을 여러개 지정하게된다.index 생성 또는 삭제, shard 할당 등 전체적으로 관리하는 역할마스터 노드에는 데이터가 저장되지 않는다.가장 성능 좋고 네트워크 속도가 빠르며 지연이 없는 노드를 선정해서.. 2023. 1. 8. 이전 1 ··· 10 11 12 13 14 15 16 ··· 27 다음 728x90 반응형