데스크톱 PC 몇 대와 모바일 기기 몇 대를 왔다갔다 하면서, 어느 한 쪽에서 북마크(즐겨찾기)해둔 것이 다른 쪽에서도 똑같이 기록되어 있으면 좋겠죠. 그것도 같은 브라우저끼리 말고, 데스크톱 크롬과 모바일 오페라가 동기화되면 좋겠습니다. 오늘은 북마크 동기화 방법을 정리해봤습니다.
같은 종류의 브라우저끼리 북마크 동기화
다행히 요즘 브라우저들은 기본적으로 같은 벤더의 브라우저끼리는 북마크, 로그인 정보, 확장 프로그램 정보 등을 다 동기화 해줍니다. 방법도 그리 어렵지 않습니다. 대부분은 그냥 해당 브라우저에서 제공하는 계정에 로그인하면 알아서 여러 대의 데스크톱과 모바일 기기에 동기화를 해줍니다.
오래 전에는 브라우저의 북마크 관리를 위해 소위 소셜 북마크 서비스라 할 수 있는 del.icio.us (현재는 서비스 중단), 거기에 노트나 하이라이트 기능 등을 추가한 diigo를 썼습니다. 그러다가 클라우드에 북마크를 저장해주는 Google Bookmarks (현재는 서비스 중단)를 잠깐 썼습니다. 그리고 여러 브라우저간에 북마크를 동기화해준다는 xBrowserSync를 써보기도 했습니다. 이런 서비스는 그다지 수요가 많지 않아서인지, 대부분 중단되었습니다. 현재는 xBrowserSync가 오픈 소스이며, 빅테크 회사들처럼 많은 정보를 수집해가지 않는 무료 서비스로 남아있는데, 문제점이 좀 있습니다. 서로 다른 종류의 브라우저 사이에 북마크 동기화를 지원하는 대신, 같은 종류의 브라우저 북마크 동기화 기능을 꺼야 하고, 동기화 총 용량이 제한적인 몇 개의 퍼블릭 서비스 서버 중에 하나를 골라야 합니다. 마지막으로, 위의 서비스들 대부분이, 브라우저에 내장된 북마크 추가, 삭제, 관리 기능과는 조금 다른 사용자 인터페이스를 사용하는 것도 잘 쓰지 않게 되는 요인이었습니다.
결론: EverSync
저의 욕구는 단순합니다. 그냥 여러 대의 데스크톱과 모바일 기기, 그리고 서로 다른 종류의 브라우저(크롬, 엣지, 파이어폭스 등등) 상관없이 똑같은 북마크를 쓰고 싶은 것입니다. 브라우저의 고유한 북마크 관리 기능은 그냥 건드리지 말고, 그대로 사용했으면 좋겠습니다. 그래서 결국에는 에버씽크(Eversync)라는 프로그램을 쓰게 되었습니다. 크롬 확장(크롬, 엣지, 오페라, 비발디, 웨일 등) 프로그램과 파이어폭스 애드온 프로그램이 있으니, 사실상 거의 모든 브라우저를 커버합니다.
확장 프로그램을 데스크톱의 모든 브라우저에 설치합니다. 그리고 아래와 같은 동기화 옵션을 이용해서 동기화를 한 번만 시켜주면, 나중에는 알아서 추가 동기화가 됩니다. 모바일 브라우저는 원래, 같은 종류의 데스크톱 브라우저와 동기화가 되므로, 이제 내가 쓰는 모든 브라우저의 북마크 동기화가 됩니다.
everhelper.me/client 사이트에서 북마크를 직접 관리하고 수정할 수도 있습니다. 제가 유용하게 썼던 기능은, 중복 북마크 찾아서 제거하기와 빈 폴더 찾아서 제거하기였습니다.
PDF 문서에 전자 서명을 추가하려고 합니다. 여기서 말하는 전자 서명은 우리가 종이에 서명(싸인)하는 것을 단지 전자 문서상에서 싸인하는 것입니다. 이런 전자 서명도 법적 효력이 있습니다. 하지만 발신자의 신원 증명 등을 위해 암호 키와 공개 키를 사용하는 디지털 서명과는 다른 이야기입니다.
상대방이 쉽게 전자 서명할 수 있도록 도와주고, 서명이 포함된 계약서를 관리하는 상용 솔루션은 아주아주 많습니다. 서명 및 계약서를 일대일로 주고 받거나, 다수에게 배포할 수 있습니다. 이런 솔루션들은 PDF 파일 내에 전자 서명이 가능하도록 별도의 필드를 제공합니다. 문서 수신자가 어디에 어떻게 서명해야 할 지 몰라도, 서명란을 쉽게 알 수 있고, 그 자리에서 서명을 추가할 수 있습니다. 그리고, 그 이후 워크플로우가 연계되어, 서명 문서를 클라우드에서 관리하는 방식입니다.
오늘의 시나리오는, 입력 및 서명이 필요한 양식 문서를 PDF로 받았는데, 전자 서명을 전혀 고려하지 않은 문서일 경우입니다. 단지 서명을 추가하기 위해서 인쇄하고, 종이에 서명하고, 다시 스캔하는 번거로움을 겪을 수는 없잖아요? 모양만 있는 서명란에, 서명을 해야 하는 "최종 사용자" 입장에서, 간단하게 전자 서명을 무료로 추가하는 방법을 알아봅니다.
1. 어도비 애크로밧 리더(Adobe Acrobat Reader) (거의 모든 OS에서)
이게 꼭 있어야만 PDF 파일을 볼 수 있다고 생각하는 분들이 많아서, 아마도 대부분의 PC / 맥 / 안드로이드 / 아이폰 사용자들이 가지고 있는 프로그램일 것입니다. 어도비 애크로밧 리더는 무료이며, 기본적으로 PDF 파일을 열어서 보고, 주석을 달거나, 양식(form)을 채우고, 서명을 추가할 수 있습니다.
방법도 간단합니다. 서명을 넣고 싶은 위치에 포인터를 클릭하고, 메뉴에서 Fill & Sign을 선택합니다. 서명을 넣는 방법은 직접 그려넣기, 이니셜을 영어로 타이핑하기, 또는 기존에 스캔받은 이미지를 가져오기가 있습니다. 이렇게 사용된 서명은 어도비 클라우드에 저장이 되어서 모바일이나, 다른 PC에서도 사용할 수 있습니다. 또 서명된 문서는 어도비 싸인이 인증하고, 읽기 전용 문서로 바뀌어 사본 또는 링크를 상대방에게 보낼 수 있습니다.
2. PDF24 (클라우드 또는 윈도우즈 환경)
생각보다 덜 알려져 있는데, PDF24는 개인과 기업에서 100% 무료로, 아무런 제한 없이 사용할 수 있는 훌륭한 PDF 도구입니다. 프린터 드라이브, 합치기, 나누기, 회전, 변환, 페이지 정렬, 편집 등 수많은 기능들이 있는데, 그 중에 서명 기능도 아주 요긴합니다. 윈도우즈용 PDF24 프로그램을 다운로드받아도 되고, 아니면 그냥 PDF24 온라인 서비스를 이용해도 됩니다. 도구 모음에서 "PDF 파일에 서명" 아이콘을 선택하고 원하는 파일을 열면, 바로 서명 도구가 있습니다. 직접 서명을 그리거나, 파일을 올리거나, 또는 카메라로 서명을 찍을 수 있습니다. 애크로밧 리더가 설치되어 있지 않거나, 클라우드에 로그인하는 것이 부담스러울 때, PDF24 온라인 서비스는 좋은 대안이 될 것입니다.
3. 맥의 미리보기 (macOS)
맥(Mac)에서는 내장된 미리보기(Preview) 프로그램에서 PDF 파일에 바로 서명을 추가할 수 있습니다. PDF 파일을 미리보기로 연 상태에서, 마크업 도구 막대 보기 버튼을 클릭한 다음(마크업 도구 막대가 보이지 않는 경우) 서명 버튼을 클릭하면 서명을 추가할 수 있습니다.
서명을 추가하는 방법은 세 가지인데, 트랙패드에서 직접 그리기, 카메라로 찍어 올리기, 마지막은 아이폰/아이패드와 연계해서 서명 올리기가 가능합니다. 애플 지원 사이트를 참조하시거나, 전자 서명 방법을 자세히 안내한 잣폼 사이트를 참조하십시오.
마이크로소프트 365 앱은 워드, 엑셀, 파워포인트 등을 모바일에서 보고, 편집 가능한 통합 오피스 앱입니다. 당연히 원드라이브와도 연동되고, 좋은 것은 PDF 편집, 양식 채우기, 그리고 서명 추가가 가능하다는 점입니다. 모바일이기 때문에 오히려 데스크톱에서보다 자연스러운 서명을 추가할 수 있지요. PDF 파일을 불러와서 더보기 메뉴에 보면, "PDF 서명" 메뉴가 있습니다. 그러면 아래 그림처럼 PDF 파일의 원하는 위치에 서명을 넣을 수 있습니다.
출력을 염두해서 만들어진 PDF 파일이라도, 요즘 프로그램들은 알아서 입력 양식을 찾아서 상당히 간편하게 양식 값을 넣을 수 있게 해줍니다. 그리고 전자 서명을 고려하지 않고 만들어진 문서라도, 출력하고, 스캔하는 번거로움 없이 서명을 추가할 수 있습니다. 요약하면, 데스크톱에서는 어도비 애크로밧 리더 또는 맥에 내장된 미리보기 프로그램을 이용합니다. 모바일 환경에서는 어도비 애크로밧 리더 또는 마이크로소프트 365를 이용합니다. 그냥 아무 환경에서나 브라우저가 있다면 PDF 24의 PDF 서명 도구를 이용하면 됩니다.
요즘 많은 노코드 툴들이 그러하듯이, 에어테이블(Airtable)에도 강력한 자동화(automations) 기능이 있습니다. 즉, 여러 앱들간의 프로세스를 엮어주는 재피어(Zapier)나 메이크(Make) 등을 쓰지 않아도, 상당한 수준의 워크플로우 자동화를 구축할 수 있습니다. 저의 개인적인 경험으로는 재피어나 메이크는 트리거(trigger)나 액션(action)을 정의할 때, 앱 내부의 동작을 세부적으로 정의하는 데에는 좀 한계가 있었습니다.
강사들은 조직 내부 구성원이 아니므로, 이벤트를 까먹지 않고 준비하도록 별도의 안내를 보내려고 합니다. 10일 전 안내, 3일 전 안내, 하루 전 안내 등 필요한 시기에 안내를 메일이나 문자로 보내주면 좋겠지요. 이번 예시에서는 하루 전에 자동 안내 메일을 보내봅니다.
자동화할 작업 정의 및 시작하기
무엇을 자동화할 것인지 명확히 하는 게 좋겠죠. 날마다 있는 행사에서 일일이 안내 메일을 보내기 어려우니, 정확히 하루 전에 행사 담당 강사에게 자동으로 행사 안내 메일을 보내기로 합니다. 에어테이블에서 자동화 시작은, 화면 왼쪽 위에 베이스 이름 옆에 [Automations]를 누르면 시작합니다. 참고로, [Data]는 기본적으로 테이블과 컬럼을 만들고, 데이터를 추가하는 곳이고, [Interfaces]는 데이터 시각화 툴입니다.
트리거(trigger) 설정
가장 간단한 자동화는 트리거 하나와 액션 하나로 구성됩니다.
트리거는 자동화를 일으키는 조건입니다. "만약 행사가 다음 날 있으면, 안내 메일을 보내라!"라는 자동화에서, "만약 행사가 다음 날 있으면"이라는 것이 바로 트리거입니다.
에어테이블 트리거 유형(trigger type)은 주로 다음과 같은 것들이 있습니다.(물론 그 밖에 외부 앱과 직접 연동되는 트리거도 있습니다.)
트리거 조건을 만족하면, 무엇을 시킬 것인가가 바로 액션이죠. 우리는 강사에게 메일을 보냅니다. 다음과 같은 액션 유형(action type) 중에 Send email을 고르면 됩니다.
Send email
메일을 보낸다.
Create record
새로운 레코드를 생성(추가)한다.
Update record
기존 레코드 값을 변경한다.
Find records
(조건에 맞는) 레코드를 찾아낸다.
Run script
스크립트를 실행한다.
이 밖에도, 에어테이블에서 직접 슬랙이나 마이크로소프트 팀즈에 메시지를 보낸다든지, 구글 캘린더, 구글 시트, 지라 등에 내용을 추가하는 등의 액션 유형도 있습니다.
메일을 보내기로 했으니까, 수신자, 주제, 메일 내용과 같은 필수값들을 설정해주면 됩니다. 물론 데이터베이스에서 특정 필드를 변수로 포함시킬 수 있습니다. 특정 필드값을 변수로 사용하기 위해서는 파란색 ⊞ 버튼을 누르고, Insert value from field 목록에서 원하는 필드명을 고르면 됩니다.
액션에 대한 레이블(label)은 "강사 안내 메일"로 설명을 넣어줍니다.
수신자에는 {강사 메일}이라는 이메일 주소값 필드를 넣어줍니다.
메일 제목은 아래와 같이 작성했습니다.
다음 날({시작일}) {이벤트} 안내
메일 내용에는 간단히 아래와 같이 세 개의 필드를 포함시켰습니다.
{강사}님, 안녕하세요?
{시작일}에 {이벤트}이/가 시작되어요.
미리 준비하시고, 당일날 늦지 않게 와주세요.
감사합니다.
테스트 및 미리 보기
이제 트리거와 액션을 만들었으니, [Generate a preview] 버튼을 눌러 메일 모양이 어떻게 나올지 확인해봅니다. 또는 [View results] 버튼을 눌러 자동화 실행 결과가 성공적인지 확인해봅니다.
활성화(activate)
마지막으로 방금 만든 자동화가 아직 비활성화(inactive) 상태이므로, 활성화(active) 상태로 바꿔줍니다.
이제 다 되었습니다. 앞으로는 운영자들이 일일이 사전 안내를 하지 않아도, 담당 강사에게 하루 전 메일이 자동으로 나갑니다. 물론 이 예시에서는 극단적으로 간단한 조건들을 사용했지만, 보다 복잡한 조건, 복합 트리거, 복합 액션, 조건부 분기 액션을 만드는 것도 크게 어렵지 않습니다.
에어테이블(Airtable)은 기본적으로 관계형 데이터베이스입니다. 요즘에는 비정형 데이터와 빅데이터가 부상하면서 NoSQL 데이터베이스도 많이 쓰이지만, 여전히 관계형 데이터베이스는 매우 중요합니다. 에어테이블을 사용하기 위해 데이터베이스의 개념이나 질의 언어인 SQL을 알 필요는 전혀 없습니다. 그러나, 기존에 SQL을 조금이라도 써왔던 분들은, SQL과 연관시켜서 에어테이블의 주요 개념들을 좀 더 쉽게 이해할 수 있을 것입니다.
에어테이블에서 한 개의 데이터베이스를 베이스(base)라고 부릅니다. 그리고 베이스 안에는 여러 개의 테이블(table)을 담을 수 있습니다. 다시 테이블은 여러 개의 다른 방식으로 표현된 뷰(view)를 가질 수 있습니다. 이 때 기본적으로 테이블과 테이블이 관계를 맺으면(에어테이블에서 link to라고 표현함. SQL에서 말하는 join), 현재의 테이블에 관계 맺어진 다른 테이블의 값을 불러오거나(lookup), 가져와서 요약 정리하거나(rollup), 갯수를 셀 수(count) 있습니다. 이 글에서는, 관계형 데이터베이스를 설명하려는 것은 아니므로, 간단히 에어테이블에서 이런 것들이 어떤 필드로 표현되는지, 그것을 SQL로 표현하면 어떻게 대응되는지만 살펴봅니다.
어떤 예제로 설명을 해야 하나 고민하다가, 그냥 제가 개인적으로 사용하고 있는 독서 목록이라는 베이스를 사용하기로 했습니다. 읽은 책들을 정리하기 위한 베이스의 구조는 아주 간단합니다. 책 목록과 작가 목록 두 개의 테이블로 되어 있고, 책의 저자가 작가의 이름과 연결(link)되어 있습니다. 책 목록에 같은 작가가 쓴 책이 여러 권 있을 때, 작가 이름을 매번 새롭게 치는 것이 아니고, 작가 테이블에서 불러온다는 것입니다.
실제로는 아래 두 개의 테이블명과 필드명으로 한글을 사용했습니다. 다만, 일반적인 데이터베이스에서 한글을 테이블과 필드 이름으로 사용하는 데에는 제약이 따르므로, 여기 예시에서는 편의상 영문으로 합니다.
Books 테이블 구조
필드명
필드 유형
비고
Book_title
Single line text
Primary field
Author
Linked records
저자 테이블과 연결
Rating
Rating
1점~5점
About_author
Lookup
저자 테이블에서 인물소개 값을 참조
Authors 테이블 구조
필드명
필드 유형
비고
Author_name
Single line text
Primary field
Description
Long text
저자에 대한 소개글
Books
Linked records
해당 저자가 쓴 책 목록. 책 테이블과 연결
N_of_books
Count
이 작가의 책이 책 테이블에 몇 개 있는지 셈
Average_rating
Rollup
이 작가가 쓴 책의 평균 별점 계산
Linked records 필드
에어테이블 확장 프로그램인 Base schema를 이용해 독서 목록이라는 베이스의 스키마를 시각적으로 표현한 그림. 두 테이블 사이에 Linked records 필드만 보여주도록 설정한 경우
Linked records 필드는 두 개의 테이블을 연결하는 것입니다. Books 테이블에서 저자는, Authors 테이블에 있는 저자명과 연결됩니다. 에어테이블에서는 한 테이블에서 Link to 필드를 만들면, 자동으로 다른 테이블에도 Link to 필드가 생깁니다. 다시 말해, Books 테이블의 저자를 Authors 테이블의 저자명과 연결하면, 거꾸로 Authors 테이블에는 Books 테이블의 책이름과 연결되는 Link to 필드가 자동 생성되어, 해당 저자가 쓴 책 목록이 모두 표시됩니다. Books 테이블에서는 글쓴이가 보여지는 방식을 SQL로 표현하면 다음과 같이 되겠지요.
SELECT b.book_title, a.author
FROM books b
INNER JOIN authors a ON b.author = a.author_name;
Lookup 필드
Lookup 필드는 연결된 다른 테이블에서 특정 필드 값을 조회해서 가져오는 것입니다. Books 테이블에서는 매번 저자의 인물 소개가 들어가지 않지만, Authors 테이블에서 Description의 값을 조회해서 보여주는 방식입니다.
SELECT b.book_title, b.author, a.description AS about_author
FROM books b
INNER JOIN authors a ON b.author = a.author_name;
Count 필드
에어테이블에서 Count라는 유형의 필드는 실제 SQL에서 count 함수를 쓰는 것과 비슷합니다. 아래 쿼리는 저자별로 Books 테이블에 몇 권의 책이 있는지 세어서 보여줍니다.
SELECT a.author_name, COUNT(*) AS n_of_books
FROM books b INNER JOIN authors a
ON b.author = a.author_name
GROUP BY a.author_name;
Rollup 필드
에어테이블의 Rollup 필드는 연결된 다른 테이블의 특정 필드를 요약해서 보여줄 때 사용합니다. 위에서 저자별로 여러 권의 책이 있고, 각 책들의 별점이 있는데, 저자별로 모든 책들의 별점의 평균을 보여주기 위해 Authors 테이블에 Rollup 필드를 넣었습니다. Rollup 필드는 평균 외에도, 합계, 갯수, 최대값, 최소값, 문자열 함수, 논리 함수 등 여러 가지를 사용해서 요약할 수 있습니다.
에어테이블의 평균별점 필드의 수식은 다음과 같이 정의됩니다. 별점이 있는 경우, 있는 레코드만 모아서 평균을 보여달라는 것이죠.
IF(values, AVERAGE(values))
SQL에서 저자와 저자별 별점 평균을 보여주려면 다음과 같이 하면 되겠죠. (소수 첫째 자리까지만)
SELECT a.author_name, ROUND(AVG(b.rating), 1) AS average_rating
FROM books b
INNER JOIN authors a ON b.author = a.author_name
GROUP BY a.author_name;
제가 겪은 실무에서는, 단순하게 lookup, rollup, count를 쓰기보다는 조건부(conditional) 필드를 사실 더 많이 쓰게 됩니다. 에어테이블에서는 상당히 직관적으로 코딩 없이 조건부 lookup, rollup, count를 사용할 수 있고, 그것에 따라 여러 개의 뷰를 만들 수 있습니다. 그리고 각각의 뷰에서 할 수 있는 일을 제한해놓습니다. 그러면, 데이터베이스나 프로그래밍에 대한 지식이 거의 없어도, 상당히 복잡한 업무 처리를 이것만으로 구현하게 됩니다.
초등학교 5학년 아이가 읽어보고, 내용과 단어가 너무 어렵다고 하여, 도움을 주기 위해 저도 읽어보았습니다. 제9회 문학동네 어린이 문학상 대상을 받은 작품이라니 어떤 작품일까 궁금하기도 했습니다.
아버지의 죽음
이야기의 배경은 조선 후기 천주학이 학문으로 들어오기 시작할 무렵에 서울입니다. 주인공 장이는 책을 필사하는 것을 업으로 삼은 아버지와 살고 있는 어린 소년입니다. 그런데 아버지가 천주학 책을 필사했다는 이유로 죽도록 맞아, 소년은 세상에 홀로 남겨질 것을 두려워합니다.
죄 없는 사람을 이 지경으로 만들어 놓다니...... 모진 놈들......
아버지에게 일감을 주었던 책방 주인 최 서쾌가 아버지가 죽기 전에 찾아와 이렇게 말합니다. 보편적인 사람의 상식과 정서에서 아버지는 죄 없는 사람이었고, 한 사람을 이 지경으로 만들어놓은 국가의 무자비한 폭력에 대해 탄식하는 것이지요. 그 시대에서 받아들일 수 없는 말과 행동을 하는 것이 국가가 보았을 때 죄가 됩니다. 그러나 통치자가 만들어놓은 합법의 테두리라는 것은 시대에 따라 달라지기도 합니다. 설사, 그 시대 기준으로 죄가 있다고 하더라도, 사람이 죽을만큼 맞는 것이 옳다고 할 수는 없습니다. 죄가 있다고 신체적인 형벌을 주는 일, 그리고 사람의 목숨까지 국가가 빼앗아가는 일이, 현대 사회에서는 이제 많이 사라져가고 있습니다. 얼마나 다행인 걸까요.
국가의 정책, 지배자의 통치 방향과 다르다는 이유로 조선 말기에 천주학과 조금이라도 관련이 되었다고 의심받는 것은 매우 위험한 일이었습니다. 그럼에도 불구하고, 서학을 접한 사람들은 더 많아집니다. 그리고 그들은 엄격하게 계급이 구분되어 날 때부터 귀한 사람과 천한 사람이 구분되는 신분 사회의 모순을 인식하게 됩니다. 이런 사람들의 생각과 정서를 따라가지 못한 국가는 가혹한 탄압을 행합니다. 왕조 시대와 식민지 시대를 거쳐서 민주 공화국이 되고, 절대적인 통치자, 왕에 의한 지배에서, 법에 의한 지배(rule by law) 사회가 된 우리 나라! 정말 많이 진보했습니다. 그러나, 그 법이 정의, 평등, 인권, 사상의 자유 등 인간의 이상을 반영하지 못한 상태에서, 법 통치자에 의해 잘못 휘둘러지는 경우는 없는지도 생각해봅니다.
혼자였던 장이를 도와주는 사람들
아버지가 돌아가시고, 최 서쾌의 도움으로 필사한 책 배달을 하게 된 소년, 장이. 이번에는 동네 불량배인 허궁제비에게 큰 괴롭힘을 당하고 난처한 처지에 빠집니다. 가족도, 도와줄 사람도 없는 장이는 혼자서 끙끙대며 힘들어합니다. 그러나, 장이는 고립무원의 약자가 아니었습니다! 가족이 없는 장이에게 일터를 주었던 최 서쾌, 도리원에서 만난 낙심이, 청지기 아저씨, 미적 아씨, 지물포 주인 오씨 등이 모두 합심하여 도움을 주었습니다! 최 서쾌는 이렇게 말합니다.
네가 감당할 수 없거든 도움을 청하란 얘기다....... 휴우.
도움을 제공한 장이
관아에서 다시 천주학 관련자를 대대적으로 색출하여 잡아가는 일이 벌어집니다. 이번에는 그동안 신분의 차이를 뛰어넘어 장이를 따뜻하게 대해주었던 홍 교리에게 장이가 큰 도움을 제공합니다! 많은 사람들과 부대끼며 살아가지만, 외로운 현대인들은 각자 도생의 세계로 더 깊이 들어갑니다. 그런데, 장이는 도움을 받고, 또 도움을 줄 수 있는 행복을 가졌습니다. 국가 폭력이 지금보다 훨씬 더 거대한 과거 왕조 시대로 결코 돌아가고 싶진 않습니다. 하지만, 이렇게 사람들이 어려울 때 서로 도움을 주고 외면하지 않는 것이 조상들의 보편적인 정서였다면, 현대인으로서 그런 옛날이 그리워지기도 합니다.
마무리
소년 장이의 성장 소설일 수도 있고, 조선 후기의 역사 소설일 수도 있습니다. 장이라는 순진한 어린이의 시선을 따라 책과 관련된 이야기가 담담하게 그려지면서, 책읽기를 권장하는 어린이 문학일 수도 있습니다. 이런 여러 성격을 다 갖고 있지만, 어느 것 하나 과함이 없습니다. 어린이들에게 책을 많이 보라고 강요하지도 않고, 역사가 너무 도드라지지도 않으며, 사회 문제를 직접적으로 제기하지도 않습니다. 이야기는 알차게 꽉 차 있지만, 이를 읽는 독자들에게는 각자의 생각과 느낌, 상상으로 채울 수 있는 여백이 아주 많습니다. 마지막으로, 이야기와 한 몸이 된 듯한, 아름답고 따스한 삽화가 없었다면, 책읽기의 즐거움이 반감되었을 것입니다.
온라인 양식(form) 생성 도구 중에 가장 세세한 기능과 옵션을 제공하는
잣폼(Jotform)이라는 서비스를
이용합니다. 잣폼에서는 온라인에서 PDF 양식을 직접 만들 수도 있고, 기존 PDF
파일을 불러와 온라인 폼과 연결시킬 수도 있습니다. 온라인 폼을 통해 받은
데이터를
잣폼 테이블(Jotform Tables)을 이용해 데이터베이스로 관리할 수 있고, 하나하나의 받은 데이터를 원래의 PDF
파일 형식으로 내보낼 수 있습니다.
1. 종이 PDF 양식 파일 준비
출력하여 종이로 입력받는 가상의 동아리 가입 신청서를 아래와 같이 PDF 파일로
준비하였습니다. 아래 그림을 선택하면, 여기에서 사용된 PDF 파일을 다운로드 받을
수 있습니다.
종이로 된 가입 신청서 양식 PDF
2. 잣폼에서 폼 생성하기
잣폼에 가입하고 처음 들어가면 My Forms 화면에서 [CREATE FORM] 버튼이 있습니다.
이것을 누르면, 어떤 방법으로 폼을 만들 것인지 물어봅니다. 미리 PDF 모양을
만들어놨으므로 Import Form 을 선택하고, Import PDF form 을 선택한 다음,
만들어놓은 PDF 파일을 불러옵니다.
Create Form 선택 Import Form 선택 Import PDF Form 선택
3. 온라인 폼과 PDF의 연결
PDF 파일 Import 완료된 모습. 이제 Add Form Element 버튼을 눌러 온라인 양식들을 만들기 시작한다.
불러온 PDF 파일을 보면서 잣폼에서 순서대로 양식 요소(Form Element)를
만들어줍니다. [Add Form Element] 버튼을 누르고 차례대로 폼을 생성합니다. 맨
처음에 '성명'은 'Short Text'로 생성하면 되겠지요.
Form Element중에 Short Text를 골라 성명 필드를 만든다.
왼쪽 온라인 폼 창에서는, "Type a question"이라고 뜬 폼 레이블에 "성명"을 입력합니다. 오른쪽 PDF 창에서는, 초록색 사각형 텍스트 필드가 PDF 파일 위에 나타납니다. 그것의 위치와 크기를
성명 옆에 갖다 놓습니다.
생성된 성명 필드를 PDF 파일의 성명란으로 옮긴다.
이어서 성별에 쓰이는 Single Choice 를 추가하고, 레이블을 "성별"로 입력합니다.
생성된 초록색 동그라미 버튼을 남, 여, 비공개 버튼에 각각 옮깁니다.
이런 식으로 휴대전화에는 다시 Short Text를, 회원 구분에는 Single Choice를,
가입경로에는 Multiple Choice를, 신청일에는 Date Picker를 추가합니다.
마지막으로 신청자 서명에는 Signature 폼을 추가합니다.
4. PDF Preview 및 온라인 폼 테스트
오른쪽 상단의 Preview Form 버튼을 누르면, 방금 만든 양식들을 온라인으로
테스트해볼 수 있습니다. 온라인으로 변환된 동아리 신청서에 값들을 넣어봅니다.
온라인과 연결 완료된 PDF 양식. 오른쪽 위 Preview Form을 눌러 데이터 입력 테스트를 할 수 있다.
양식 작성 후에는 Preview PDF를 통해, 내가 넣은 값들이 PDF 종이 신청서에 어떤
모양으로 들어갈지 미리 확인해볼 수 있습니다. 최종 제출(Submit) 버튼을 누르면
이제 테스트로 넣은 값이 들어갑니다.
입력 테스트 화면. 입력 후 Preview PDF를 누르면, PDF 종이 신청서에 값이 어떤 모양으로 들어가는지 확인 가능. Submit을 누르면 최종 제출 완료
데이터 입력 후 Preview PDF를 통해 확인한 PDF에 데이터가 입력된 모습
5. 최종 만들어진 폼을 공개(Publish)
이제 온라인 폼으로 만든 것을 상단 메뉴 중에 PUBLISH 를 선택해 공개적인 링크를
만듭니다. 이 링크를 홈페이지나 소셜 미디어에 올리면, 공개적인 신청/설문을 받을
수 있습니다.
PUBLISH를 선택하면, 공개적인 데이터 입력 링크가 만들어져 데이터 입력을 받을 수 있다.
여러분도 데이터 입력을 직접 테스트할 수 있습니다. 최종 제출 전에 Preview PDF를 선택하면, 내가 입력한 데이터가 PDF 양식에 어떻게 들어가는지 확인할 수 있고, 다운로드도 받을 수 있습니다. 입력 양식 안에 이메일 필드가 있는 경우, 응답자의 이메일로 입력된 PDF를 보내게 할 수 있습니다.
6. 데이터 수집
여러 사람이 온라인 폼으로 제출한 데이터는 Jotform Tables에서 확인하고 관리가
가능합니다. Jotform 메인 메뉴에서 Tables를 선택합니다. 지금까지 수집한
데이터들이 깔끔하게 테이블에 들어가 있습니다. Jotform Tables는 Airtable과 매우 비슷하게, 관계형 데이터베이스를 기반으로 데이터 관리를 쉽게 해주는 도구입니다.
메인 메뉴에서 Tables를 선택하면, 수집된 데이터를 테이블에서 확인할 수 있다.
7. 결과를 다시 PDF 양식으로 출력
이제 입력받은 결과를 다시 PDF 양식으로 출력도 가능합니다. 출력을 원하는 데이터
레코드의 추가 메뉴(⋮)를 누르고, Download as PDF 를 누르면 아래와 같이 값이
채워진 PDF 파일을 얻을 수 있습니다.
테이블에서 입력된 데이터를 개별 데이터, 또는 전체 데이터 모두에 대해 종이 PDF 양식에 값이 채워진 모습으로 다운로드받을 수 있다.
잣폼은 현재 나와있는 온라인 양식, 설문조사 도구 중 가장 세세한 설정이 가능하고, 기능이 많아서, 구글 설문과 같이 널리 쓰이는 도구 외에 하나 더 알아둘 만 합니다. 그 중에 오늘은 온라인 폼과 PDF 폼을 연동하는 방법을 알아보았습니다. 다음에는 제가 일상적으로 사용하는 Airtable을 이용햐여 비슷한 작업을 한 번 해보겠습니다.
현실이 원하는 대로 되지 않으면, 나는 소설을 든다. 소설에 빠져들며, 현실의 아픔을 잠깐 잊고 싶어서. 이번에는 오랜만에 읽은 스릴러 소설. 운명이 다른 두 여자의 가정이 무너져가는 이야기가 짧은 며칠 사이에 극적으로 전개되며 쉽게 책을 놓을 수 없게 만드는 매력이 있었다.
그러나 2023년 나의 현재의 암담한 상황과 소설 속의 상황이 자꾸 오버랩 되면서 읽는 동안 계속 깊은 계곡으로 빠지는 느낌이 들었음을 부정할 수 없었다. 추리 소설이라고 하면 보통은 사실이 상당히 나중에 밝혀지는 반면, 이 작품은 중간중간에 두 주인공의 독백을 통해 사실들이 하나 둘씩 드러나게 되므로 추리물은 아니다. 그러나 끝까지 결말이 어떻게 전개될지 궁금하게 만들고 긴장하게 만든다는 점에서 영화 시나리오를 써본 작가의 소설적 재미를 만들어내는 능력에 감탄하게 된다.
완벽해 보이는 의사 남편을 둔 김주란의 가정에서 남편과 아내의 미묘한 균열을 세밀하게 그려지고, 아마 그런 점에서 공감이 가는 부부들도 많지 않을까 생각된다. 남편은 아내를 자상하게 보호해주는 것 같고, 아내는 그의 틀 안에서 행복을 누리는 것 같아 보인다. 그러나, 김주란이 문제 제기를 할 때마다 그냥 미안하다, 그만하자로 대충 마무리해버리는 남편의 모습. 그리고 그런 상황에서 오히려 내가 잘못된 것은 아닌가 의문을 갖고, 자신을 믿지 못하는 아내, 김주란의 모습. 그냥 참고 넘기면 그냥 계속 평온할 지도 모를 관계에서 조그마한 균열이 파국을 향해 급하게 달려간다. 완벽한 가정이란 이 세상에 없는 것인가? 괜찮아 보이는 가정, 그리고 처음부터 문제가 있어 보이는 두 개의 가정의 모습을 보고, 이 세상 많은 가족 구성원들이 피해갈 수 없는 질문을 던져본다. 가족의 구성원 모두가 동의할 이상적인 가정은 어떤 모습일까?
같은 제목을 가진 드라마로도 작품화되었는데, 아직 보지는 못했다. 김진영 작가의 차기작을 기대해본다.
나는 수학이나 과학을 싫어하거나 크게 겁내지는 않았다. 내가 궁금해하는 문제에 대해 과학적 사고를 하는 법과 과학적 원리를 모르는 내가 답답해, 대학교에서도 공대의 음향학 수업을 듣거나, 다른 과에 가서 미적분학, 미분방정식 등 수학, 그리고 컴퓨터 프로그래밍 수업을 찾아들었다. 최근 몇 년을 돌이켜봐도, 미적분의 힘이나, 뇌과학의 모든 역사, 보이는 세상은 실재가 아니다와 같은 교양 과학 서적들을 재미있게 보았던 기억이 있다.
그런데, 유시민 작가의 책 《문과 남자의 과학 공부》를 보면서, 한참을 반성했다. 정말 과학적인 기초 사실들에 대해 내가 이렇게 대충대충, 건성으로 들어만 본 것을 아는 체 하고 있었다는 것을 깨달았다. 대표적인 것이 "오랜 시간"에 걸쳐서 생물이 진화한다는 진화론에 대해 나는 너무 무지했었다. 생존에 유리한 자연 선택이 이루어지고, 그것이 유전자에 어떻게 반영된다는 것인지 너무 몰랐었다.
우주의 탄생, 그리고 그것이 현재 지구상에서 발견되는 주기율표에 나오는 원소들과 무슨 관계가 있는지, 원자핵과 전자는 얼마나 떨어져 있는지, 앞으로 우주는 어떻게 될 것인지에 대해 이제야 조금 손에 잡힐 듯이 이해하게 되었다.
뇌과학, 생물학, 화학, 물리학, 수학의 과학적 발견들을 탐색하며, "나는 무엇인가?", "나는 어떻게 존재하는가?", "나는 어디로 가는가?"와 같은 인문학적 질문에 대한 답을 찾아본다. 하나하나가 대충대충 넘어가지 않았다. 스스로 "거만한 바보"를 겨우 벗어난 "문과" 남자라고 칭한 저자는 훌륭한 과학 커뮤니케이터들이 쓴 수많은 과학 교양서들의 도움을 받아, 다른 어떤 커뮤니케이터보다도 과학을 쉽고 재미있게 설명하고 있다.
저자가 참고했던 책들은 그대로, 독자들에게 추천할 만한 훌륭한 과학 교양서들이다. 이 목록들을 알게 된 것만으로도 충분히 읽을 가치가 있었다. 코스모스, 원더풀 사이언스, 세계를 바꾼 17가지 방정식, 이기적 유전자, 눈먼 시계공, 파인만의 여섯 가지 물리 이야기, 엔드 오브 타임, 원소의 왕국, 사회생물학 대논쟁, 통섭: 지식의 대통합, 생명이란 무엇인가, 다정한 것이 살아남는다, 불확실성의 시대, 김상욱의 양자 공부, 세상의 모든 수학, 일어날 일은 일어난다, 내가 누구인지 뉴턴에게 물었다, 어느 수학자의 변명 등 그 중에 몇 가지만 나열해도 풍부한 추가 읽을 거리가 생긴다.
인상깊었던 부분은 나열할 수 없이 많지만, 아무래도 마지막 장에 나온 수학에 관해서 영국 수학자 하디의 말에 고개를 끄덕이게 되었다. 예전부터 궁금했다. 수학과에 가면 도대체 논문을 어떻게 쓸까? 수학과에 가는 그 많은 사람들이 수학적인 발견을 하나씩 해내어 논문을 쓰는 걸까? 하디는 산술, 대수학, 유클리드기하학, 미적분학, 공학, 물리학, 경제학, 사회과학 전공자가 배우는 수학은 "하찮은 수학"이라고 하였다. 그러나 그런 수학은 세상에 유용하게 쓰인다. 그런데 현대의 기하학과 대수론, 정수론, 집합론, 상대성이론, 양자역학은 아름다운 "진정한 수학"이지만, 세상에 쓸모가 없다고 하였다. 물론 이런 이분법은 맞지 않다. 상대성 이론이 없었다면, 우리가 일상에서 쓰는 내비게이션만 해도 엄청난 오차 때문에 전혀 쓸모가 없게 된다. 유시민 작가는 다른 과학과는 다르게, 소위 "진정한 수학"을 하는 수학자들은 "인간계"가 아닌 "신계"에 속한 사람들 같다고 말한다. 대표적인 천재 수학자 가우스를 예로 들면서.
학교 다닐 때, 수학 좀 잘 한다는 사람들은 수학에 많이 의존하는 과학을 하면 잘 할 수 있는 것 같다. 그런데, 그렇게 수학을 잘 한다는 것이, 새로운 "신계"의 수학적 발견을 해낸다는 것과는 다른 이야기인가 보다. 이런 비슷한 이야기를 몇몇 과학자들에게서 들었던 기억이 난다.
아내가 도서관에서 빌린 책이라 충분히 밑줄 치고, 메모하면서 보지 못해 아쉽다. 책 반납일을 단 며칠 앞두고 펼치기 시작해서 다 볼 수 있을까 걱정하였다. 하지만 너무 속도감있고 재미있게 책장을 넘길 수 있어서, 그건 쓸 데 없는 걱정이었다. 인문학과 과학이 만나서 어떻게 세상의 문제들을 설명해가는지 궁금한 사람들은 이 책에서 여정을 시작해도 좋을 것 같다.