본문 바로가기

전체 글

(54)
[Real MySQL] 트랜잭션과 잠금 MyISAM 스토리지 엔진은 트랜잭션을 지원하지 않는다. InnoDB는 스토리지 엔진 내부에서 레코드 기반의 잠금 방식이 있다. 5.2 MySQL 엔진의 잠금 1. 스토리지 엔진 레벨 스토리지 엔진 간 상호 영향을 미치지 않는다. 2. MySQL 엔진 레벨 MySQL 서버에서 스토리지 엔진을 제외한 나머지 부분 MySQL 엔진 레벨의 잠금은 모든 스토리지 엔진에 영향을 미친다. 테이블 락: 테이블 데이터 동기화를 위한 락 메타데이터락: 테이블 구조를 잠근다. 네임드 락: 사용자의 필요에 맞게 사용할 수 있는 락 5.2.1 글로벌 락 글로벌락 SELECT를 제외한 DDL, DML 문장을 실행할 경우 글로벌 락이 해제될 때까지 대기상태로 남는다. MySQL 서버 전체에 영향을 미친다. 작업 대상 테이블이나 ..
프록시 패턴 프록시 프록시(Proxy)는 기본적으로 어떤 다른 객체에 대한 인터페이스 역할을 하는 객체로, 원래 객체에 접근하는 요청을 중간에서 가로채 처리하거나 전달하는 역할을 한다. 프록시 패턴은 객체 지향 디자인 패턴 중 하나로, 중간에서 다양한 처리를 수행하거나 컨트롤이 필요한 상황에서 유용하게 사용된다. 프록시를 사용하면 원본 객체의 로직을 변경하지 않고도 해당 객체의 동작을 확장하거나 수정할 수 있어 유연성을 향상시킬 수 있다. 타입 Static Proxy 컴파일 타임에 프록시 클래스가 정의된다. 원본 객체와 동일한 인터페이스를 구현하는 별도의 프록시 클래스를 작성해야 한다. Dynamic Proxy 런타임에 프록시 객체가 동적으로 생성된다. Java에서는 Proxy 클래스와 InvocationHandle..
SSL SSL L7의 암호화 프로토콜 암호화 해시화 디지털 인증서 를 사용한다. 암호화 공통키 암호화 방식과 공개키 암호화 방식을 혼합해서 사용한다. 서버는 공개키와 비밀키를 만든다. 서버는 공개키를 배포하고 비밀키는 보관한다. 브라우저는 공통키의 재료를 공개키로 암호화해서 서버로 보낸다. 서버는 공통키의 재료를 복호화한다. 서버와 브라우저는 공통키의 재료로부터 공통키를 생성한다. 이후 브라우저는 데이터를 공통키로 암호화해서 서버로 전송한다. 해시화 송신자는 데이터와 데이터의 해시값을 전송한다. 수신자는 데이터로부터 해시값을 계산하고, 송신자가 보낸 해시값과 자신이 만든 해시값을 비교한다. 다르다면 변조되었다고 판단한다. SSL에서는 단방향 해시 함수가 아닌 MAC(Message Authentiction Cod..
Spring Boot Test Can’t Start Redis Server 오류 메세지 Caused by: java.lang.RuntimeException: Can't start redis server. Check logs for details. at redis.embedded.AbstractRedisInstance.awaitRedisServerReady(AbstractRedisInstance.java:62) at redis.embedded.AbstractRedisInstance.start(AbstractRedisInstance.java:39) at redis.embedded.RedisServer.start(RedisServer.java:9) at org.hoongoin.interviewbank.config.TestRedisConfig.startRedis(TestRedi..
Isolation Levels Isolation Levels 한 트랜잭션에서 다른 트랜잭션이 동시에 수행하는 작업을 어느 정도로 보게할 것인지를 결정한다. DIRTY READ NON-REPEATABLE READ PAHNTOM READ READ UNCOMMITTED o o o READ COMITTED x o o REPEATABLE READ x x o (InnoDB는 x) SERIALIZABLE READ x x x READ UNCOMMITTED 한 트랜잭션에서 다른 트랜잭션의 아직 커밋되지 않은 변경사항을 볼 수 있다. Dirty Read를 허용한다. READ COMMITTED 한 트랜잭션에서 다른 트랜잭션에서의 커밋된 변경사항을 볼 수 있다. Non-repeatable Read와 Phantom Read를 허용한다. 같은 트랜잭션 내에서..
Segment와 Paging Segmentation address space의 code, heap, stack 영역을 각각의 segment로 분리하여 메모리에 보관한다. segment의 size는 viriable 하다. 문제점 external fragment가 생긴다. sparse address space를 해결하지 못한다. External Fragment의 solution compaction memory management algorithm first fit, next fit, best fit, worst fit, … segregated list buddy allocation Paging address space를 fixed-size로 분리하여 메모리에 보관한다. → external fragment를 해결한다. free memor..
4 way handshake 4-Way Handshake TCP 연결 종료 과정 클라이언트, 서버 어느쪽에서든 먼저 시작할 수 있다. FIN 패킷: 클라이언트는 서버에게 데이터 전송을 완료했음을 알리는 FIN(Finish) 패킷을 보낸다. "나는 더 이상 보낼 데이터가 없으므로 연결을 종료하려고 합니다"라는 의미이다. ACK 패킷: 서버는 클라이언트에게서 FIN 패킷을 받으면 ACK(Acknowledge) 패킷을 클라이언트에게 보내, FIN 패킷을 받았음을 확인한다. 서버는 여전히 데이터를 클라이언트에게 보낼 수 있다. FIN 패킷: 서버가 모든 데이터를 클라이언트에게 전송한 후에는, 자신의 FIN 패킷을 클라이언트에게 보낸다. ACK 패킷: 클라이언트는 서버에게서 받은 FIN 패킷에 대해 ACK 패킷을 보내, 서버의 FIN 패킷을..
DNS Lookup DNS Lookup 호스트 네임을 IP주소로 변환하는 과정 1.Local Cache Check 브라우저, OS에 캐시가 있다. 2.Recursive Query 로컬 캐시에 IP주소가 없다면, 사용자의 컴퓨터는 설정된 DNS 서버 (주로 ISP)에게 쿼리를 보낸다. DNS 서버는 쿼리를 받고 캐시에서 도메인 IP 주소를 찾는다. 3.Root DNS Server 2의 DNS 서버에 IP주소가 없다면, Root DNS 서버에 쿼리를 보낸다. Root DNS 서버는 전 세계에 13개가 있으며, 이 서버들은 TLD(Top-Level Domain, .com, .net, .org) 서버의 위치를 알고 있다. 4.TLD DNS Server Root DNS 서버는 쿼리를 받아서 TLD 서버의 주소를 DNS 서버에 반환한..