본문 바로가기

전체 글

(84)
transaction isolation level transaction isolation level에는 read uncommitted, read committed, non-repeatable read, serializable이 있습니다. read uncommitted는 트랜잭션이 두개가 동시에 실행중이라고 가정했을 때, 한 곳에서 수정한 entitiy를 커밋하기도 전에 다른 트랜잭션에서 값을 읽어올 때, 수정된 값을 받아올 수 있습니다. 이런 문제를 dirty read라고 합니다. read committed는 commit 된 entitiy만 읽어오므로, dirty read의 문제는 해결하였습니다. 하지만, 트랜잭션을 동시에 실행중이고 A트랜잭션에서 select, B트랜잭션에서 update, A트랜잭션에서 select를 했다고 했을때, 동일한 A 트랜잭션..
스프링에서 다른 서버와 비동기로 통신하는 방법 기존에 다른 서버와 통신하는 방법은, 만약 rest api였다면 restTemplate을 사용하면 됐습니다. 비동기적으로 통신하려면 asyncRestTemplate을 사용하면 됩니다. 그러나, 기본적으로 blocking io를 사용하고 있기 때문에, non-blocking io를 사용해야 진정으로 성능이 나올 수 있습니다. 그렇게 asyncRestTemplate을 사용하면, listenableFuture가 결과로 나오게 되는데, 그것에 callback으로 어떤 처리를 할지 작성할 수 있습니다. 아니면 그것을 completable future로 감싸서 사용을 하면 됩니다. asyncRestTemplate 뿐만 아니라, completableFuture를 사용하는 경우는 모두 비동기적으로 통신할 수 있습니다...
layered architecture 레이어드 아키텍처는 애플리케이션 개발에 있어서 프레젠테이션 레이어, 서비스 레이어, 레포지토리 레이어, 그리고 DB레이어로 나누어 개발하는 것입니다. 이런 것에 장점은, 가독성과 유지보수에 좋고, OCP 원칙을 지키기 쉽게 됩니다. 예를 들어 orcale에서 mysql로 DB를 변경한다고 하면, datasource를 oracle로 변경하고, 레포지토리를 oracle용으로 만들어서 repository bean을 교체해주면 됩니다. 기존 코드의 변경없이 쉽게 확장할 수 있습니다. 그리고 프레젠테이션 레이어는 자바의 캡슐화 역할을 해줍니다. 그래서 api역할을 해줍니다. 오직 어떤 요청이 들어왔을 때, 어떤 응답을 돌려준다는 정의만 해놓으면 됩니다. 내부 구현, implementation은 서비스로직에서 담당..