엔터만으로는 줄바꿈이 안 됩니다
마크다운에서 한 번 엔터를 치면, 결과 화면에서는 줄이 바뀌지 않고 같은 줄로 이어집니다.
첫 번째 줄
두 번째 줄
위 원문은 이렇게 렌더됩니다.
첫 번째 줄 두 번째 줄
버그가 아니라 의도된 설계입니다. 마크다운은 "원문 자체가 읽기 좋아야 한다"는 목표로 만들어졌고, 긴 문단을 편집기 폭에 맞춰 여러 줄로 끊어 적어도 결과는 한 문단으로 나오게 하려 한 겁니다. 코드 편집기에서 80자마다 줄을 끊어 쓰던 시절의 관습이 문법에 그대로 남은 셈입니다.
문제는 요즘 사람들은 그렇게 쓰지 않는다는 겁니다. 대부분 시를 쓰듯, 주소를 적듯 "이 줄에서 끊고 싶어서" 엔터를 칩니다. 그래서 줄바꿈은 마크다운에서 가장 자주 걸리는 지점입니다.
방법 1. 줄 끝에 공백 두 칸
줄 맨 끝에 스페이스를 두 번 누르고 엔터를 치면 줄이 바뀝니다.
첫 번째 줄··
두 번째 줄
(··는 공백 두 칸을 표시한 것입니다.) 원조 마크다운부터 있던 가장 표준적인 방법이고, 거의 모든 환경에서 동작합니다.
문제는 눈에 보이지 않는다는 것입니다. 나중에 다시 열었을 때 공백이 두 칸인지 한 칸인지 알 수 없고, 다른 사람이 문서를 만지다가 무심코 지워도 알아채기 어렵습니다.
⚠️ 공백 두 칸이 저절로 사라지는 경우
더 성가신 함정이 있습니다. 많은 편집기가 저장할 때 줄 끝 공백을 자동으로 지웁니다.
- VS Code —
files.trimTrailingWhitespace설정이 켜져 있으면 저장 시 제거 - Prettier — 마크다운 포맷 시 줄 끝 공백 제거
- 각종 린터의
no-trailing-spaces규칙
"분명히 두 칸 넣었는데 줄바꿈이 안 된다"면 십중팔구 이겁니다. 저장 직후 원문을 다시 열어 공백이 남아 있는지 확인해보세요. 이런 환경에서 작업한다면 아래 방법 2나 3을 쓰는 편이 마음이 편합니다.
방법 2. 백슬래시(\)
줄 끝에 백슬래시 하나를 붙이는 방법입니다.
첫 번째 줄\
두 번째 줄
공백과 달리 눈에 보여서 편집할 때 헷갈리지 않고, 편집기가 저절로 지우지도 않습니다. CommonMark 표준에 포함된 문법이라 이를 따르는 도구에서는 안정적으로 동작합니다.
다만 CommonMark를 따르지 않는 오래된 렌더러에서는 백슬래시가 그대로 화면에 보일 수 있습니다. 낯선 환경에 글을 올릴 때는 한 줄 먼저 시험해보는 게 안전합니다.
방법 3. <br> 태그
HTML을 허용하는 곳이라면 <br> 태그가 가장 확실합니다.
첫 번째 줄<br>
두 번째 줄
눈에 보이고, 지워질 일 없고, HTML을 허용하는 곳이면 예외 없이 동작합니다. 문법이 조금 지저분해 보이는 것이 유일한 단점입니다.
반대로 HTML을 막아둔 환경(일부 정적 사이트 생성기의 기본 설정, 보안이 엄격한 사내 위키)에서는 <br>이 글자 그대로 노출됩니다.
어떤 걸 써야 할까
| 상황 | 권장 |
|---|---|
| 혼자 쓰고 편집기 설정을 아는 문서 | 공백 두 칸 |
| 여러 사람이 만지는 문서, Prettier 사용 | \ 또는 <br> |
| 표 안에서 줄바꿈 | <br> 외에는 안 됨 |
| HTML이 막힌 환경 | \ (안 되면 공백 두 칸) |
줄바꿈과 문단 나누기는 다릅니다
위 방법들은 같은 문단 안에서 줄만 바꿉니다. 완전히 새로운 문단을 만들려면 두 줄 사이를 빈 줄 하나로 띄웁니다.
첫 번째 문단입니다.
두 번째 문단입니다.
차이는 여백입니다. 줄바꿈은 줄만 내려가고, 문단 나누기는 위아래로 여백이 생깁니다. 화면에서 답답해 보인다면 줄바꿈을 써야 할 자리에 문단 나누기를 썼거나, 그 반대일 가능성이 높습니다.
여백을 더 주려고 빈 줄을 여러 개 넣는 건 소용없습니다. 빈 줄을 세 개 넣든 열 개 넣든 문단 하나만큼의 여백으로 처리됩니다. 여백을 더 벌리려면 <br>을 추가로 넣거나 구분선을 쓰는 편이 낫습니다.
⚠️ 같은 문법인데 GitHub에서 다르게 동작합니다
가장 헷갈리는 부분이자, 이 글에서 꼭 기억하실 부분입니다. GitHub은 같은 마크다운을 위치에 따라 다르게 렌더합니다.
- 저장소의
.md파일(README 등) — 표준 규칙 그대로입니다. 엔터 한 번은 무시되고 줄이 이어집니다. - 이슈·PR 설명·댓글·Discussions — 엔터 한 번이 그대로 줄바꿈으로 처리됩니다.
그래서 이슈에 편하게 쓰던 방식대로 README를 작성하면 줄이 전부 붙어버립니다. "이슈에서는 잘 됐는데 README에서만 안 된다"는 상황의 원인이 이겁니다. README를 쓸 때는 반드시 위 세 가지 방법 중 하나를 써야 합니다.
다른 플랫폼은 어떨까
엔터 한 번의 동작은 플랫폼마다 다릅니다.
| 플랫폼 | 엔터 한 번의 결과 |
|---|---|
GitHub .md 파일 |
줄이 이어짐 (방법 1~3 필요) |
| GitHub 이슈·댓글 | 그대로 줄바꿈 |
| 벨로그 | 그대로 줄바꿈 |
| 티스토리 마크다운 모드 | 그대로 줄바꿈 |
| 노션 | 새 블록 생성 (같은 블록 안 줄바꿈은 Shift+Enter) |
| Slack·Discord | 그대로 줄바꿈 |
정리하면, 글을 쓰는 곳이 어디냐에 따라 엔터의 의미가 달라집니다. 문서 파일에 쓸 때는 줄바꿈 문법이 필요하고, 대화형 입력창에서는 대체로 필요 없습니다.
표 안에서는 <br>만 됩니다
표의 칸 안에서 줄을 바꾸고 싶을 때, 공백 두 칸이나 백슬래시는 통하지 않습니다. 표는 한 행이 한 줄로 정의되는 구조라 줄 자체를 나눌 수가 없기 때문입니다.
| 항목 | 설명 |
|---|---|
| 설치 | 저장소 클론<br>의존성 설치<br>서버 실행 |
칸 안에 여러 줄이 필요하면 <br>을 쓰거나, 애초에 표가 아닌 다른 구조가 맞는지 다시 생각해보는 것도 방법입니다. 자세한 내용은 표 작성 가이드에 정리해두었습니다.
목록 안에서 줄바꿈
목록 항목 안에서 줄을 바꿀 때는 다음 줄을 들여쓰기해야 같은 항목으로 이어집니다.
- 첫 번째 항목입니다··
이어지는 설명입니다.
- 두 번째 항목
들여쓰기를 하지 않으면 마크다운이 목록이 끝난 것으로 판단해 별개의 문단으로 처리합니다. 목록 안의 줄이 이상하게 빠져나온다면 들여쓰기부터 확인해보세요.
정리하면, 줄만 바꾸려면 공백 두 칸·\·<br> 중 하나, 문단을 나누려면 빈 줄입니다. 그리고 어느 방법이 필요한지는 글을 올릴 곳이 결정합니다. 이지 마크다운 에디터는 입력과 동시에 결과가 보이므로, 세 가지를 직접 눌러보며 차이를 확인해보세요.