Search
Duplicate
⌨️

나만 몰랐던 이야기 - \r\n편

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
네트워크
Scrap
태그
잡지식
HTTP
9 more properties
HTTP 구조를 공부하던 그 날,,
공부가 지독하게 하기 싫었던 난 HTTP 헤더를 보다 \r\n을 발견한다
한 줄 띄우는 용이다..한 줄..한줄? \n이 한 줄 띄우라는거 아니었나?? \r은 도대체 뭔데 그럼??
좋아 딴짓할 명분을 찾았다

CR(캐리지 리턴) LF(라인 피드) 그게 도대체 뭔데?

캐리지 리턴
문자의 새 줄을 시작하는 데 쓰이는 제어문자나 그 구조를 가리킨다.
라인 피드
텍스트의 한 줄이 끝남을 표시하는 문자 또는 문자열이다.
위키백과 피셜 설명은 위와 같다.
여전히 이해는 가지 않는다.
우리는 분명 코딩을 할때 \n 하나면 새 줄로 넘어가는 모습을 볼 수 있지 않는가
근데 그럼 \r\n을 따로 한번 써보자

CR LF 너희 실행결과가 어떻게 되는거더라..?

#include <iostream> int main(void) { std::cout << "aa\rbb\ncc" << std::endl; return (0); }
C++
복사
오호라,,,,,,,,,
내 a는 어디갔어???????
더 미궁으로 빠져드는거 같은데,,,,
그럼 어원에 답이 있지 않을까?

CR LF 너희들 어원이 뭔데?

우리가 어원을 알기 위해서는 타자기에 대해서 알 필요가 있다.
영상을 보면 알 수 있듯, 타자기의 중앙에 활자가 나와 종이에 잉크를 찍어내는 형식임을 알 수 있다.
그리고 종이는 옆으로 정해진 간격만큼 왼쪽으로 이동하게 된다.
종이를 옆으로 이동시켜주는 녀석을 Carriage라고 한다고 한다.
영상에서 보면 타이핑을 통해 이 Carriage가 이동을 하다 타자기의 중앙이 종이를 넘어갈 거 같으면 이 Carriage를 밀어 위치를 원상복구 시키는 것을 알 수 있다.
이 행위를 Carriage Return 이라고 한다고 한다.
Line Feed 는 단순히 한 줄 간격만큼 종이를 올려주는 행위라고 한다.
따라서 우리가 흔히 일반적으로 원하는 엔터 는 CRLF가 결합이 되어 다음 줄 첫번째를 가리키게 되는 것이다.
왜 아까 전 나의 예시에서 a가 사라졌는지 알 거 같다.
Carriage Return을 해버려서 a가 가리키는 곳이 b로 채워지고 \n를 통해서 개행이 된 거 같다
근데 여기서 문득 의문이 생긴다

근데 우리는 코딩할때 \n만 쓰고 있지 않던가..?

UNIX는 개행을 위해 LF만을 쓰고 있고, Window에서는 CRLF을 쓰고 있다고 한다.
따라서, UNIX에서 작성한 문서를 Window에서 열었을 경우 한 줄로 보이거나 깨지는 이유는 이러한 이유 때문이라고 한다.
물론 최신 에디터의 경우 각각의 os에 맞게 호환을 해준다는 거 같으니 메모장 이런게 아니면 크게 신경 쓸 필요는 없을 거 같다.
이제 공부하러 가야겠네,,

참고자료