나무모에 미러 (일반/밝은 화면)
최근 수정 시각 : 2025-10-28 12:28:36

BOM

1. 개요2. Byte Order Mark3. Browser Object Model4. Bill Of Material5. Boys Of MNH

1. 개요

단어 또는 약어가 BOM 인 것들을 다루는 문서

2. Byte Order Mark

바이트 순서 마크(표식). BOM.

문서 파일 맨 앞에 특정 바이트들을 표식해 어떤 인코딩인지 식별할 수 있게 한다. 프로그램이 문서 파일 읽어들일 때 우선 BOM을 보고 인코딩 방식을 인식해 해석하게 된다. 각 인코딩별 BOM은 다음과 같다.
UTF-8: EF BB BF
UTF-16 Little Endian: FF FE
UTF-16 Big Endian: FE FF
UTF-32 Little Endian: FF FE 00 00
UTF-32 Big Endian: 00 00 FE FF
이 BOM 표식 뒤에 실제 문자 데이터들이 오게 된다. UTF-8 인코딩의 경우 워낙 대세가 되어서인지 요즘은 BOM을 붙이지 않는 경우도 굉장히 많다. 그래서 원래 BOM이 붙지 않는 ANSI 방식과 구별해야 하는데 보통 데이터 무결성 검사하듯이 문자 데이터들이 UTF-8 인코딩 법칙대로 구성되었는지 하나하나 검사해 위배된게 없으면 UTF-8 인코딩으로 판단한다.

바로 아래 단락은 작성자가 UTF-16 방식의 BOM에 대해서 설명해 놓은 것으로 보인다.
유니코드 문자 U+FEFF를 쓴다. 인코딩 방식에 따라서 FF FE로 표기하기도 하나, 실제로 해석할 때에는 U+FEFF로 읽는다. 그리고 U+FFFE[1]에는 문자가 처음부터 배당되지 않았기에, U+FFFE가 실제로 쓰일 일은 없어서 U+FEFF가 U+FFFE와 혼동될 여지가 앞으로도 없다.' 정식 이름은 ZERO WIDTH NO-BREAK SPACE이다. 공백의 일종이지만 원래 용도 대신 BOM으로 쓰며, zero width non-breaking space의 역할은 U+2060인 WORD JOINER가 대신한다. 좀 뜬금없지만 유니코드에서 BOM이 포함된 블럭은 아랍 문자용 블럭인 Arabic Presentation Forms-B이다. 당연하지만 BOM은 아랍 문자와는 아무런 상관이 없다. 이 문자는 보통 UTF-16으로 된 파일의 엔디언이 올바르게 판단될 수 있도록 하기 위해서 파일의 맨 앞에 삽입된다. 실제로 UTF-16의 처리 방식은 순서에 따라 빅 엔디언(big endian, BE)과 리틀 엔디언(little endian, LE) 2가지가 있다. 두 방식 다 나름의 장점이 있기 때문에 아직도 둘 다 쓴다. CPU의 데이터 처리 방식이 빅 엔디언인 것도 있고 리틀 엔디언인 것도 있어서 CPU에 맞게 처리하는 것이 좀 더 자연스럽기도 하고.'''''

UTF-8은 엔디언 문제가 없기 때문에 BOM이 필요하지 않다. 유니코드 표준에 의하면 UTF-8 파일에 BOM을 쓰는 것이 허용되기는 하지만, 쓰지 않을 것을 권장한다.

일부 프로그램에서는 UTF-8 방식으로 인코딩된 EF BB BF BOM을 이용하여 UTF-8인지를 감지하기도 한다. 이것이 없으면 기존의 완성형(및 각 언어별 코드페이지) 형식 문서로 간주하는 것. 파일의 내용을 통해 UTF-8 인코딩인지 아닌지를 감지할 수도 있지만 잘못 감지하는 경우도 있고, BOM만으로 감지하는 프로그램도 있다 보니 UTF-8 문서에도 BOM을 넣어두는게 편한 게 사실이다. Windows 쪽 에디터 프로그램들은 BOM이 없으면 UTF-8이라는 것을 인식하지 못하는 경우가 종종 발생한다. Visual Studio에서는 소스 파일의 인코딩을 UTF-8 BOM으로 설정하면 한글이 정상 출력되지만, UTF-8으로 설정하면 파일을 ANSI로 인식해 에디터와 콘솔에서 한글이 전부 깨진 채로 나온다.

그런데 일부 프로그램에서는 UTF-8로 저장할 때 자동으로 BOM을 넣기도 한다. 대표적으로 BOM을 자동 삽입하는 텍스트 에디터가 Microsoft Windows의 보조 프로그램인 메모장이다. 다만 Windows 10 1903부터 기본 인코딩이 기존의 ANSI(=MBCS)에서 BOM 없는 UTF-8으로 바뀌었으며, 저장 시에 BOM을 붙일지 선택할 수 있게 바뀌었다.

거꾸로 BOM이 문제를 일으키기도 한다. UTF-8이 거의 기본으로 쓰이는 유닉스 계열 OS에서 이런 문제가 많은 편인데, PHP의 경우 읽어들이는 내용이 PHP 소스로 되어 있으면 PHP로 실행하기 시작하고, 일반 텍스트로 되어 있으면 텍스트로 읽어들이기 시작하는데 PHP는 BOM을 인식하지 못한다. 그래서 일반 텍스트로 알고 보냈는데 하필 BOM으로 시작하는 바람에, PHP가 시작되니 오작동을 일으키는 것. 유닉스 계통 컴파일러(GCC, LLVM/Clang 등)에서도 UTF-8에 BOM을 붙여 저장한 파일의 경우 BOM의 존재로 인하여 오작동을 일으킬 수도 있다. 이외에 텍스트 파일을 합칠 때 애로사항이 생길 수 있는 등, 개발자 입장에서는 BOM을 자동으로 넣어주는 프로그램이 오히려 욕먹는다. 이런 경우 저장 시 BOM을 추가할지 말지 선택할 수 있는 에디터 또는 IDE로 문서를 저장해야 한다. Notepad++, IntelliJ IDEA, Visual Studio Code, EditPlus 등의 개발 툴은 UTF-8에 BOM을 추가할지 여부를 선택할 수 있다.

3. Browser Object Model

자바스크립트에서 브라우저 관련 기능을 조작할 수 있게 만든 객체 모델. window라는 객체로 접근하여 사용할 수 있다.

4. Bill Of Material

자재명세서. 구매해야 할 부품 등을 하나로 모아놓은 주문 명세서. 기업에 따라 /비오엠/ 또는 /봄/ 이라 발음한다.

제품을 제작할 때 들어가는 부품에 대해서 전부 작성한 표이다. 간단한 나무 책상을 만들 때 상판은 1개, 다리와 나사가 각각 4개씩 필요하다고 해 보자. 실제로 제작할 때, 도면에 표기된 부품을 일일이 찾아서 필요한 수량을 확인할 수도 있겠지만 부품 리스트만 간단하게 정리해 둔다면 편리하고 오류도 줄일 수 있을 것이다. 상판x1, 다리x4, 나사x4 라고 정리한 리스트가 가장 기본적인 BOM이라고 할 수 있다.

자동차나 스마트폰, 항공기 등 매우 복잡한 기계를 제작하게 되면 각 부품의 소요수량을 파악하는 것이 매우 어려워지고, 정확한 BOM을 작성하는 것이 매우 중요해진다. 현대 아반떼 100대를 만들 때 M10 나사를 몇개를 주문해야 할까? 도면만 보고 필요한 나사의 개수를 판단하는 것은 말도 안 되는 일이다. 도면을 작성한 설계자가 ‘우리 부품에는 어떤 부품이 몇 개 들어가요~’ 라고 정리해 줘야 부품을 구매하고, 생산을 운영할 수 있게 되는 것이다.

산업군 및 기업에 따라 다르지만 BOM에는 일반적으로 부품번호, 부품명, 부품수량, 상세사양, 중량 등이 작성된다. “레벨“이라는 개념이 있는데 상위 레벨의 서브 어셈블리(Sub-Assembly)를 조립하기 위한 구성 부품을 나타내는 것이다. 간단한 예시를 들면 다음과 같다.
레벨 부품번호 부품명 수량 단위
0 10001 스마트폰 어셈블리 1
1 20001 OLED 어셈블리 1
2 21101 OLED 패널 1
2 30001 커버 글래스 1
2 71234 테이프 30 mm
1 40001 배터리 어셈블리 1
2 41101 배터리 팩 1
2 71234 테이프 20 mm

1레벨만 보면 스마트폰 어셈블리를 만들 때 1개의 OLED 어셈블리와 1개의 배터리 어셈블리가 필요하다는 것을 알 수 있다. OLED 어셈블리를 만들 때에는 2레벨의 OLED 패널 1개, 커버 글래스 1개, 테이프 30mm가 필요하고, 배터리 어셈블리를 만들 때에는 2레벨의 배터리 팩 1개와 테이프 20mm가 필요하다는 뜻이다. 2레벨에 있다고 해서 배터리 팩이 OLED 어셈블리를 만들 때 필요한 게 아니다!

이 BOM만 보고도, 스마트폰 1대를 만드려면 부품번호 71234 테이프가 50mm 필요하다는 것을 알 수 있다. 각 부품의 단가와 중량도 작성한다면 이 제품의 총 원가와 설계중량도 쉽게 계산할 수 있을 것이다. 그냥 다 더하면 되니까

일반적으로 도면을 작성하는 설계팀에서 BOM을 관리하게 된다. BOM을 기준으로 원가, 중량을 산정하고 부품을 발주하기 때문에 도면만큼 중요한 것이다! 항상 도면에 작성된 부품이 모두 BOM에 정확하게 반영되었는지, 반대로 중복으로 들어간 부품은 없는지 정확하게 확인해야 한다. 잘못 작성하면 생산이 정지되어 말 그대로 라인이 서버리는 일이 발생할 수도 있다. 그게 양산라인이라면...

5. Boys Of MNH

MNH엔터테인먼트에서 런칭한 첫번째 보이그룹으로, Boys Of MNH를 줄인 BOM이라는 이름으로 공개되었다가 2023년 1월 8TURN이라는 팀명으로 데뷔했다.


[1] U+FFFE - U+FFFF 영역은 비문자(Noncharacter)로 지정되어 영구적으로 어떠한 문자도 배당되지 않는다.