본문 바로가기

대학교 강의/게임 서버 프로그래밍 입문

게임 서버 프로그래밍 입문 - 하드 링크와 소프트 링크 (Hard Link and Soft Link)

들어가며

 쉽지 않아... 쉽지 않아...

 

링크(Link)

 링크는 파일과 파일을 말 그대로
연결시켜준다는 뜻이다.

 이렇게 파일과 파일이 연결되어 생겨난
파일이 바로 링크 파일(Link File)이다.

 링크 파일은 하나의 i-node에 연결되도록
만들어진 것이다.

 엄연히 따지자면 크게 하드 링크(Hard Link)와
소프트 링크(Soft Link)로 나뉜다.

 소프트 링크의 경우 심볼릭 링크(Symbolic Link)
라고도 불린다.

 사실 심볼릭 링크라고 더 많이 불린다.

 

 그림으로 설명하자면 위와 같다.

 하지만 그림만으로 모든 설명이 되지 않으니,
자세한 설명으로 풀어보자.

 

하드 링크(Hard Link)

 하드 링크는 동일한 i-node를 갖는
파일을 하나 만드는 것과 같다.

 예를 들어 파일 A에 대해서 하드 링크를
할 경우,

 HL_A라는 이름으로 링크 파일이 만들어
졌다고 가정하자.

 A와 HL_A은 동일한 i-node를 참조하고,

 i-node 입장에서는 자신을 참조하는 파일이
2개이니 reference count가 2가 된다.

 또한 i-node는 데이터 블록을 여전히
원본 파일로 가리키고 있으므로

 A나 HL_A 중 하나로 접근하더라도
동일한 i-node에 접근,

 i-node는 일관적으로 원본 데이터 블록을
가리키고 있으므로

 결국 A, HL_A는 둘 다 같은 파일을 실행한다.

 이것이 하드 링크이다.

 

 여기서 재미있는 점은, 원본 파일을
삭제해도 링크 파일을 통해서

 원본 데이터 블록에 접근이 가능하다는
것이다.

 하드 링크를 할 경우 상술했다시피,

 동일한 i-node를 가리키는 파일을
하나 더 만드는 것이다.

 따라서 링크 파일이 아닌 원본 파일을
삭제하여도,

 링크 파일은 여전히 원본 데이터 블록을
가리키고 있고,

 i-node 역시 reference count가 1만큼
줄어들었을 뿐 사라지지 않는다.

 따라서 하드 링크 파일 만으로도 유효하다.

 

심볼릭 링크(Symbolic Link) = 소프트 링크(Soft Link)

 심볼릭 링크는 쉽게 말하자면 '바로가기'다.

 즉, 원본 파일을 가리키는 데이터 블록을
가지는 링크 파일이다.

 위에서 보았던 그림이 보여주는 것이 전부다.

 심볼릭 링크 파일은 독자적인 i-node 넘버를
가지는데,

 이 i-node 넘버가 가리키는 데이터 블록은
원본 파일을 가리킨다.

 따라서 원본 파일과 심볼릭 링크 파일은
서로 다른 i-node 넘버를 가진다.

 

 여기서 하드 링크와 다른 점이 존재한다.

 하드 링크의 경우 원본 파일을 삭제하여도
독자적으로 동일한 i-node를 가리키는 반면,

 심볼릭 링크의 경우 다른 i-node를 가지기에
더 이상 참조를 할 수 없게 된다.

 아니, 심볼릭 링크 파일의 i-node 넘버에 접근하고
그 i-node가 가리키는 데이터 블록까지는 된다.

 하지만 그 데이터 블록이 가리키는 원본 파일이
삭제되었으므로 접근이 불가능해지는 것이다.