Isolation level 소프트웨어를 개발하는 경우 데이터베이스 트랜잭션 내에서 복잡한 방식으로 데이터를 운영하는 코드에서 비즈니스 논리 오류가 발생하지 않도록 트랜잭션이 서로 어떻게 영향을 미치는지 알아야 합니다. PostgreSQL에서 트랜잭션을 설정하는 방법은 총 4가지 1. READ UNCOMMITTED (낮은 격리수준) 설정에는 정의되어 있지만, 지원하지 않습니다. (READ COMMITTED와 동일) 2. READ COMMITTED (기본값) 커밋된 데이터만 READ 할 수 있으며, DIRTY READ가 불가능. (DIRTY READ : 다른 트랜잭션에서 커밋하지 않는 데이터를 읽을 수 있는 것) 3. REPEATABLE READ 조회 시 항상 동일한 데이터 응답을 보장. 4. SERIAL..
이슈 상황 진행하고 있는 프로젝트에 '끝말잇기' 기능을 제공중이다. 예외처리가 적용되지 않고 두개의 단어가 동시에 삽입되었다! 문제 해결 과정 우선 Chatgpt를 이용해서 해당 사항에 대해 물어보았다. 1. 격리수준 설정을 고려 -> 탈락 우선 PostgreSQL에서는 4가지의 Transaction 격리 수준을 설정할 수 있다. 끝말잇기에 적용하는 것을 생각해봤을때, 하나의 transaction에서 데이터를 읽을때, 다른 transaction에서 커밋되지 않은 데이터도 읽어야함. Postgresql은 Read Uncommited를 지원하지 않는다고 한다! 결론적으로 DirtyRead가 불가능하다. 2. 낙관적 락과 비관적 락 고려하기 (오 괜찮다!) 낙관적락과 비관적락을 사용하는 기준은 "동시에 수정을..
API Gateway Service 인증 및 권한 부여 서비스 검색 통합 응답 캐싱 정책, 회로 차단기 및 Qos 속도 제한 부하 분산 로깅, 추적, 상관관계 헤더, 쿼리 문자열 및 청구 변환 IP 허용 목록에 추가 SpringCloud에서의 MSA간 통신 RestTemplate RestTemplate restTemplate = new RestTemplate(); restTemplate.getForObject("http://localhost:8080/", User.class, 200); Feign Client FeignClient라는 마이크로서비스 이름가지고 호출이 가능함. @FeignClient("stores") public interface StoreClient { @RequestMapping(met..
Spring Cloud Netflix Eureka 여러 서버를 띄우기 위해 로컬 환경에서 각자 다른 포트 번호로 실행함 여러 개의 서버를 Service Discovery에 등록 key value 값으로 어떤 서버가 어디에 위치해 있는지 저장해둔다 클라이언트가 요청을 보내면 요청 정보에 따라서 필요한 서비스의 위치를 알려주는 역할 Gradle로 프로젝트 필드 ./gradlew build && java -jar build/libs/user-service-0.0.1-SNAPSHOT.jar User-Service : Load Balancer 인스턴스마다 포트번호를 지정해주기에 한계가 있으므로 랜덤 포트를 사용한다. 랜덤포트로 여러 인스턴스를 띄우면 포트 번호는 각각 여러개가 할당됨 Eureka Applicati..