본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

JavaScript document.write() — 문서에 직접 출력 완전 정리

by 왕진 2026. 7. 15.
반응형

 

 

Web Development · JavaScript

document.write() —
문서에 직접 출력하기

script 태그, document 객체, write 메서드로 화면에 글자와 태그를 찍어내는 방법
시작 오늘 분석할 코드

자바스크립트를 배울 때 가장 먼저 만나는 코드 중 하나다. <script> 태그 안에서 document.write()를 세 번 호출해 화면에 글자와 태그를 직접 찍어낸다. 짧지만 그 안에 "스크립트 태그", "객체", "메서드", "HTML 문자열 해석"이라는 자바스크립트의 핵심 개념이 모두 들어있다.

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>document.write() 활용</title> </head> <body> <h3>document.write() 활용</h3> <hr> <script> //스크립트태그는 자바스크립트가 동작이 되는 영역이예요. document.write("<h3>Welcome!</h3>"); //도큐먼트가 바로 웹브라우저에서 html,css가 화면에 보이는 영역이다. 그런데 이것을 문서라고 해서. 도큐먼트라고 하고. 이것을 도큐먼트객체라고 한다. //도큐먼트에 write메서드를 사용해서. 화면에 쓰기 작업을 했다. //html태그를 출력을 한다. 객체기반언어인거예요. 파이선하고 또다른 편리한 점이 있어요. //객체가 미리 준비되어있는 거예요. document.write("2 + 5 는 <br>"); document.write("<mark>7 입니다.</mark>"); </script> </body> </html>
실제 출력 미리보기

document.write() 활용


Welcome!

2 + 5 는

7 입니다.

브라우저 화면에는 원본 코드의 <h3> 제목과 구분선(<hr>) 아래로, 스크립트가 실행되면서 새로 만든 "Welcome!" 제목, "2 + 5 는"이라는 줄, 그리고 노란 형광펜으로 강조된 "7 입니다."가 이어서 출력된다. 즉 자바스크립트가 실행되면서 HTML 문서 뒤쪽에 내용을 계속 덧붙인 것이다.

용어 용어 정리
script자바스크립트 코드가 실행되는 영역을 표시하는 태그
document브라우저가 지금 보여주고 있는 문서를 가리키는 객체
write()document 객체가 가진, 문서에 바로 출력하는 메서드
메서드객체 안에 들어있는 함수. object.method() 형태로 호출
객체 기반 언어document 같은 객체가 미리 준비되어 바로 꺼내 쓰는 언어
문자열따옴표로 감싼 텍스트. HTML 태그도 문자열로 넣을 수 있음
<br>줄바꿈 태그 — 문자열 안에 넣으면 그 자리에서 줄이 바뀜
<mark>형광펜처럼 텍스트를 노랗게 강조하는 HTML 태그
파싱브라우저가 HTML 문자를 읽어 태그 구조로 해석하는 과정
innerHTML특정 요소 내부의 HTML을 통째로 읽거나 바꾸는 속성

1 <script> 태그 — 자바스크립트가 실행되는 영역
왜 script 태그가 따로 필요한가?

HTML은 원래 태그를 해석해서 화면을 그리는 역할만 한다. "이 줄부터는 코드를 계산하고 실행해라"라는 지시를 브라우저에게 따로 알려주지 않으면, 브라우저는 그냥 글자로 받아들일 뿐이다. <script>는 그 경계선이다. 이 태그 안에 들어간 내용은 HTML 파서가 아니라 자바스크립트 엔진에게 넘겨져서, 위에서부터 아래로 한 줄씩 순서대로 실행된다.

※ 이번 코드의 script는 <hr> 다음, 즉 body의 중간에 있다. 그래서 브라우저는 거기까지의 HTML(제목, 구분선)을 먼저 화면에 그린 다음, 그 지점에서 자바스크립트를 실행한다.

2 document 객체 — 화면 문서 그 자체
document는 왜 갑자기 튀어나오는가?

브라우저는 페이지를 열자마자, 지금 화면에 그려지고 있는 HTML·CSS 문서 전체를 자바스크립트가 다룰 수 있도록 하나의 "객체"로 포장해 둔다. 그 객체의 이름이 바로 document다. 우리가 let document = ...처럼 직접 만든 변수가 아니라, 브라우저가 페이지를 켜는 순간 이미 만들어서 건네주는 전역 객체라는 점이 핵심이다.

document → "지금 이 화면에 보이는 문서" 그 자체를 가리키는 객체 → 화면(html/css)이 곧 document 이고, 우리는 이걸 "문서"라고 부른다

3 write() 메서드 — 문서에 바로 쓰기
write()는 정확히 뭘 하는가?

document.write("문자열")은 괄호 안에 넣은 문자열을 현재 문서, 그 실행 시점의 위치에 그대로 추가한다. 다른 언어의 print나 출력 함수와 비슷하게 생각하면 이해가 쉽다. 이번 코드처럼 write()를 여러 번 호출하면, 호출된 순서 그대로 화면에 이어서 붙는다.

document.write("A"); document.write("B"); document.write("C"); → 화면에는 순서대로 AB C 가 이어 붙어서 출력된다

 

반응형

 

4 문자열 안에 HTML 태그를 넣으면 — 진짜 태그로 해석된다
왜 "<h3>Welcome!</h3>"가 글자 그대로 안 보이는가?

write()는 넘겨받은 문자열을 단순한 "글자"가 아니라 브라우저가 해석해야 할 HTML 조각으로 취급해서 문서 흐름에 흘려 넣는다. 그래서 문자열 안에 <h3>, <br>, <mark> 같은 태그 문자열이 들어있으면, 화면에는 꺾쇠 기호가 그대로 찍히는 게 아니라 실제 제목·줄바꿈·강조로 렌더링된다.

일반 텍스트라면
"<h3>Welcome!</h3>"를 그대로 화면에 찍는다면
글자 그대로 <h3>Welcome!</h3>가 보여야 한다
document.write는
HTML로 해석해서 실제 Welcome! 제목으로
렌더링한다 — 태그가 "살아난다"
※ 이 성질 덕분에 document.write는 단순 텍스트뿐 아니라 제목·줄바꿈·강조 태그까지 한 번에 "찍어낼" 수 있다.

5 객체 기반 언어 — 객체가 미리 준비되어 있다
"객체 기반 언어"라는 말이 왜 편리하다는 뜻인가?

자바스크립트가 브라우저 안에서 동작할 때는 document, window, console 같은 여러 객체를 브라우저가 미리 만들어서 건네준다. 그래서 개발자는 "화면 문서를 다루는 기능"을 처음부터 새로 만들 필요 없이, 이미 준비된 document 객체의 write() 메서드를 곧바로 꺼내 쓰기만 하면 된다. 원본 코드의 주석에 나온 "객체가 미리 준비되어있는 거예요"라는 말이 바로 이 뜻이다.

※ 정리하면
  • 객체를 직접 만들지 않아도, 브라우저가 실행 환경에 필요한 객체를 미리 넣어둔다
  • 이런 객체를 "호스트 객체"라고 부르기도 한다
  • 덕분에 document.write() 처럼 짧은 코드로도 바로 화면 출력이 가능하다

6 document.write의 치명적인 한계
왜 아무 데서나 write를 쓰면 안 되는가?

document.write는 문서가 아직 만들어지는 중(파싱 중)일 때는 그 지점에 자연스럽게 이어쓰기가 되지만, 브라우저가 페이지 로딩을 이미 다 끝낸 뒤에 호출하면 상황이 완전히 달라진다. 이 시점의 write 호출은 "기존 문서를 지우고 새 문서를 여는 것"으로 처리되어, 지금까지 화면에 있던 내용이 통째로 사라지고 write에 넘긴 내용만 남는다.

※ 예를 들어 버튼 클릭 이벤트나 setTimeout 안에서 document.write를 호출하면, 클릭하는 순간 페이지 전체가 하얗게 지워지고 write한 글자만 남는 사고가 난다.
브라우저 입장에서 시점별로 보면

같은 document.write("안녕") 한 줄이어도, 그게 언제 실행되느냐에 따라 결과가 정반대다. 브라우저의 문서 상태를 시간 순으로 따라가 보자.

1
문서 파싱 시작브라우저가 위에서부터 HTML을 읽으며 화면을 그리는 중 — 문서가 "열려(open)" 있는 상태다.
2
파싱 도중 <script> 안 write() 실행아직 문서가 열려 있으므로, write 내용이 바로 그 자리에 자연스럽게 이어 붙는다. → 정상 동작
3
문서 파싱 완료 (로드 끝)브라우저가 문서를 "닫는다(close)". 화면 그리기가 끝난 안정 상태.
4
로드 후 write() 실행 (클릭·타이머 등)닫힌 문서에 write를 하면 브라우저는 "새 문서를 열어라"로 해석 → 기존 내용을 지우고 새로 시작 → 페이지가 날아간다.

7 실무에서의 대안 — innerHTML과 DOM API
그럼 실무에서는 뭘 쓰나?

document.write는 개념을 익히기엔 좋지만, 문서 전체 흐름에 영향을 주고 위치를 세밀하게 지정하기 어려우며 로드 후 호출 시 파괴적이라는 이유로 실무에서는 거의 쓰지 않는다. 대신 특정 요소를 골라 그 안에 내용을 채우는 요소.innerHTML, 또는 노드를 하나씩 만들어 붙이는 createElement / appendChild 같은 DOM API를 사용한다.

// 예시 — 실무 스타일 const box = document.querySelector("#result"); box.innerHTML = "<mark>7 입니다.</mark>"; → 문서 전체가 아니라 #result 요소 안에만 정확히 반영된다

8 세 가지 출력 방법 한눈에 비교
document.write · innerHTML · createElement

화면에 무언가를 그려 넣는 방법은 여러 가지다. 셋 다 "HTML을 화면에 반영"하지만, 어디에 어떻게 반영되는지가 다르다. 왜 실무가 document.write를 떠나 뒤쪽 두 방법으로 옮겨갔는지 표로 정리하면 분명해진다.

방법 반영 대상 로드 후 사용 주 용도
document.write() 문서 전체 흐름 위험 — 문서를 덮어씀 학습·초기 로딩 중 간단 출력
요소.innerHTML 지정한 요소 내부만 안전 특정 영역 내용 통째로 교체
createElement() 새 노드를 만들어 원하는 위치에 붙임 안전 정밀한 DOM 조립·동적 UI
document.write (지금 배운 것)
문서가 열려 있는 동안만 안전.
위치를 콕 집을 수 없고, 로드 후엔
페이지를 통째로 날려 버린다.
innerHTML / createElement (실무)
원하는 요소만 골라 안전하게 갱신.
로드 후에도 문제없고,
동적 화면 갱신의 기본기다.
document.write
innerHTML
DOM API

학습은 왼쪽에서 시작하지만, 실무의 무게중심은 오른쪽으로 이동한다. document.write로 개념을 잡고, 곧바로 innerHTML·DOM 조작으로 넘어가는 것이 자연스러운 순서다.


9 자주 하는 실수
실수 증상 해결
페이지 로드 완료 후(클릭, setTimeout 등) document.write 호출 화면 전체가 하얗게 지워지고 write 내용만 남음 innerHTML이나 DOM API로 교체
문자열 안 따옴표 처리를 잘못함 문자열이 중간에 끊겨 SyntaxError 발생 큰따옴표·작은따옴표를 구분해서 쓰거나 이스케이프(\") 사용
script 태그를 head에 두고 write 남발 아직 body가 없어 원하는 위치에 출력이 안 됨 body 안 원하는 위치에 두거나 로드 이후 실행되게 함
write를 여러 줄로 잘게 쪼개 반복 호출 코드 가독성 저하, 어디서 뭐가 붙는지 추적 어려움 문자열을 변수(템플릿 리터럴)로 모아 한 번에 write
<br>, <mark> 같은 태그를 빼먹고 순수 텍스트로만 씀 줄바꿈·강조가 전혀 적용되지 않음 출력하려는 태그 문자열을 정확히 포함해서 넘기기
여는 태그만 쓰고 닫는 태그를 빠뜨림 (예: <h3>만) 이후 내용까지 그 태그에 휩쓸려 서식이 깨짐 <h3>…</h3>처럼 여닫기 짝을 문자열 안에서 맞추기

핵심 한 줄 요약

<script>자바스크립트가 실행되는 영역, 위에서 아래로 순서대로 실행
document브라우저가 미리 준비해 둔 "지금 화면 문서" 객체
write()문자열을 문서에 바로, HTML로 해석해서 출력하는 메서드
HTML 문자열따옴표 안에 태그를 넣으면 실제 태그로 렌더링됨
객체 기반 언어document 같은 객체가 이미 준비되어 있어 바로 메서드 호출 가능
한계로드 완료 후 호출하면 기존 문서를 통째로 덮어씀
실무 대안innerHTML / createElement 같은 DOM API 사용

Tags

#JavaScript #documentwrite #document객체 #script태그 #자바스크립트출력 #HTML출력 #객체기반언어 #자바스크립트기초 #JS #DOM #innerHTML #웹개발 #코딩기초 #프론트엔드 #티스토리
▼ 티스토리 태그 입력란 복사용
JavaScript, documentwrite, document객체, script태그, 자바스크립트출력, HTML출력, 객체기반언어, 자바스크립트기초, JS, DOM, innerHTML, 웹개발, 코딩기초, 프론트엔드, 티스토리
반응형

댓글