computer science

데이터 중심 애플리케이션 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는 취지는 기본적으로 원 상태로 되 돌아가는 기능보다는, 트..
기능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..
백엔드 서버에서 DB 서버로 연결을 보내는 방식은 크게 매번 DB서버에 연결하여 요청을 보내고 연결을 종료한다. connection pool을 이용한다. 이렇게 나누어진다. 먼저 첫번째를 살펴보면 Connection 백엔드 서버에서 쿼리를 전송하기 위해서 DB서버에 연결을 해야하는데, 이때 TCP/IP 연결(3 way handshake)를 해준다. 이렇게 백엔드 서버와 DB서버가 연결 되었다면 백엔드 서버에서 쿼리를 전송하고 DB서버에서 응답하고, 연결을 종료한다. 이것이 기본적인 백엔드 서버와 DB서버 간의 통신이다. 하지만 이 방식의 경우에는 여러 단점이 존재한다. 매번 쿼리를 전송할때마다 connection을 다시 맺어야 함으로 시간적인 손실이 발생한다. 매번 connection을 realse 해주..
캐시와 캐싱 캐시는 데이터를 임시로 복사해두는 임의의 장소이며 , 캐싱은 주어진 리소소의 복사본을 저장하고 있다가 요청 시에 제공하는 기술이다 캐시는 크게 사설(private) 혹은 공유(shared) 캐시로 나누어 진다. 공유 캐시는 웹 브라우저와 서버 사이에서 동작하는 캐시이며, 한명 이상의 사용자가 재사용 할 수 있도록 응답을 저장하는 캐시이다.(중간 서버에 저장 가능) 사설 캐시는 웹 브라우저에 저장되는 캐시이며 한 사용자가 전용으로 사용한다. HTTP 캐시들은 일반적으로 GET Method에만 응답만을 캐싱한다. Cache-Control HTTP Header에는 Cach-Control이 있다. Cache-Control: no-store 캐시는 응답과 요청에 어떤 것도 저장 해서는 안된다. Cac..
간식타임
'computer science' 카테고리의 글 목록