공부 18

[DB] Undo Log & Redo Log

Undo Log실패한 트랜잭션에 대해 데이터 변경 사항 롤백트랜잭션 원자성(Atomicity)을 지원한다.데이터베이스 일관성을 보장Undo Log 동작 방식트랜잭션 시작 시 이전 값(Old Value)을 로그에 기록트랜잭션 도중 장애 발생 시 Undo Log를 사용하여 이전 값으로 복구트랜잭션이 커밋되면 Undo Log는 삭제되거나 무시된다.Redo Log커밋된 트랜잭션의 변경 사항을 장애 복구 시 재실행한다.데이터베이스 지속성(Durability)을 보장한다.Redo Log 동작 방식트랜잭션 변경 사항이 로그에 기록된다.시스템 장애가 발생하면 Redo Log에 저장된 변경 사항을 다시 적용한다.트랜잭션이 커밋된 경우에만 Redo Log가 사용된다.트랜잭션 흐름에서의 역할트랜잭션 시작변경 사항을 Undo..

공부/DB 2025.02.28

[DB] Checkpoint 아키텍처

Checkpoint 아키텍처데이터베이스 시스템에서 장애 복구와 데이터 무결성을 보장하기 위해 사용되는 기술이다.데이터베이스가 특정 시점의 상태를 저장하고, 장애 발생 시 해당 시점부터 복구를 시작할 수 있도록 한다.디스크에 저장된 영구 데이터와 메모리에 캐싱된 임시 데이터를 동기화하는 과정Write-Ahead Logging(WAL) 메커니즘과 함께 사용된다.Checkpoint 동작 방식로그 작성(WAL)트랜잭션 변경 사항이 먼저 로그 파일에 기록Checkpoint 생성특정 시점에 메모리의 변경 사항을 디스크에 반영이 때, Checkpoint 레코드가 로그에 추가로그 제거Checkpoint 이전에 완료된 트랜잭션 로그는 삭제하거나 재사용장애 복구장애 발생 시 Checkpoint부터 로그 파일을 재처리하여 ..

공부/DB 2025.02.28

[HTML] <a> 태그

태그란?하이퍼링크를 생성하는 인라인 요소클릭하면 href 속성에 지정한 주소로 이동한다.혹은 다른 페이지, 파일, 이메일, 전화번호 등으로 이동할 수 있다.download 속성을 추가하면 파일 다운로드 설정도 가능하다.주소를 지정하여 이동이메일 전송새 창에서 보기기본적으로 target="_self" 라는 현재의 탭에서 보기라는 속성이 생략되어 있다. target="_blank"를 사용하면 새 창에서 해당 링크를 열 수 있다.보안상 rel="noopener noreferrer"를 추가하는 것이 권장된다.no opener(노오프너) - 링크를 건 페이지를 참조할 수 없게 되며, 링크된 페이지와 링크를 건 페이지가 별개의 프로세스 취급된다.no referrer(노리퍼러) - 다른 페이지로 이동 시, 링크를 건..

공부/HTML 2025.02.06

[HTML] <p> 태그

태그란?문단을 나타내는 블록 요소텍스트를 단락으로 나눌 때 사용되며, 위아래 여백이 포함된다.자동으로 줄 바꿈이 적용된다.@("이것은 태그입니다.")자동으로 줄 바꿈 적용class 적용CSS를 사용하여 스타일을 적용할 수 있다.스타일 적용 태그 안에서의 포함 요소텍스트와 , , 등과 같은 인라인 요소를 포함할 수 있다., , 등과 같은 블록 요소는 포함할 수 없다. 태그 내부에서 줄 바꿈이 필요하다면 태그를 사용할 수 있다.인라인 요소를 포함할 수 있습니다.만약, 태그 내부에 블록 요소를 넣는다면 구문 분석 단계에서 자동으로 태그를 닫는다.이 태그는이와 같은블록 요소는자동으로 닫힘 처리 됩니다. 태그 관련 글 바로가기 모음[HTML] 태그[HTML] 태그[HTML] 태그

공부/HTML 2025.02.04

[HTML] <div> 태그

태그란?콘텐츠를 그룹화하는 블록 요소다른 요소들을 감싸는 컨테이너 역할레이아웃을 만들거나 콘텐츠를 나눌 때 주로 사용 @("이것은 태그입니다.") 태그는 "division"의 줄임말이다.자체적으로는 어떤 의미도 없는 컨테이너의 역할이다.CSS 및 JavaScript로 스타일을 적용하거나 조작하는 데에 유용하다.class 또는 id 적용일반적으로 스타일 적용을 위해 class나 id와 함께 사용한다.이를 통해 레이아웃을 구성할 수 있다. 이것은 박스입니다.와 차이점블록 요소가로 전체를 차지레이아웃을 만들 때 사용인라인 요소필요한 만큼만 차지텍스트 스타일을 적용할 때 사용 이것은 div입니다. 이것은 span입니다.태그 관련 글 바로가기 모음[HTML] 태그[HTML] 태그[HTML] 태그

공부/HTML 2025.02.03

[DB] VARCHAR와 TEXT

VARCHAR 한 레코드에서 사용할 수 있는 최대 공간의 크기에 영향을 준다. 컬럼에 저장된 값이 큰 경우 Off-Page에 저장 최대 크기 길이 제한 충족 시 (컬럼 값의 길이(Prefix) 지정) 인덱스 생성이 가능하다. TEXT LOB(Large Object) 타입 B-Tree 외부의 Off-Page에 저장 MySQL에서는 저장 공간이 많이 필요한 경우에만 Off-Page에 저장 최대 크기 길이 제한 충족 시 (컬럼 값의 길이(Prefix) 지정) 인덱스 생성이 가능하다. Off-Page MySQL 엔진과 InnoDB 스토리지 엔진은 uchar* records[2] 메모리 버퍼를 이용하여 레코드 데이터를 주고 받는다. TABLE 구조체 내에 해당 메모리 공간이 정의되어 있으며, 여러 커넥션에서 공유..

공부/DB 2023.11.22

[C#] EventHandler 예제 <ThunderboltEvent>

지난 글에서 EventHandler에 대해 알아본 적이 있었다. - 2023.11.16 - [C#] - [C#] EventHandler 그러나 이 EventHandler에서 말하는 Event가 무엇인지, 실제 사용은 어떤 식으로 해야하는지 감이 잘 오지 않아 재미있는 예제를 제작해보며 EventHandler에 대한 사용법을 익힐 수 있었다. 실제 코드를 github에 올려두었으니 실제 코드가 보고싶다면 아래의 주소로 가면 된다. GitHub 주소 : https://github.com/ChoiMingyeong/ThunderboltEvent.git 기본 골자는 다음과 같다. ThunderboltEvent(이하 천둥벼락이라고 칭함)가 발생하였을 때 각 개체별로 발생될 상황들을 자동으로 실행하게 하는 것이다. ..

공부/C# 2023.11.17

[C#] EventHandler

EventHandler란? 관찰자 디자인 패턴(Observer Pattern) 개체에서 작업 실행을 알리기 위해 보내는 메세지 public event EventHandler MyEventHandler; 개발자가 정의한 어떠한 일의 발생 순간에 (이벤트 발생) 처리하고 싶은 작업이 있는 각 개체들의 처리법을 미리 등록해두고, 이벤트 발생시 미리 등록한 함수들을 순차적으로 실행되도록 해주는 대리자 모델이다. 일반적으로 이벤트 핸들러에 등록하는 함수는 다음과 같은 형식으로 설계한다. void OnEventFunc(object sender, EventArgs s) { //... } 직접적으로 함수의 형태를 정하여 초기화시켜주고 싶은 경우에는 다음과 같은 대리자를 선언하는 방법을 사용할 수 있다. public d..

공부/C# 2023.11.16

[DB] Index

Page란? 디스크와 메모리에 I/O가 이루어지는 데이터 Read/Write의 최소 작업 단위이다. 하나의 컬럼만 읽고 싶어도 레코드가 속한 페이지 전체를 읽어야 한다. 만약 레코드를 찾는데 1개의 페이지만으로 처리가 안된다면 추가 페이지를 읽어야 하는데, 그러한 과정은 디스크 I/O 작업로 인한 성능 저하 및 메모리 효율 저하를 불러온다. 또한, 페이지에 저장되는 데이터의 크기가 크면 메모리에 캐싱해둘 수 있는 페이지 수도 줄어들게 된다. 따라서 페이지에 저장되는 개별 데이터의 크기를 최대한 작게 하여 1개의 페이지에 많은 데이터가 담기도록 하는 것, 그리하여 액세스하는 Page 수를 최대한 줄이는 것이 DB 성능 개선에 매우 큰 영향을 준다. Extent란? 연속된 Page(=Block)를 정해진 수..

공부/DB 2023.11.14

[C#] GetHashCode()

HashCode란? 객체의 HashCode란, 객체를 식별하는 객체 고유의 하나의 정수 값을 의미한다. GetHashCode() 함수는 객체의 HashCode값을 계산하여 가져오는 함수로, 해시값은 기본적으로 객체의 일생동안 바뀌지 않는다. 기본 메서드는 object의 GetHashCode()를 사용하나, 클래스나 자료구조별로 재정의가 되어있을 수 있다. object의 기본 해시 메소드는 RuntimeHelpers.GetHashCode()를 사용하여 해시값을 얻어온다. int num = 10; var numHash1 = num.GetHashCode(); var numHash2 = num.GetHashCode(); object obj = new object(); var objHash1 = obj.GetHa..

공부/C# 2023.11.10