티스토리 뷰



프린터는 모니터가 일반화 되기 이전의 컴퓨터 시스템에서는 컴퓨팅 결과를 확인할 수 있는 거의 유일한 출력 장치라 해도 과언이 아니었습니다. 프로그래머가 프로그램을 작성해서 펀치카드 리더기등의 입력장치로 프로그램을 로딩시켜 실행한 결과는 양쪽에 구멍이 송송 뚫린 연속용지에 출력되어 프로그램의 실행 결과를 확인할 수 있었습니다.



초기의 프린터는 수동 타자기를 대신하는 방식으로 글자가 새겨진 자판이 먹지를 때려 종이에 글자가 찍히게 하거나, 글자가 볼록하게 새겨진 철판 밴드가 회전하는 과정에 메인 컴퓨터에서 전송된 신호에 따라 헤머가 먹지를 때려 종이에 글자를 출력하는 방식을 사용했습니다. 한번에 한줄 단위로 인쇄하기 때문에 라인 프린터라(Line printer) 불렀습니다. 해머가 먹지(리본)를 때리는 방식이기 때문에 시끄러울 뿐만아니라 주기적으로 먹지도 갈아주어야 하고 가끔 연속 용지가 엉킬때면 다시 정리하느라 애를 먹었던 기억도 있습니다. 

새겨진 글자를 해머가 때리는 방식에서 혁명적 발전 이룬것이 도트 매트릭스(Dot matrix) 프린터입니다. 글자가 새겨진 자판도 없고 철판 밴드도 없지만 헤더에서 핀으로 글자를 작은 점 형태로 구성하고 먹지를 때리는 방식으로 용지에 글자를 출력했습니다. 작은 점은 실제 핀(Pin)으로 대응되어 7핀부터 24핀까지 다양한 프린터가 등장했습니다. 도트 매트릭스 프린터 역시 여전히 리본(먹지)을 사용하여 때리는 방식을 사용하기 때문에 소음은 여전했습니다. 이후에 등장한 잉크젯 프린터와 레이저 프린터, 열전사 프린터등에서는 상상할 수 없는 소리였습니다. 도트 매트릭스부터 프로그래머에게는 신세계가 펼쳐졌는데 프린터의 폰트를 조정할 수도 있었고 무엇보다 큰 변화는 그래픽을 인쇄용지에 표현할 수 있게 된 것입니다. 

프로그래머의 입장에서 "인쇄"는 프린터라는 또 다른 컴퓨터 시스템과의 통신입니다. 초기 프린터는 RS-232C 직렬 통신으로 시작해서 병렬 포트를 통해서 프린터를 많이 사용했지만 지금은 USB 인터페이스가 대중화되었고 프린터와 TCP/IP 통신으로 여러 사용자가 프린터를 공유하는 방식도 일반화된 상태입니다. 컴퓨터와 프린터간의 통신 또한 프리터 제조 업체가 제공하는 프린터 드라이버를 통해서 이루어지기 때문에 결과적으로 프로그래머는 직접 USB 통신이나 직렬/병렬 통신 프로그램을 손대지 않고 인쇄 관련 API를 사용하는 것으로 간편하게 인쇄 작업을 수행할 수 있습니다.

현재 많이 사용하는 잉크젯이나 레이저 프린터의 경우에는 그래픽 표현이 자연스럽고 인쇄를 위해 프린터로 전달되는 데이터량 역시 상당하지만 라인프린터의 경우에는 문자 출력이 주용도 였기 때문에 프린터로 전달되는 데이터 역시 문자가 대부분입니다. 그런데 문자 코드 중에는 제어문자라 해서 눈에 보이지 않지만 프린터로 하여금 줄이동, 페이지 이동, 헤더 이동등의 동작을 하도록 지시하는 문자들이 있습니다. 아래는 아스키(ASCII)코드의 제어 문자 예제 입니다.

  • 7 : 벨소리, \a
  • 8 : 백스페이스(BS), \b
  • 9 : 탭(Tab), \t
  • 10 : 줄바꿈(Line Feed), \n
  • 12 : 페이지바꿈(Form Feed), \f
  • 13 : 헤더복귀(Carriage Return), \r
  • 27 : 에스케이프(ESC, Escape), \e

ESC(27) 문자의 경우 프린터별로 확장 기능을 제공하는데 사용하는 제어 문자로 프린터 상태를 초기화하거나 문자를 확대하는 등의 용도에 사용 했습니다. 


위의 그림은 HP의 PJL(Printer Job Language)에서 프린터 제어판의 설정을 바꾸는 예제로 이때도 <ESC>문자가 PJL을 지시하는 문자로 사용되고 있습니다. 위와 같은 명령이 프린터로 전달되면 프린터는 즉각적으로 해당 명령을 수행합니다. 그런데 이와 같은 프린터 사용 형태는 잉크젯 프린터의 등장과 함께 큰 변화를 겪습니다. 인쇄 과정에 색상이 포함되고 도표와 그림이 포함되는 등 단순 문자 출력에서 벗어 납니다. 1984년 HP가 PCL(Printer Command Language)을 발표하고 현재 PCL6(PCL XL)까지 발표되어 업계 전반적으로 표준처럼 사용하고 있는데 PCL6에는 단순 비트맵을 넘어서 벡터 그래픽 표현도 포함되어 있습니다. 아래는 PCL의 예제입니다.


PCL 또한 <ESC> 제어 문자로 시작하고 있음을 확인할 수 있습니다. 

PCL 예제를 살펴보면 알수 있지만 복잡한 그래픽 표현 조차 프로그래머가 직접 프린터에 전달하기에는 무리가 있습니다. 현실적으로는 화면에 문자를 출력하고 도표를 드로잉하고 사진을 출력하는 것과 거의 동일한 작업을 프린터에 대해서 수행하면 시스템과 프린터 드라이버가 알아서 인쇄를 수행합니다. 프로그래머가 직접 PCL을 다룰 일은 거의 없다는 것입니다. 

프로그래머 입장에서는 사전에 프린터 출력의 특성을 먼저 정의 해야 합니다.

  • 로그 프린터 : 발전소나 지진 감시 시설 처럼 실시간 기록을 인쇄 형태로 로깅하는 경우 여전히 라인프린터와 연속 용지를 사용해서 기록을 남기고 있습니다. 이런 출력의 경우에는 문자 중심이므로 단순 파일 출력처럼 단순하게 처리할 수 있습니다.

  • 범용 프린터 : 프린터의 종류와 드라이버와 무관하게 동작하도록 해야 하므로 시스템에서 제공하는 API에 의존적으로 프로그램을 개발해야 합니다. 프로그래머의 입장에서 프린터 종류를 신경쓰지 않아도 되고 접속 방식 또한 프로그램에서 다룰일이 없습니다.

  • 특수 프린터 : 금융 기관에서 사용하는 통장프린터, 라벨 프린터, 열전사 프린터등 다양한 프린터에 대하여 해당 프린터에 의존적인 프로그램 개발이 될 수 밖에 없습니다. 프린터 제조사의 매뉴얼을 참조해서 양식과 출력 방식등을 조정합니다. 프로그램에서는 지원하는 프린터 종류를 한정해야만 합니다. 



댓글
댓글쓰기 폼