데이터 중심 어플리케이션 설계 - 07장 트랜잭션 읽기 격리성 동시에 실행되는 트랜잭션은 서로 격리된다는 것을 의미 고전적인 데이터베이스 용어에서는 격리성 == 직렬성의 의미를 가지기도 함 직렬성(serializable)이란 실제로 여러 트랜잭션이 동시에 실행됐더라도 트랜잭션 커밋의 결과가 트랜잭션이 순차 실행됐을때와 동일하도록 보장 직렬성(serializable) 격리는 일반적으로 성능 손해를 동반할 수 밖에 없기 때문에 거의 사용하지 않음. 실제는 보다 약한 스냅샷 격리를 구현 지속성 트랜잭션이 성공적으로 커밋되었다면 하드웨어 결함/데이터베이스가 죽더라도 트랜잭션에 기록한 데이터는 손실되지 않아야 함을 뜻함 예를 들어 쓰기 전 로그(write-ahead log) 혹은 비슷한 수단을 통하여 쓰기 저장소..
블로그 정리 MINIMAL SKIN 적용 불필요 글 비공개 처리 및 태그 삭제 KotlinInAction 제네릭스 관련 글 업로드 @RequestParam 관련 요약 정리 데이터 중심 어플리케이션 설계 - 07장 트랜잭션 읽기 트랜잭션은 어플리케이션 구현 혹은 프로그래밍 모델의 난이도를 낮추기 위한 데이터 저장소의 장치 현대적 의미에서의 트랜잭션은 과거와 많은 차이가 있다. 분산 저장소를 지원하는 데이터베이스 고가용성과 높은 성능을 위해서 트랜잭션은 확장성을 해치는 안티테제로 여기는 믿음이 생김 기존 데이터베이스 벤더에서는 "값진 데이터"와 "중요 데이터"를 필수적인 요건이라고 말하고 있음 ACID의 의미 해석 데이터베이스별로 ACID에 대한 구현은 다음 상위 개념은 동일하지만 악마는 세부사항에 숨겨져 ..
1. 휴식? 회사를 그만두었기 때문에 누릴 수 있는 가장 큰 사치는 아마 늘어지게 잘 수 있는 늦잠 그리고 자유로운 시간일 것이다. 최근 한달 가량을 그렇게 보내고자 맘을 먹었지만, 불행인지 다행인지 정말로 한번쯤은 도전해보고 싶은 회사에서 공채를 시작하여 거기에 매달려 한달 가량 아니 한 3주 가량의 시간을 전력의 삶(?)을 살다보니 시간이 어느덧 8월 가량이 되었다. 사실 저번달에는 공부도하고 공채 준비도 했으니 이번달에는 전력으로 쉬고자 하는 마음이 가장 크다. 하지만 공채 결과가 어떻게 될지는 모르겠지만, 그래도 좋은 방향으로 흐르고 있는거 같아. 어쩌면 지금의 휴식이 길어지지만은 않겠구나 하는 생각도 든다. 뭐 다시 개발 이야기로 돌아와서 보자면 과제를 준비하면서 해볼 수 있는 건 모두 했다라고..
1. DDD Start 다 읽음 간만에 끝까지 다 읽은 책이다. 책 내용이 너무 흡입력이 좋았다. 기존에 API를 개발하면서 늘 고민하던 설계적인 부분 혹은 구현 패턴에 대한 100%까지는 아니지만 어느정도의 답을 준거 같아서 나름 만족스러운 독서였다고 평하고 싶다. 마지막 부분이라 크게 기억이 남는 것인지는 몰라도 도메인 이벤트 처리하는 방법이나 CQRS에 대한 부분 그리고 락(선점, 비선점, 오프라인)에 대한 구현과 소개도 너무 좋았었다. 이제 내용을 정리해서 마크다운과 블로그에 올리는 일만 남았는데, 3장까지밖에 정리하지 못해서 할일이 많이 남은거 같아 이거도 일종의 기술부채인가 하는 생각이 들었다. 2. MySQL 5.7 MySQL 5.7 관련 신간이 출시하기도 했고, 스터디에서 해당 책을 가지고..
1. DDD Start 8장 읽기 애그리거트 트랜잭션 처리에 대한 내용으로 애그리거트 수정이 동시에 발생했을 경우, 이를 어떻게 처리 할지에 대한 내용을 담고 있다. DB 레벨에서의 선점 락과 선점 락으로 인해 발생할 수 있는 문제(데드락)을 회피하기 위한 비선점 락에 대한 전략(JPA-Hibernate의 @Version을 활용한 업데이트 전략) 그리고 오프라인 락을 통하여 락에 대한 선점을 미리 하는 방법까지 간단하게 학습할 수 있었다. 다시 읽어보면서 내용 정리를 해보고 좀 더 깊게 생각해봐야겠지만, 실제 업무에서는 대부분 DB 레벨에서의 선점 락을 사용하는 경우가 많았는데, 디비 레벨에서의 선점 락을 사용할 경우, 락을 대기하는 스레드가 발생하여 실제 동시성에 크게 영향을 주면서 개발을 할 수 밖에..
DDD Start 3,4장 학습 1~2장을 통하여 DDD와 관련된 주요 개념과 키워드들을 살펴보았고, 3장부터는 도메인의 영역을 큰 그림을 통하여 세부 그림을 이해하는 법부터 시작하여 애그리거트를 구성하는 방법과 주의해야 할 부분이 대하여 조금 더 깊게 볼 수 있어서 좋았다. 4장에서는 실제 JPA를 이용하여 엔티티 매핑과 벨류 매핑을 직접 실습 해볼 수 있었는데, 자바로 되어 있는 매핑 코드를 코틀린 베이스로 옮겨서 작성해야 하니 생각보다 걸리는 지점이 있어서 조금 시간을 소모 할수 밖에 없었다. JPA를 공부하고 바로 이 책을 봤었더라면 좀 더 업무 코드에서도 의미 있는 엔티티 구성과 로직을 만들어 낼 수 있었겠다는 아쉬움도 들긴 하지만, 지금이라도 모자란 부분이 무엇인지 확인해볼 수 있는 좋은 기회..
1. H2 데이터베이스 사용 중 소소한 삽질 신규 서비스 API 개발에 H2 데이터베이스를 적극적으로 사용하고 있는데, 컬럼명에 예약어를 사용하여 생각보다 오랜 시간 삽질을 하게 되었다. 실제 에러 스택트레이스에 예악어라는 메세지가 보이질 않아서 더 해맨 부분도 있었던거 같다. Keywords / Reserved Words 2. DDD 1장 ~ 2장 학습 DDD Start 책을 읽으면서 내용을 계속 정리하고 있다. 책이 참 좋다고 생각이 들었는데, 실제 구현 코드도 같이 예제 형식으로 보여주고 있어서 실제 JPA-Hibernate를 주로 사용하는 나로서는 참 공감이 가면서도 부족한 부분이 무엇인지 정확하게 알게 해주는거 같아 좋았다. 엔티티 vs 벨류 무분별한 세터는 무조건 지양 의미 있는 도메인 용어 ..
1. @Transactional 회사 업무 중, 테스트 환경에서 적절하게 @Transactional을 부여하지 못해서 실수한 부분이 있어서 메모하려고 한다. Repository를 의존하고 있는 서비스 레이어에서 명시적으로 @Transactional을 서비스 매서드에 마킹 해놓지 않은 상태에서 해당 서비스 메서드의 호출이 종료된 시점에 @OneToMany(FetchType.Lazy)로 마킹된 하위 모델 엔티티가 조회를 시도하게 되면서 생기는 문제였다. 기본적으로 Data JPA에서의 Repository는 CRUD 오퍼레이션에 대해 트랜잭션을 가져가게 되는데, 문제가 되는 상황은 엔티티에서 FetchType.Lazy를 사용했을 때, 즉 지연 로딩을 사용할 때가 문제가 되는 듯 했다. 만약 레파지토리에서의 트..
- Total
- Today
- Yesterday
- ecma
- maven
- implicit prototype chain
- pm2
- node.js
- Sublime Text 3
- Spring MVC
- Squelize.js
- Sublime Text 2
- RestTemplate
- Kotlin
- Express.js
- EJS
- tomcat
- SideBarEnhancements
- jade
- HttpClient
- package.js
- Prototype
- Spring
- http method
- Handlebars
- WebFlux
- HTTP
- Spring Boot
- Package Control
- springboot
- Til
- cluster
- 스프링
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |