이번 포스팅에서는 자바스크립트와 goqr.me API를 활용해 간단한 QR 코드 생성기를 만들어보는 실습을 소개합니다.
QR 코드는 일상생활에서 많이 접할 수 있는 2차원 바코드 형태로, 손쉽게 정보를 전달할 수 있는 장점이 있습니다.
이 프로젝트를 통해 QR 코드가 어떻게 만들어지는지, 그리고 JavaScript, HTML, CSS를 사용하면 별도의 복잡한 라이브러리를 쓰지 않고도 손쉽게 QR 코드를 생성할 수 있습니다.

구조는 아주 간단합니다.
.
├─ index.html // HTML 구조
├─ style.css // 간단한 스타일
└─ app.js // JS 로직
각 파일의 주요 내용은 다음과 같습니다.
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>QR Code</title>
<link href="style.css" rel="stylesheet" />
</head>
<body>
<div class="container">
<p>TEXT & URL</p>
<input type="text" id="qrText" placeholder="text or url" autofocus="true" />
<div id="qrImgBox" class="imgContainer">
<img id="qrImg" src="" alt="qr img" aria-label="QR 이미지 입니다." draggable="false" />
</div>
<button>QR Code Creation</button>
</div>
<script src="app.js"></script>
</body>
</html>
input에 사용자가 QR 코드로 만들 문자열 또는 URL을 입력#qrImgBox 영역에 API로부터 받은 QR 코드 이미지를 출력할 <img> 배치* {
margin: 0;
padding: 0;
font-family: sans-serif;
box-sizing: border-box;
}
body {
background: black;
}
.container {
background: lightgray;
width: 60%;
padding: 25px 35px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
position: absolute;
border-radius: 20px;
}
.container p {
font-weight: 600;
font-size: 1.6rem;
margin-bottom: 6px;
text-align: center;
}
.container input {
width: 100%;
height: 50px;
border: 1px solid #102a42;
outline: 0;
padding: 10px;
margin: 10px 0 20px;
border-radius: 10px;
font-size: 1.2rem;
}
.container input.error-input {
border-color: red;
}
.container button {
width: 100%;
height: 50px;
border-radius: 10px;
outline: 0;
border: 0;
background: white;
color: cadetblue;
box-shadow: 0 10px 10px rgba(0, 0, 0, 0.6);
cursor: pointer;
margin: 10px 0;
font-weight: 500;
font-size: 1.2rem;
}
.container button:hover {
background: #b2d8b6;
color: #3b3b3b;
box-shadow: 0 10px 10px rgba(0, 0, 0, 0.3);
}
.imgContainer {
width: 200px;
border-radius: 5px;
max-height: 0;
overflow: hidden;
transition: max-height 0.8s;
}
.imgContainer img {
width: 100%;
padding: 10px;
}
.imgContainer.showImg {
max-height: 300px;
margin: 10px auto;
border: 1px solid #b2d8b6;
}
/* 흔들리는 애니메이션 */
.error {
animation: shake 0.1s linear 10;
}
@keyframes shake {
0% {
transform: translateX(0);
}
25% {
transform: translateX(-2px);
}
50% {
transform: translateX(0);
}
75% {
transform: translateX(2px);
}
100% {
transform: translateX(0);
}
}
.error-input 클래스를 추가해 에러 시 빨간 테두리를 표시.error 애니메이션이 흔들리는 효과를 구현.showImg를 통해 QR 코드가 생성될 때 이미지 컨테이너의 최대 높이를 늘려 부드럽게 노출// 변수 선언
const qrText = document.getElementById("qrText");
const qrImg = document.getElementById("qrImg");
const qrImgBox = document.getElementById("qrImgBox");
const generateButton = document.querySelector("button");
// Error 보여주기
const showError = () => {
qrText.classList.add("error-input");
qrText.classList.add("error");
};
// Error 제거하기
const removeError = () => {
qrText.classList.remove("error-input");
qrText.classList.remove("error");
};
// QR Code 생성 함수
const generateQRCode = () => {
if (qrText.value.length > 0) {
// goqr.me API에서 제공되는 QR 코드 생성 URL
// data 파라미터에 입력값을 넣어주면 자동으로 QR 코드 생성
qrImg.src = `https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=${qrText.value}`;
// 이미지 보여주기
qrImgBox.classList.add("showImg");
removeError();
} else {
// 텍스트가 비어 있을 때 에러 표시
showError();
}
};
// 버튼 클릭 시 생성
generateButton.addEventListener("click", generateQRCode);
// input 입력 시 에러 제거
qrText.addEventListener("input", () => {
if (qrText.value.length > 0) {
removeError();
}
});
// input에서 Enter 키를 누르면 QR 코드 생성
qrText.addEventListener("keydown", (event) => {
if (event.key === "Enter") {
generateQRCode();
}
});
input에 error-input 클래스를 붙여 빨간색 테두리 표시error 클래스로 흔들리는 애니메이션 부여removeError()generateQRCode()qrText의 값이 있을 경우,data 파라미터로 텍스트를 넣고,<img> 태그의 src 속성을 이 URL로 설정index.html, style.css, app.js를 위와 같이 구성index.html을 열기?size=150x150 부분을 원하는 크기로 수정 (예: 200x200, 300x300 등)<img> 태그에 표시된 QR 코드를 마우스 오른쪽 클릭 → “이미지 저장”canvas나 Blob 형태로 다운로드받도록 구현 가능이렇게 goqr.me API를 통해 아주 간단하게 QR 코드를 생성해볼 수 있습니다.
HTML & CSS를 이용해 스타일링하고, 자바스크립트로 API 호출 후 <img>에 표시하기만 하면 되는 매우 직관적인 방법입니다.
원리를 이해했다면, 더 나아가 스캔(Decoding) 기능까지 구현하거나, QR 코드 생성/다운로드/공유 등을 통합한 다양한 프로젝트를 시도해볼 수도 있습니다.
궁금한 점이나 개선 아이디어가 있다면 언제든 댓글로 남겨주세요!