전체 글

데이터 중심 애플리케이션 7장(트랜잭션)을 읽다가, 하나의 트랜잭션에서 insert 쿼리후 commit 하지 않고 select로 insert한 결과를 가져올 수 있을까? 하는 궁금증을 가졌다. spring-jpa 에서는 영속성 컨택스트라는 개념이 있기 때문에 가능 할 것 같았지만, DBMS 에서도 가능 할지는 의문이였다. 결론부터 말하면 가져올 수 있다. DB에는 스토리지 엔진이라는 데이터베이스 엔진이 있다. mysql의 innoDB가 스토리지 엔진이다. 이 스토리지 엔진이 트랜잭션을 담당하고 있는데, 버퍼 풀, 로그 버퍼, 리두(redo) 로그, 어댑티브 해쉬 인덱스, 이중 쓰기 버퍼 등의 기능을 제공한다. Log Buffer그중 로그 버퍼의 역할은 트랜잭션의 쓰기 내용을 담고 있다가 commit이 되..
ACID는 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)를 의미한다.이 4가지는 트랜젝션에서 안정성을 보장하는 4가지 원칙이다.오늘은 이 원칙들에 대해서 Applicaiton과 DB 관점에서 책임의 분리에 대해서 학습해 보았다.  원자성(Atomicity) 원자성은 모든 쓰기 작업들이 하나의 트랜젝션에 묶여 모두 동작하거나, 모두 동작하지 않는 것을 의미한다. 트랜잭션에 문제가 생겨 실행이 되지 않는 것을 abort라고 하고, 트랜잭션이 완료되면 commit이라고 한다. abort가 된다면 트랜잭션이 일어나기 전 환경으로 되돌아 가고 이를 rollback이라 한다. abort는 취지는 기본적으로 원 상태로 되 돌아가는 기능보다는, 트..
슈퍼-서브 타입을 사용하려면 슈퍼 테이블과 여러개의 서브 테이블이 생긴다  Super슈퍼 클래에는 @Inheritance 와 @DiscriminatorColumn이 있다.@Inheritance(strategy = InheritanceType.SINGLE_TABLE)@DiscriminatorColumn(name = "DType")@Inheritance@Inheritance에는 상속 전략을 정할 수 있다. strategy = InheritanceType.SINGLE_TABLE싱글 테이블 전략으로 서브 테이블들을 클래스로 나누어 구현하지만 실제 DB에서는 서브 클래스 들의 컬럼들이 모두 null이 입력 가능한 형태로 합쳐저 하나의 테이블로 만들어 진다. 이 경우에는 서브 테이블 들이 모두 합쳐지므로, 서브 클..
기능A라는 branch에서 작업을 하다가 B 라는 branch로 이동을 하게 되면 A에서 한 작업이 모두 B branch로 옮겨진다. A에서의 작업을 유지하면서 B branch로 이동해 다른 작업을 하고 싶다면 stash를 사용하면 된다.// 원하지 않는 상황git branch-----------------*A Bgit status-----------------modified: /file1.txtgit checkout Bgit status-----------------modified: /file1.txt  git stash [save]git branch-----------------*A Bgit status-----------------modified: /file1.txtgit stash [save]--..
IAM  EC2- on-demand : 사용한 만틈 비용 지불, 시간 단위로 가격이 고정- reserved : 한정된 용량을 구매, 비용이 저렴함- spot : 입찰 가격, 할인율이 가장크다, 인스턴스가 불시에 종료되거나 할 수 있다. EBS(Elastic Block Store)EC2 인스턴스에 저장공간 생성EBS 볼륨 위에 File System이 생성특정 Availability Zone에 생성Availability Zone(AZ)각 AWS Region에는 2개 이상의 AZ로 구성되어 있다. 이 AZ들은 서로 물리적으로 다른 위치에 존재하여 장애에 대비할 수 있고, 서비스를 분산시켜 놓음으로서 가용성을 높였다. EBS 볼륨 타입SSDGeneral Purpose SSD(gp2, gp3): 최대 gp2: 1..
일반적으로는 인스턴스를 만들기 위해 new를 이용하지만 정적 팩토리 메소드는 return에 new한 객체를 반환해주는 형태이다public class MacBook { String color; String cpu; String ram; private MacBook(String color, String cpu, string ram) { this.color = color; this.cpu = cpu; this.ram = ram; } public static MacBook of(String color, String cpu, string ram) { return Constructor(color, cpu, ram); ..
spring을 사용할 때layard 아키텍처를 이용해서 Controller - service - repository 구조로 구성했는데 이렇게 되면 service에 비즈니스 로직이 들어가게 된다. 그러면 테스트 코드를 만들고 실행할떄 테스트 DB도 연결되고 스프링도 실해되어야 해서 복잡해 지고 테스트하기 힘들어 진다. 이런 방식을 transaction script 라고 부른다 이것을 해결하기 위해 Domain service라는 계층을 만든다 Controller - serivce - domain - repositorydomain에서 비즈니스 로직이 메소드로 구성되고 service에서 이 domain을 가져다 쓰면 된다.
Data Type Strings 문자열, 숫자, serialized object(JSON string)등 저장 SET name redis → name = "redis" MSET name pencil price 100 → name = "pencil", price = "100" MGET name price → 1) "pencil" 2) "100" redis는 숫자도 문자형으로 저장한다 대신 문자형 숫자는 사칙연산이 가능하다. INCR price → price + 1 INCRBY price 100 → price + 100 redis에서는 변수명에 :을 사용하여 의미별로 구분을 해주면 좋다 SET professor:database:ko mr.kim Strings Commands Lists String을 Doub..
· Library
처음 이 책의 제목을 봤을때는 굉장한 호기심으로 목차를 펼쳐 보았다. 아니나 다를까 제목보다 훨씬 더 흥미를 이끄는 소제목들이 목차에 나열되어 있는것이 아닌가. 이 책은 소제목을 읽는 것만으로도 재미를 주는 책이다. 배움의 의미 나는 무엇을 알고 무엇을 모르는가 철학을 공부한다는 것은 기본적으로 '내가 무엇을 모르는지' 그리고 '무엇을 아는지'를 공부하는 것으로부터 시작하다. 철학 뿐만 아니라 모든 배움이 그러한것 같다. "내가 모르는 것은 무엇인가. 그렇다면 아는 것은 무엇인가. 내가 안다는 것은 진정으로 알고 있는것인가? 그렇다면 안다는 것은 무엇인가" 안다는 것에대한 생각은 이전 글인 여행의 이유에서 고민해 보았다. 빵 한개로 배를 채우고, 책 열 권으로 정신을 채워라 채워지지 않는 욕구로 말미암아..
간식타임
간식타임