복사한 코드가 엉망이라 읽을 수가 없다고요? 배포 전에 파일 크기를 줄이고 싶다고요? 블루버튼의 코드 도구로 코드를 보기 좋게 정리하고, 빠르게 압축하세요!
왜 이 도구가 필요할까요?
코드 포매터가 필요한 순간
- 복사한 코드가 한 줄로 되어 있어서 읽을 수가 없을 때
- 들여쓰기가 엉망인 코드를 정리하고 싶을 때
- 다른 사람 코드를 리뷰해야 하는데 포맷이 제각각일 때
- JSON API 응답을 보기 좋게 펼쳐보고 싶을 때
- 빠른 코드 검토가 필요한데 로컬에 파일을 열기 귀찮을 때
코드 압축기가 필요한 순간
- 프로덕션 배포 전에 파일 크기를 줄이고 싶을 때
- 페이지 로딩 속도를 개선하고 싶을 때
- 대역폭 비용을 절감하고 싶을 때
- 코드 난독화로 소스를 보호하고 싶을 때
- 빠른 테스트를 위해 임시로 압축이 필요할 때
코드 포매터 완벽 가이드
지원하는 언어
- JavaScript / TypeScript: 변수, 함수, 클래스 등 자동 정렬
- JSON: API 응답, 설정 파일 보기 좋게
- HTML: 태그 계층 구조 명확하게
- CSS / SCSS: 선택자와 속성 깔끔하게
- SQL: 쿼리문 읽기 쉽게
포매팅 규칙
JavaScript / TypeScript
// 포매팅 전 (한 줄)
function getUserData(id){if(id>0){return fetch('/api/users/'+id).then(res=>res.json())}else{throw new Error('Invalid ID')}}
// 포매팅 후 (가독성 UP!)
function getUserData(id) {
if (id > 0) {
return fetch('/api/users/' + id)
.then(res => res.json());
} else {
throw new Error('Invalid ID');
}
}
적용되는 규칙
- 들여쓰기: 2칸 또는 4칸 (설정 가능)
- 중괄호: 새 줄 또는 같은 줄 (K&R 스타일)
- 세미콜론: 자동 추가
- 공백: 연산자 주위, 쉼표 뒤
- 최대 라인 길이: 80자 또는 100자
JSON
// 포매팅 전
{"id":1,"name":"John","email":"john@example.com","address":{"city":"Seoul","country":"Korea"},"tags":["developer","designer"]}
// 포매팅 후
{
"id": 1,
"name": "John",
"email": "john@example.com",
"address": {
"city": "Seoul",
"country": "Korea"
},
"tags": [
"developer",
"designer"
]
}
JSON 포매팅 옵션
- 들여쓰기 깊이: 2칸 (권장)
- 배열: 한 줄 또는 여러 줄
- 키 정렬: 알파벳 순 (선택)
HTML
<!-- 포매팅 전 -->
<div class="container"><h1>Title</h1><p>Content here</p><ul><li>Item 1</li><li>Item 2</li></ul></div>
<!-- 포매팅 후 -->
<div class="container">
<h1>Title</h1>
<p>Content here</p>
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
</div>
HTML 포매팅 특징
- 태그 계층 구조 명확화
- 속성 정렬 (선택)
- 닫는 태그 자동 매칭
- 주석 유지
CSS
/* 포매팅 전 */
.container{display:flex;justify-content:center;align-items:center;padding:20px;margin:0 auto;max-width:1200px;background:#fff;}
/* 포매팅 후 */
.container {
display: flex;
justify-content: center;
align-items: center;
padding: 20px;
margin: 0 auto;
max-width: 1200px;
background: #fff;
}
CSS 포매팅 규칙
- 속성 한 줄에 하나씩
- 알파벳 순 정렬 (선택)
- 세미콜론 자동 추가
- 색상 코드 정규화 (#ffffff → #fff)
코드 압축기 완벽 가이드
압축 원리
코드 압축(Minification)은 기능은 그대로 유지하면서 파일 크기만 줄이는 기술이에요.
압축 기법
- 공백 제거: 불필요한 스페이스, 탭, 줄바꿈 제거
- 주석 제거: 개발자용 주석 삭제
- 변수명 축약:
userName→a,getUserData→b - 코드 최적화: 불필요한 코드 제거
JavaScript 압축
// 압축 전 (15줄, 450바이트)
// 사용자 데이터를 가져오는 함수
function getUserData(userId) {
// API 엔드포인트
const apiUrl = 'https://api.example.com/users/';
// fetch 요청
return fetch(apiUrl + userId)
.then(response => {
// 응답을 JSON으로 변환
return response.json();
})
.then(data => {
// 데이터 반환
return data;
})
.catch(error => {
console.error('Error:', error);
});
}
// 압축 후 (1줄, 180바이트) - 60% 감소!
function getUserData(a){const b='https://api.example.com/users/';return fetch(b+a).then(c=>c.json()).then(d=>d).catch(e=>{console.error('Error:',e)})}
압축 효과
- 파일 크기: 60-80% 감소
- 로딩 속도: 1.5-3배 향상
- 대역폭 비용: 대폭 절감
JSON 압축
// 압축 전 (보기 좋은 형식, 250바이트)
{
"users": [
{
"id": 1,
"name": "John Doe",
"email": "john@example.com"
},
{
"id": 2,
"name": "Jane Smith",
"email": "jane@example.com"
}
]
}
// 압축 후 (한 줄, 120바이트) - 52% 감소
{"users":[{"id":1,"name":"John Doe","email":"john@example.com"},{"id":2,"name":"Jane Smith","email":"jane@example.com"}]}
CSS 압축
/* 압축 전 (8줄, 180바이트) */
.button {
display: inline-block;
padding: 10px 20px;
background-color: #007bff;
color: white;
border-radius: 5px;
cursor: pointer;
}
/* 압축 후 (1줄, 100바이트) - 44% 감소 */
.button{display:inline-block;padding:10px 20px;background-color:#007bff;color:#fff;border-radius:5px;cursor:pointer}
HTML 압축
<!-- 압축 전 (300바이트) -->
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>My Page</title>
</head>
<body>
<div class="container">
<h1>Welcome</h1>
<p>Hello World</p>
</div>
</body>
</html>
<!-- 압축 후 (200바이트) - 33% 감소 -->
<!DOCTYPE html><html lang="ko"><head><meta charset="UTF-8"><title>My Page</title></head><body><div class="container"><h1>Welcome</h1><p>Hello World</p></div></body></html>
단계별 사용법
코드 포매터 사용법
Step 1: 코드 붙여넣기
- 정리하고 싶은 코드를 입력창에 붙여넣기
- 파일 전체 또는 일부만 가능
- 여러 파일 내용을 순차적으로 처리 가능
Step 2: 언어 선택
- 자동 감지 또는 수동 선택
- JavaScript, JSON, HTML, CSS, SQL 중 선택
Step 3: 포매팅 옵션 설정
- 들여쓰기 크기: 2칸 / 4칸
- 탭 vs 스페이스
- 세미콜론 추가/제거
- 최대 라인 길이
Step 4: 포맷 버튼 클릭
- "포맷 적용" 버튼 클릭
- 즉시 결과 확인
- 마음에 안 들면 옵션 조정 후 재실행
Step 5: 결과 복사
- "복사" 버튼으로 한 번에 복사
- 코드 에디터에 붙여넣기
코드 압축기 사용법
Step 1: 코드 붙여넣기
- 압축할 코드를 입력창에 붙여넣기
- 프로덕션용 코드 준비
Step 2: 압축 옵션 선택
- 기본 압축: 공백/주석 제거
- 고급 압축: 변수명 축약, 코드 최적화
- 주석 유지: 중요 라이선스 주석 보존
Step 3: 압축 실행
- "압축하기" 버튼 클릭
- 압축 진행 표시
- 압축률 및 바이트 수 확인
Step 4: 결과 확인 및 복사
- 압축 전/후 크기 비교
- 압축률 확인 (예: 65% 감소)
- 복사해서 배포 파일에 적용
실전 활용 사례
사례 1: API 응답 디버깅
// 브라우저 콘솔에서 복사한 한 줄 JSON
// (복잡해서 읽을 수가 없음)
{"status":"success","data":{"users":[{"id":1,"name":"John","roles":["admin","editor"]},{"id":2,"name":"Jane","roles":["viewer"]}],"total":2}}
// 포매터에 넣으면
{
"status": "success",
"data": {
"users": [
{
"id": 1,
"name": "John",
"roles": [
"admin",
"editor"
]
},
{
"id": 2,
"name": "Jane",
"roles": [
"viewer"
]
}
],
"total": 2
}
}
// 이제 구조가 한눈에 보여요!
사례 2: 프로덕션 배포
// 개발 중 (포맷된 코드, 5KB)
// src/utils/validation.js
export function validateEmail(email) {
const emailRegex = /^[^s@]+@[^s@]+.[^s@]+$/;
return emailRegex.test(email);
}
export function validatePassword(password) {
// 최소 8자, 대소문자, 숫자, 특수문자 포함
const passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[@$!%*?&])[A-Za-zd@$!%*?&]{8,}$/;
return passwordRegex.test(password);
}
// 배포 시 압축 (1.5KB) - 70% 감소
export function validateEmail(e){const t=/^[^s@]+@[^s@]+.[^s@]+$/;return t.test(e)}export function validatePassword(e){const t=/^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[@$!%*?&])[A-Za-zd@$!%*?&]{8,}$/;return t.test(e)}
사례 3: CSS 최적화
/* 개발 중 (15KB) */
/* 버튼 스타일 */
.btn-primary {
display: inline-block;
padding: 12px 24px;
font-size: 16px;
font-weight: 600;
text-align: center;
text-decoration: none;
background-color: #007bff;
color: #ffffff;
border: none;
border-radius: 6px;
cursor: pointer;
transition: all 0.3s ease;
}
.btn-primary:hover {
background-color: #0056b3;
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0,0,0,0.2);
}
/* 배포 시 압축 (7KB) - 53% 감소 */
.btn-primary{display:inline-block;padding:12px 24px;font-size:16px;font-weight:600;text-align:center;text-decoration:none;background-color:#007bff;color:#fff;border:none;border-radius:6px;cursor:pointer;transition:all .3s ease}.btn-primary:hover{background-color:#0056b3;transform:translateY(-2px);box-shadow:0 4px 8px rgba(0,0,0,.2)}
사례 4: 코드 리뷰 준비
// 팀원이 보낸 엉망인 코드
const data=users.filter(u=>u.age>18).map(u=>{return{name:u.name,email:u.email,age:u.age}}).sort((a,b)=>a.age-b.age);
// 포매터로 정리
const data = users
.filter(u => u.age > 18)
.map(u => {
return {
name: u.name,
email: u.email,
age: u.age
};
})
.sort((a, b) => a.age - b.age);
// 이제 리뷰하기 쉬워요!
프로 팁 모음
💡 팁 1: 개발과 배포 파일 분리
project/
src/ # 개발용 (포맷된 코드)
├─ utils.js # 보기 좋게 정리
├─ api.js
└─ styles.css
dist/ # 배포용 (압축된 코드)
├─ utils.min.js # 압축된 파일
├─ api.min.js
└─ styles.min.css
개발할 때는 src/에서 작업하고, 배포할 때만 압축해서 dist/에 저장하세요.
💡 팁 2: Source Map 활용
압축된 코드는 디버깅이 어려워요. Source Map을 함께 생성하면 원본 코드와 매핑돼요.
// app.min.js (압축됨)
function a(b){return b*2}
// app.min.js.map (매핑 파일)
// 브라우저가 원본 코드를 보여줌
function double(number) {
return number * 2;
}
💡 팁 3: 조건부 주석 보존
라이선스나 중요한 주석은 보존하세요.
/*!
* Copyright 2024 MyCompany
* Licensed under MIT
*/
function myFunction() {
// 일반 주석은 제거됨
return true;
}
// 압축 후 (/*! ... */ 형식의 주석은 유지)
/*! Copyright 2024 MyCompany. Licensed under MIT */
function myFunction(){return !0}
💡 팁 4: Gzip과 함께 사용
압축 후 서버에서 Gzip도 적용하면 더 큰 효과!
원본 파일: 100KB
→ Minify: 35KB (65% 감소)
→ Gzip: 12KB (88% 감소!)
서버 설정:
## Nginx
gzip on;
gzip_types text/css application/javascript;
💡 팁 5: 자동화 도구와 연계
// package.json
{
"scripts": {
"format": "prettier --write 'src/**/*.js'",
"build": "npm run format && webpack --mode production"
}
}
CI/CD 파이프라인에 포매팅과 압축을 자동으로 포함하세요.
💡 팁 6: 성능 테스트
압축 전후 실제 로딩 속도를 측정하세요.
Chrome DevTools 사용
- Network 탭 열기
- 캐시 비우기
- 페이지 새로고침
- 파일 크기와 로딩 시간 확인
압축 전
- main.js: 150KB, 1.2초
압축 후
- main.min.js: 50KB, 0.4초
- 3배 빨라짐!
💡 팁 7: 주의사항
압축하면 안 되는 경우
- 이미 압축된 파일 (.min.js)
- 외부 라이브러리 (CDN 사용)
- 개발/디버그 환경
압축 전 꼭 백업
- 원본 파일은 항상 보관
- 버전 관리 시스템 사용 (Git)
자주 묻는 질문
Q. 포맷터와 Linter의 차이는?
A. 포맷터는 코드의 "모양"을 정리하고, Linter는 코드의 "품질"을 검사해요. 포맷터는 들여쓰기, 공백 등 스타일을 통일하고, Linter는 버그, 안티패턴, 코딩 규칙 위반을 찾아내요.
Q. 압축하면 원래대로 복원할 수 있나요?
A. 일부만 가능해요. 공백과 주석은 복원할 수 있지만, 축약된 변수명은 복원이 어려워요. 그래서 원본 파일을 꼭 보관해야 해요.
Q. 압축하면 코드 실행 속도도 빨라지나요?
A. 파일 다운로드 속도는 빨라지지만, 실제 실행 속도는 거의 동일해요. 브라우저가 파싱하는 속도가 약간 빨라질 수는 있어요.
Q. 모든 파일을 압축해야 하나요?
A. 아니요! CSS, JavaScript 같은 텍스트 파일만 압축하세요. 이미지, 비디오는 별도의 최적화 도구를 사용해야 해요.
Q. 압축된 코드도 SEO에 영향을 주나요?
A. 구글은 압축 여부를 직접적으로 평가하지 않지만, 페이지 로딩 속도는 중요한 SEO 지표예요. 빠른 로딩 = 더 나은 SEO!
Q. Source Map은 배포 시 포함해야 하나요?
A. 선택사항이에요. 디버깅이 필요하면 포함하되, 보안이 중요하면 제외하세요. 일반적으로 개발/스테이징에는 포함, 프로덕션에는 제외해요.
Q. 압축 후 코드가 동작하지 않아요!
A. 드물지만 압축 도구의 버그일 수 있어요. 1) 압축 레벨을 낮춰보세요. 2) 특정 함수/변수를 압축 제외 목록에 추가하세요. 3) 원본 코드에 세미콜론을 명시적으로 추가하세요.
관련 자료
도구를 바로 사용해보고 싶다면
다른 개발 도구들
웹 성능 최적화
프로젝트 시작이 처음이라면