Seokju Na
Beer Lover 🍺
@ JSConf Korea 2022
나석주
seokju-na
주문서
영수증
계산서
Thermal Printer
열전사 프린터
USB
시리얼포트
LAN
전원
이 씨리얼은 아는데...
-V
Tx
Rx
+V
0
1
0
0
1
0
1
1
1
0
1
1
0
0
1
0
1
1
1
0
1
1
0
0
1
0
1
1
1
0
0
1
1
1
시리얼 포트로 올바르게 통신하기 위해서
baudRate 값이 필수로 필요해요
"가ab"
UTF-8
EUC-KR
"가ab"
"ab"
Ascii
텍스트
인코딩
Uint8Array
0x61 | 0x62 |
a
b
0xB0 | 0xA1 | 0x61 | 0x62 |
가
a
b
0xEA | 0xB0 | 0x80 | 0x61 | 0x62 |
가
a
b
"Hello World!" 출력하기
아무 반응 없음...
😂
그 전까지는 프린터 버퍼에 쌓여요
=> 출력 커맨드는 무엇이죠? 🤔
명령어(ASCII) | 설명 | HEX |
---|---|---|
LF | 인쇄 및 개행 | 0x0A |
ESC @ | 프린터 초기화 프린터 버퍼를 클리어하고 프린터 모드 리셋 |
0x1B 0x40 |
ESC E n | 텍스트 강조 (bold) | 0x1B 0x45 ... |
GS k n | 바코트 출력 | 0x1D 0x6B ... |
GS V n | 용지 자르기 | 0x1D 0x56 ... |
... |
명령어(ASCII) | 설명 | HEX |
---|---|---|
ESC R n | 코드페이지 문자 셋 지정 | 예: (🇰🇷 n=13) 0x1B 0x52 0x0D |
그 외 다양한 명령어들
Imperative
Declarative
< Printer characterSet="euc-kr" />
왼쪽 정렬 텍스트
가운데 정렬 텍스트
< Text />
< Text align="center" />
< Image src="/image.png" />
< Line />
👆영수증 예시
환경
렌더되는 것
DOM
Native UI
소스 코드
ESC/POS
Command
환경 | 패키지 |
---|---|
DOM | react-dom |
iOS, Android | react-native |
터미널 | ink |
react-pdf | |
Thermal Printer | react-thermal-printer 😍 |
By Seokju Na
어느 날 가게에서만 봐왔던 POS를 만들게 되었어요! POS를 만들면서 주문/결제 과정에서의 복잡한 상태 관리, 결제 단말기, 영수증 프린터와 같은 하드웨어와의 연동 등 도전적인 과제가 많았어요. 그중 영수증을 출력하면서 어떤 어려움이 있었고, 어떻게 해결해나갔는지 여러분께 경험을 공유하고 싶어요.