computer science

코드 품질을 결정하는 무수히 많은 것들중 유지 보수성, 확장성은 중요한 요소 입니다. 순환 참조가 발생한다면 이 2가지의 요소가 매우 떨어지는 효과가 나타나게 됩니다. [그림 1]은 단방향 참조입니다. 이 경우에는1. D에 변화가 생겼을 때는 E에만 영향을 미쳐 E만 수정하면 됩니다.2. C에 변화가 생겼을 때는 전체에 영향을 미칩니다.이렇듯 단방향 참조는 최소한의 영향을 미치도록 합니다. 다음으로 양방향 참조(순환 참조)를 보겠습니다.  [그림 2]는 양방향 참조를 하고 있습니다.위에서 [그림 1]의 경우에 D에 변화가 생겼다면 E만 수정하면 됐지만, 양방향 참조가 발생한 [그림 2]의 경우에는 D에 변화가 생겼을때 E와 추가적으로 C에 영향이 가고 이것이 A,B의 수정으로 이어저 A, B, C, D,..
Pub/Sub Redis에는 Pub/Sub이라는 기능이 있습니다. 이는 publisher와 subscriber의 약자로서 publisher와 subscriber가 서로 직접 통신을 주고 받지 않아 publisher와 subscriber간의 결합도를 낮출 수 있습니다.특정 Topic에 publisher는 정보를 publishing하고 subscriber는 특정 Topic을 subscribe하면 그 Topic에 정보가 publishing되면 그 정보를 받아오게 됩니다.   Command SubscribeSUBSCRIBE ch:채널명 ch:채널명 ... PublishPUBLISH ch:채널명 메시지위 그림과 같이 publish하는 순간 구독한 곳에서는 메시지를 받을 수 있다.
Lost Update(갱신 손실)Lost Update는 Committed Read 와 보다 낮은 수준의 격리 수준에서 나타나는 현상으로 하나의 DB 값에 대해 두가지 이상의 쓰기가 발생 했을 때 마지막의 쓰기만 반영이 되어 그 전의 쓰기는 사라지는 현상이다. 그림 1-1에서 A가 조회(read)를 하고 갱신(modify-write)하기전 B도 잔고를 조회(read)하고, 그 후 A가 300을 추가(modify-write)해도 마지막에 B가 100을 추가(modify-write)하면 최종적으로 잔고는 600이 되고 중간에 A가 갱신한 800은 사라지게 된다. 이러한 현상을 lost update라고 한다. lost update를 해결 할 수 있는 방법은 여러 가지가 있다.원자적 쓰기 연산 2-2와 같은 방법..
DB에서는 하나의 테이블에 여러 트랜잭션이 걸리는 동시성 문제가 발생 할 수 있다. 동시성 문제는 운이 없을 때만 발생하기에 테스트로 발견 하기 어렵다. 따라서 동시성 문제가 큰 이슈가 되는 결제, 송금 같은 경우에는 Serializable(직렬성) 격리를 사용한다. 하지만 Serializable은 오버헤드가 크게 발생하기 때문에, 비교적 동시성 문제가 크지 않을 때는 완화된 격리 수준을 사용한다. 이때 Serializable, 완화된 격리(read commited, repeatable read, dirty read)등이 Isolation Level이다. Read Committed Read Committed 수준에서는 dirty read를 막아준다. dirty wirte를 막아준다.이렇게 2가지를 보장해..
데이터 중심 애플리케이션 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); ..
간식타임
'computer science' 카테고리의 글 목록