For compressed pixel data you have to use the DcmPixelSequence class due to the internal structure of the compressed PixelData element. This gives you acccess to the included offset table (empty for MPEG2) and all frames. However, for MPEG2 there is only a single "frame" containing all MPEG2 data as a blob. You won't be able to access individual frames with DCMTK because DCMTK does not know how to decompress MPEG2 data and hence is not able to find out where a specific frame begins.
So you have to get the complete MPEG2 data, and then decompress it using another library. I will post an example how to do that soon in the wiki and reference here in the forum topic.
DCMTK에서 MPEG2의 오프셋 정보를 얻기 위해선 MPEG2 영상의 BLOB 데이터를 로드해 온 뒤 FFMPEG와 같은 외부 라이브러리를 사용해 압축을 풀고 난 뒤에야 오프셋 정보 추출을 시도할 수 있었습니다.
기반 지식이 얼마나 중요한지 다시 깨달아 가는 문제였습니다. 오늘도 하나 더 배우고 갑니다.
문젠 이 브랜드는 진짜 인기가 많아서 그런 건지 애초에 물량이 적어서 그런 건지 한번 발매 주기를 놓치면 매물이 없어요... 6월 말부터 2주는 기다렸는데 다 품절이랍니다. 7월 초에 공지가 나왔는데 7월 말은 지나야 매물이 들어온답니다.
그리고 바밀로 저소음 적축 키보드의 가장 거슬렸던 점이 USB 연결 방식입니다. 한참 전에 발매된 Anne Pro 2도 C타입을 지원하는데 얘네 모델은 PRO 타입의 키배열을 제외하고는 아직도 USB Mini-B만을 지원합니다. 당연히 블루투스 같은 거도 지원을 안 합니다.
기다려서라도 바밀로 저소음 적축 모델을 사려고 했다가 마음이 틀어진 결정적 이유는 블루투스와 리시버를 통한 무선과 유선을 모두 지원한다는 점이 가장 크게 작용했습니다. 정방향 체리 스위치라 키캡을 변경하기에도 용이합니다.
현재 사무실에선 테스트용 서버, 개발용 노트북, 개인 아이패드를 사용하고 있습니다. 서버는 노트북으로 원격 접속이라도 하지만 아이패드는 블루투스를 지원하지 않으면 정말 불편해집니다. 무선 키보드를 따로 들고 다닐 수도 없고 그렇다고 매직 키보드를 위해 45만 원을 태우는 건 아까웠으니까요.
결국 저소음 적축 체리 스위치에 블루투스, 무선, 유선 동시 지원이 제게는 가장 큰 장점으로 다가와 이 키보드를 선택하게 되었습니다.
2. 개봉기
개봉전에 직접 구매한 영수증 먼저 올리고 들어갑니다.
저소음적축은 만원이 추가됩니다.
처음 택배 상자를 받았을 때 뭔가 잘못 온 줄 알았습니다. 그동안 받은 키보드 택배 상자의 사이즈가 아니었어요.
비교해보니 모든 구성품이 다 들어있는 것을 확인할 수 있었습니다. 여기에 이것 말고도 플라스틱 커버가 동봉되어있습니다.
3. 장점.
우선 장점부터 나열해 보도록 하겠습니다. 우선 블루투스와 무선의 동시 사용성입니다.
블루투스와 무선모드를 사용할 수 있습니다.
사용하자마자 바로 와닿은 장점입니다. 기존 타 키보드는 유선과 블루투스만을 지원해 여러 기기에서 동시에 사용할 때 어느 정도 귀찮은 부분이 있었습니다. 블루투스의 키 씹힘이나 지연을 피하기 위해 보통 메인 컴퓨터에는 유선으로 연결해 사용합니다. 다른 기기에서 사용하기 위해 블루투스를 연결하려면 일반적으로 유선 모드에서 무선 모드로 스위치를 바꾸고 블루투스 페어링을 시도해 연결을 기다려야 했습니다.
유선/블루투스 전환 스위치가 키보드 뒤편에 있는 경우도 흔해 사용하다 키보드를 뒤집고 스위치를 바꾸고 다시 블루투스로 기기에 연결해야 하는 다소 귀찮은 과정이 필요했습니다. 특히 스위칭이 잦으면 더욱 짜증 나게 됩니다.
씽크웨이 토체티 K320w는 리시버를 통한 무선 연결을 지원해 굳이 유선 연결을 고집할 필요가 없어졌습니다. 스위치를 켜고 메인 컴퓨터에는 리시버를 통해 키 씹힘이나 지연 없이 사용하다 스위칭이 필요하면 바로 블루투스로 전환해 사용할 수 있게 되었습니다.
다음 장점은 소음과 통울림입니다. 유명한 저소음 적축 스위치답게 스위치 소음과 통울림은 확실히 줄어들었습니다.
체리사 저소음 적축
이전에 사용하던 무접점이나 같은 사무실 직원의 멤브레인 키보드보다 소음이 더 작습니다. 확실히 체감할 수 있을 정도로 소음이 줄어들어 상당히 만족하며 사용하고 있습니다.
소개글에 적힌 흡음재가 진짜 효과를 발휘하는 것인지 통울림도 없습니다. 개발하다 보면 무의식적으로 엔터, 스페이스, ESC를 힘껏 누르다 못해 때리게 되는데 통울림이 전혀 발생하지 않습니다. 예전에 사용했던 AnnePro2는 뭐만 해도 울리는 거 같아 굉장히 거슬렸는데 확실히 스위치에 의한 소음과 통울림이 없어 사무실에서 사용하기 좋습니다.
다음은 전용 지원 소프트웨어입니다.
듀가드 제우스
듀가드에서 제공해주는 전용 지원 소프트웨어인 제우스를 사용할 수 있습니다. 스크린샷에서 볼 수 있듯이 매크로, 키 변경, 키 조합, 멀티미디어, 프로그램 실행뿐 아니라 마우스의 기능도 사용할 수 있습니다.
공식 홈페이지에서는 0.99 버전을 제공하고 있으며 해당 버전에서는 영문과 중문만 지원되지만 업데이트를 통해 한국어도 지원하고 있습니다.
4. 단점
키캡 품질에 비해 각인이 진짜 최악입니다. 도대체 왜 이런 색으로 각인을 했는지 모르겠어요
숫자, 한글, 스페이스의 민트색 각인
대체 왜 이런 식으로 각인을 한 건지 의아할 뿐입니다. 영문만 있으면 차라리 나을 뻔했는데 민트색으로 한글 각인이 섞여 들어가 있으니까 너무 안 어울립니다. 키보드 색상의 테마가 "웜톤 베이지"인데 민트색이 이 테마에 왜 어울린다고 생각한 걸까요?
그리고 스페이스에 저 각인도 맘에 안 들긴 마찬가집니다.
하우징에 각인되어 있는 듀가드 x 씽크웨이 콜라보 각인
차라리 하우징에 각인되어 있는 콜라보 문양을 검은색으로 각인했으면 훨씬 좋았을 뻔했습니다. 저처럼 애초에 키캡질 할 생각이 있으신 분들은 모르겠지만 키보드 각인이 거슬리면 이게 은근 눈에 띄어서 짜증이 납니다.
게다가 구매 옵션에서 키보드 스위치만 옵션으로 고를 수 있었고 키캡 옵션은 고를 수 없었던 게 아쉬운 점으로 남았습니다. 가능하면 영문 각인이나 측각으로 바꿨을 텐데...
1200mAh라는 용량이 진짜 큰 건지 작은 건지 절대적으로 판단할 순 없어 결국 다른 제품과 비교를 하게 됩니다. 이전에 사용했었던 키크론 K8과 비교를 해보자면 K8은 배터리 용량이 무려 4000mAh였습니다. 이 제품과 비교하면 3배가 넘는 배터리 용량을 탑재하고 있습니다.
심지어 포커 배열이라 이보다 더 작은 Anne Pro 2도 1900mAh의 배터리 용량을 갖습니다. AnnePro2는 더 적은 키배열이라 사이즈도 작았는데 1.5배 이상의 용량을 탑재하고 있으니 이게 안 아쉬울 수가 없습니다.
물론 키크론 K8과 AnnePro2는 LED 모델이므로 실 사용시간은 다르게 느껴질 수 있습니다만 그래도 배터리 용량만 두고 비교해본다면 아쉬운 건 사실입니다.
그 외 기타 구성품에 대한 아쉬움이 살짝 있습니다. 이 부분은 키보드 본체에 대한 아쉬움이 아니기 때문에 개인적인 불평으로 생각하고 넘어가셔도 좋습니다.
하나는 팜 레스트의 품질입니다. 이게 제 제품이 불량인지 원래 이런 건진 모르겠는데 일단 손바닥을 올려두면 내부 젤과 손바닥이 닿는 마감재 사이에 공기층이 발생합니다. 이로 인해 손바닥이 없는 팜레스트 가운데 부분이 부풀어 오르는 현상이 있습니다.
그리고 팜 레스트 디자인을 잘 보면 키보드와 닿아있는 부분도 곡선형 디자인으로 되어 있는데 이 때문인지 키보드와 팜 레스트 사이에 틈이 발생합니다. 가운데는 괜찮지만 양 끝은 확실히 떨어져 있습니다. 다만 애초에 하우징이 그리 높지 않고 키캡 프로파일도 체리 프로파일이라 팜 레스트 없이도 무난하게 사용할 순 있습니다.
또 다른 하나는 키캡 리무버입니다. 동봉된 키캡 리무버가 키캡이랑 안 맞아요. 다른 리무버는 키캡과 수평으로 넣어서 키캡을 제거하곤 했는데 동봉된 키캡 리무버는 수평으로 넣으면 키캡이 더 커서 들어가지 않습니다. 애초에 노린 설계라면 할 말은 없습니다만 키캡을 제거하기 위해선 키캡에 사선으로 리무버를 넣어서 키캡을 제거해야 합니다.
마지막은 리시버 젠더와 리시버입니다. "웜톤 베이지"인데 검은색이에요. 별거 아니긴 한데 그냥 아쉬워서요. 색상을 맞춰줬으면 하는 아쉬움이었습니다.
페이지는 사용자가 빠른 메모부터 공유문서, 랜딩페이지에 이르기까지 모든 것을 작성하는 곳입니다. 통합을 사용해 사용자는 콘텐츠를 조직하여 Notion을 단일 소스로 변경하거나 Notion내에서 콘텐츠를 수집, 연결, 시각화할 수 있습니다.
이 가이드에서는 페이지 콘텐츠의 구성요소가 API에 표시되는 방식과 이를 사용하여 수행할 수 있는 작업에 대해 알아보도록 하겠습니다. 이 가이드를 통해 사용자는 콘텐츠가 포함된 새 페이지를 만들고 다른 페이지의 콘텐츠를 읽어와 기존 페이지 블록에 추가할 수 있습니다.
1. 페이지 콘텐츠와 속성.
일반적으로 페이지 속성은 기한, 범주, 다른 페이지와의 관계 같은 구조화된 정보를 저장하는데 적합합니다. 페이지 콘텐츠는 좀 더 느슨한 구조나 자유 형식 콘텐츠를 저장하는데 적합합니다. 페이지 콘텐츠는 사용자의 생각을 작성하거나 이야기하는 곳입니다. 페이지 속성은 사용자가 데이터를 저장하고 시스템을 구축하는 곳입니다. 여러분의 통합은 여러분이 기대하는 대로 속성과 콘텐츠를 사용하는 것을 목표로 해야 합니다.
모든 단락 블록에는 object, type, created_time, last_edited_time, has_children의 공통된 속성을 포함합니다. 또한 단락 속성 내에 type-specific 정보가 포함되어 있습니다. 단락 블록에는 "text" 속성이 존재하며 블록 타입에 따라 type-specific 속성이 달라질 수 있습니다.
이제 블록에 자식 블록이 있는 예시를 살펴보도록 하겠습니다. "paragraph"에 들여 쓰기 된 "to_do" 블록을 확인해 보세요.
서식이 있는 텍스트 객체는 type-specific 한 구성과 유사한 패턴을 따릅니다. 위의 서식이 있는 텍스트 객체에는 "text" 타입이 있으며 "text" 속성에 해당 타입과 관련된 추가 구성이 존재합니다. annotations, plain_text, href와 같은 타입에 의존하지 않는 기타 정보들은 서식이 있는 텍스트 객체의 최상위 수준에 위치하게 됩니다.
서식이 있는 텍스트는 페이지 콘텐츠와 내부 페이지 속성 값 모두에 사용될 수 있습니다.
4. 콘텐츠가 있는 페이지 만들기.
페이지 생성 엔드포인트를 사용하면 자식 블록을 통해 페이지를 만들 수 있습니다. 이 엔드포인트는 다름 페이지 내에서 페이지를 만들거나 데이터베이스 내에서 페이지 만들기를 지원합니다.
샘플 콘텐츠가 있는 다른 페이지 내에 페이지를 새로 만들어 보도록 하겠습니다. 이 엔트포인트에 대해 세 가지 파라미터를 사용하게 됩니다. "parnet" 파라미터는 부포 페이지가 됩니다. 기존의 페이지 ID를 사용할 수 있습니다.
"properites" 파라미터는 페이지 속성을 표현하는 객체입니다. 우선 이 예시에서는 "title" 속성만이 있는 간단한 페이지 속성을 구성하도록 하겠습니다.
{
"Name": {
"type": "title",
"title": [{ "type": "text", "text": { "content": "A note from your pals at Notion" } }]
}
}
"children" 파라미터는 페이지 콘텐츠를 표현하는 블록 객체 목록입니다. 몇 가지 샘플 콘텐츠를 사용하도록 하겠습니다.
[
{
"object": "block",
"type": "paragraph",
"paragraph": {
"rich_text": [{ "type": "text", "text": { "content": "You made this page using the Notion API. Pretty cool, huh? We hope you enjoy building with us." } }]
}
}
]
이 세 가지 파라미터를 모두 사용해 엔드포인트에 요청을 전송하여 페이지를 생성해 보도록 하겠습니다.
curl -X POST https://api.notion.com/v1/pages \
-H 'Authorization: Bearer '"$NOTION_API_KEY"'' \
-H "Content-Type: application/json" \
-H "Notion-Version: 2021-05-13" \
--data '{
"parent": { "database_id": "494c87d0-72c4-4cf6-960f-55f8427f7692" },
"properties": {
"title": {
"title": [{ "type": "text", "text": { "content": "A note from your pals at Notion" } }]
}
},
"children": [
{
"object": "block",
"type": "paragraph",
"paragraph": {
"text": [{ "type": "text", "text": { "content": "You made this page using the Notion API. Pretty cool, huh? We hope you enjoy building with us." } }]
}
}
]
}'
* 토큰과 ID 정보는 적절히 수정되어야 합니다.
* API 요청에는 크기 제한이 존재합니다. 자세한 내용은 Size Limit를 확인해 주세요.
페이지가 추가되면 새 페이지 객체가 포함된 응답을 받게 됩니다. Notion을 살펴보고 새 페이지를 확인해 보세요.
5. 페이지에서 블록 읽어오기.
페이지 콘텐츠는 자식 블록 검색 엔드포인트를 이용해 읽어올 수 있습니다. 이 엔드포인트는 모든 자식 목록을 반환합니다. 페이지는 블록 자식을 읽어오기 위한 일반적인 시작 방법이지만 다른 종류의 블록에 대한 자식들도 검색할 수 있습니다.
"block_id" 파라미터는 블록의 ID를 의미합니다. 예시에 따른다면 응답에 페이지 ID가 포함되어 있을 것입니다. 해당 페이지의 ID를 "block_id"로 사용해 페이지에서 샘플 콘텐츠를 읽어오도록 하겠습니다.
페이징 된 응답을 받을 수 있습니다. 페이징 된 응답은 Notion API 전반에서 사용됩니다. 페이징 된 응답의 최대 결과 개수는 100개입니다. "start_cursor"과 "page_size" 파라미터를 통해 100개가 넘는 결과를 얻어올 수도 있습니다.
이 응답에서 요청한 자식 블록은 "results" 배열 내부에 존재하게 됩니다.
6. 중첩된 블록 읽어오기.
결과 자체에 자식이 포함된 블록이 있는 경우 어떤 일이 일어날까요? 이 경우 응답에 중첩된 블록이 포함되지는 않지만 "has_children"의 값은 true가 됩니다. 통합에 페이지 콘텐츠 혹은 모든 블록의 완전한 표현이 필요하다면 "has_children"이 true인 블록에 대해 결과를 검색하고 엔드포인트를 재귀적으로 호출해야 합니다.
큰 페이지를 읽는데 다소 시간이 걸릴 수 있습니다. 아키텍처에서 작업 대기열과 같은 비동기 작업을 사용하는 것이 좋습니다. 또한 요청 제한에 도달할 수 있으므로 새 요청을 전송하는 속도를 적절히 늦춰야 할 수도 있습니다.
7. 페이지에 블록 추가하기.
통합은 블록 자식 추가 엔드포인트를 사용해 더 많은 콘텐츠를 추가할 수도 있습니다. 예시에서 만든 페이지에 다른 블록을 추가해 보도록 하겠습니다. 이 엔드포인트에는 "block_id"와 "children"의 두 개의 파라미터가 필요합니다
"block_id"는 기존 블록의 ID입니다. 블록 ID에 앞선 예시에서 사용한 페이지 ID를 동일하게 사용하도록 합니다.
"children" 파라미터는 추가할 내용을 설명할 블록 객체 목록입니다. 더 만든 샘플 콘텐츠를 사용해 보도록 하겠습니다.
시크릿 아래에서 내부용 통합 토큰을 찾을 수 있습니다. 이 토큰을 표시하도록 하고 복사해두세요. 텍스트 에디터와 같은 나중에 쉽게 찾을 수 있는 곳에 붙여 넣어 둡시다.
4. 통합을 사용해 데이터베이스 공유.
API로 구축된 통합은 사용자에 공유 권한과 유사한 권한 시스템을 따릅니다. 여기에는 중요한 차이점이 있습니다. 통합은 처음엔 워크스페이스의 페이지나 데이터베이스에 액세스 할 수 없습니다. API를 통해 해당 페이지에 액세스 하려면 사용자가 특정 페이지를 통합에 공유해야 합니다. 이런 방식으로 Notion에서 사용자와 팀의 정보를 안전하게 보호할 수 있습니다.
워크스페이스의 새 페이지 또는 기존 페이지에서 시작해봅시다. /표 혹은 /table을 입력하여 새 데이터베이스를 추가합니다. 제목을 정해줍니다. 이 예시에서는 "Weekend getaway destinations"라고 정했습니다. 이제 공유 버튼을 클릭해 실렉터에서 통합을 찾아 선택한 뒤 초대를 클릭합니다.
이제 통합에 새 데이터베이스를 읽고 쓰고 편집할 수 있는 권한이 부여되었습니다. 통합이 워크스페이스에 추가되면 모든 구성원과 통합이 같이 페이지 및 데이터베이스를 공유할 수 있습니다. 이 단계에서는 관리자 권한이 요구되지 않습니다.
계속하기 전에 방금 만든 데이터베이스의 ID를 알아보도록 합시다.
Notion 데스크톱 앱을 사용하는 경우 공유 버튼을 다시 한번 클릭해 링크 복사를 선택합니다. 브라우저에 이 URL을 붙여 넣고 확인하세요. 이 URL에서 데이터베이스 ID는 워크스페이스 이름 슬래시(/) 뒤부터 물음표(?) 앞까지입니다. 데이터베이스 ID는 문자와 숫자를 포함하는 32자입니다. 이 ID를 복사해 나중에 쉽게 찾을 수 있는 곳에 저장해 두세요.
https://www.notion.so/myworkspace/a8aec43384f447ed84390e8e42c2e089?v=... |-------------------- Database ID ------------------|
5. 데이터베이스에 아이템 추가하기.
Notion 데이터베이스에서 각각의 아이템은 자식 페이지입니다. 부모를 데이터베이스로 설정함으로써 새 페이지를 생성해 데이터베이스에 아이템을 추가할 수 있습니다. 새 아이템을 추가하기 위해 페이지 생성 엔드포인트에 HTTP 요청을 보내봅시다.
터미널 프로그램을 열고 다음 커맨드를 입력하세요. Authorization와 database_id의 값은 앞서 생성한 적절한 값으로 변경되어야 합니다. 줄 끝에 보이는 문자(\) 뒤에 공백이 없어야 함을 주의하세요.
커맨드를 실행하고 Notion으로 이동해 새 항목이 데이터베이스에 추가되었는지 확인하세요.
이제 Notion API를 사용해 데이터베이스에 새 항목을 추가했습니다. 커맨드와 함께 보낸 HTTP 요청에 대해 좀 더 자세히 살펴보겠습니다.
* Notion API는 REST API 규칙을 따릅니다.
* 토큰은 Authorization 헤더에 포함되며 요청의 출처를 식별합니다.
* Notion API의 각 엔드포인트는 파라미터를 사용해 호출할 수 있습니다. 엔드포인트의 참고 페이지에는 이러한 파라미터에 대해 설명되어 있습니다. 이 예시에서 parent와 properties는 모두 본문에 명시되어 있습니다. 데이터베이스 작업 가이드에는 다른 엔드포인트를 사용하는 방법에 대해 설명되어 있습니다,
6. 마무리
방금 배운 내용을 사용하면 다른 서비스와 시스템을 연결해 새로운 정보를 Notion에 보내거나 업데이트 해 여러분의 팀이 정보를 확인하고 조치를 취할 수 있도록 합니다.
이 가이드에서는 CURL 명령어를 통해 Notion API에 HTTP 요청을 보내는 방법을 사용하였습니다. 일반적으로 통합은 프로그래밍 언어를 사용하여 코드로 작성될 것입니다. 거의 모든 프로그래밍 언어를 사용할 수 있지만 통합을 사용한 코드를 실행하는데 가장 쉽고 빠른 방법을 찾고 있다면 이 예제를 사용해 보세요. 숙련된 프로그래머들에게도 이 예제는 훌륭한 시작점이 될 것입니다.
여러분이 보고 있는 데이터베이스가 표라고 가정해 보도록 합시다. 속성 객체는 열에 있는 모든 값들의 타입을 포함하며 열에 대한 설명을 저장합니다. 텍스트, 숫자, 날짜, 사람 등의 일반적인 타입을 사용할 수 있으며 각 타입에 대한 추가 구성 또한 사용할 수 있습니다. 다음 데이터베이스 객체 예시를 통해 속성 섹션에 대해 알아보도록 하겠습니다.
이 데이터베이스 객체에는 세 가지 속성이 정의되어 있습니다. 각각의 키는 속성의 이름이며 그 값은 속성 객체입니다. 몇 가지 핵심 사항에 대해 알아보겠습니다.
* "title"은 특별한 타입입니다. 모든 데이터베이스에는 "title" 타입을 가진 딱 하나의 속성이 존재합니다. 이 타입의 속성은 데이터베이스에서 각각의 아이템에 대한 페이지 제목을 참조하게 됩니다. 이 예시에서는 "Grocery item" 속성에 이 "title" 타입이 있습니다.
* "type"의 값은 속성 객체의 또 다른 키에 해당됩니다. 각 속성 객체에는 "type"의 값과 동일한 이름의 속성이 존재합니다. 예를 들어 "Last ordered"에는 "type"에 "date"라는 값이 존재하고 "date" 속성도 존재합니다. 이 패턴은 Notion API 전체에서 사용되며 type-specific 데이터라고 합니다.
* 특정 속성 객체에는 추가 구성이 있습니다. "number" 속성 내부에는 추가 구성이 있는 것을 확인할 수 있습니다. 이 예시에서 포맷 설정은 이 열이 보이는 방식을 제어하며 "dollar"로 설정되었습니다.
3. 데이터베이스에 페이지 추가하기.
페이지는 데이터베이스 내부의 아이템으로 사용되며 각 페이지의 속성은 부모 데이터베이스의 스키마를 따라야 합니다. 데이터베이스를 표라고 가정하면 페이지의 속성들은 한 행의 모든 값을 정의합니다.
페이지는 페이지 생성 API의 엔드포인트를 사용해 데이터베이스에 추가됩니다. 이 예시에서 데이터베이스에 새 페이지를 추가해 보도록 하겠습니다. 엔드포인트는 "parent"와 "properies"라는 두 가지 파라미터가 요구됩니다.
데이터베이스에 페이지를 추가할 때 "parent" 파라미터는 데이터베이스가 되어야 합니다.
페이지가 추가된다면 새 페이지 객체가 포함된 응답을 받게 됩니다. 이 응답에서 중요한 속성은 페이지 ID입니다. Notion을 외부 시스템에 연결하여 사용하는 경우 이 페이지 ID를 알아두는 것이 좋습니다. 나중에 이 페이지의 속성을 업데이트할 때 업데이트 페이지 엔드포인트에서 이 ID를 사용합니다.
4. 데이터베이스에서 페이지 찾기.
데이터베이스 쿼리 엔드포인트를 사용해 데이터베이스에서 페이지를 읽어올 수 있습니다. 이 엔드포인트를 사용하려면 "Last ordered가 지난주부터"와 같은 기준에 따라 페이지를 찾을 수 있습니다. 일부 큰 데이터베이스에서는 이 엔드 포인트를 사용하면 특정 순서의 더 작은 결과를 얻어 낼 수 있습니다.
이렇게 페이지를 찾는 데 사용되는 조건을 필터라고 합니다. 필터는 "Tag에 긴급이 포함됨"과 같은 단순한 조건부터 "Tag에 긴급이 포함되어야 하고 Due date는 몇 주 이내여야 하며 Assignee는 Cassandra Vasquez여야 함"과 같은 복잡한 조건으로 설정할 수 있습니다. 이러한 복잡한 조건은 "and"나 "or"을 사용해 여러 개의 단순한 조건을 결합하여 사용하므로 복합필터라고 합니다.
이 가이드에서는 예시 데이터베이스에 단일 속성 조건을 사용하는 것을 중점으로 둡니다. 데이터베이스 스키마를 살펴보면 "Last ordered" 속성이 "date" 타입을 사용한다는 것을 알고 있습니다. 즉 "date" 타입에 대한 조건을 사용해 "Last ordered"에 대한 필터를 만들 수 있습니다.
사실 이 응답은 페이징 된(paginated) 응답입니다. 페이징 된 응답은 큰 객체 목록을 반환하는 모든 Notion API의 응답에 사용됩니다. 페이징 된 응답의 최대 결과 개수는 100개입니다. 페이징 된 결과는 "start_cursor"과 "page_size" 파라 미터를 사용해 100개 이상의 결과를 얼어올 수도 있습니다.
이 예시에서 요청한 개별 페이지에 대한 정보는 "results"에 있습니다. 통합이나 사용자가 최근에 만들어진 페이지에 관심이 있다면 어떨까요? 가장 최근에 생성된 페이지가 첫 번째로 오도록 결과를 정렬할 수 있습니다. 특히 결과 페이지가 하나가 아닌 경우에 유용합니다.
"sort" 파라미터는 개별 속성 혹은 타임스탬프에 의해 결과를 정렬하는 데 사용됩니다. 이 파라미터는 정렬 객체의 배열에 할당될 수 있습니다.
페이지가 생성된 시간은 데이터베이스 스키마를 따르는 페이지 속성이 아닙니다. 이 속성은 모든 페이지에 존재는 두 종류의 타임스탬프 중 하나입니다. 이를 "created_time" 타임스탬프라고 합니다.
이제 가장 최근에 생성된 페이지가 먼저 표시되도록 결과를 정렬하는 정렬 객체를 만들어보도록 하겠습니다.
먼저 공유를 위한 폴더를 생성합니다. File Station에서 공유 폴더를 생성해 주세요.
특별한 설정은 하지 않고 기본값으로 둔 채 공유 폴더를 생성합니다.
폴더를 생성한 뒤 제어판 -> 파일 서비스 -> SMB/AFP/NFS로 이동해 AFP를 활성화시켜줍니다.
이제 맥에서 Finder를 켠 후 cmd + K 혹은 이동 -> 서버에 연결을 클릭해 시놀로지 접속 주소를 입력합니다.
연결을 클릭하면 인증 절차를 수행해야 합니다. Synology NAS의 계정 정보를 입력한 뒤 연결을 눌러 접속을 시도합니다.
정상적으로 접속이되면 마운트 하려는 볼륨을 선택하라는 창이 뜹니다. 여기서 원하는 볼륨을 선택한 뒤 확인 버튼을 클릭해 마무리합니다.
정상적으로 연결되어 사용할 수 있습니다.
WebDAV를 통해 맥에서 Synology NAS에 접속하기
이 방법은 외부망에서 접속할 때 사용하면 좋습니다. 먼저 Synology에서 WebDAV를 활성화시켜줘야 합니다. WebDAV Server를 열어 HTTP/HTTPS를 활성화해 줍니다. 두 프로토콜 모두 사용 가능하지만 HTTPS를 추천드립니다. 일단 이 글에선 두 프로토콜 모두를 활성화한 채 진행하도록 하겠습니다.
동일하게 Finder를 열고 서버에 연결 창을 열어줍니다. WebDAV는 HTTP 프로토콜을 이용하며 5005번 포트를 사용합니다. 만약 HTTPS 프로토콜을 사용하고 싶다면 5006번 포트를 사용해야 하며 다음과 같이 작성한 뒤 연결을 클릭하면 됩니다.
이제 AFP와 동일한 절차를 수행해 주시면 됩니다. 인증 정보를 입력 한 뒤 연결 버튼을 클릭해 접속을 시도합니다.
인증 절차에 성공하면 이제 WebDAV를 통해 Synology NAS에 접속할 수 있습니다. 앞서 만든 공유 폴더를 확인할 수 있습니다.
서로 다른 매체와 지역마다 다양한 이유로 모두 다른 초당 프레임 수(Freames per second, fps, 프레임 레이트)를 요구합니다. 영상에 적용하기로 결정된 프레임 레이트는 여러분의 프로젝트가 어떻게 보이는지 크게 변경시킬 수 있으며 작업 결과물에도 영향을 미칩니다.
프레임 레이트가 무엇인지에 대해 간략하게 알아보고 여러분의 프로젝트에 적합한 프레임 레이트를 결장하는 방법에 대해 알아봅시다.
프레임 레이트가 무엇인가요?
프레임 레이트는 일반적으로 초당 프레임 수(Frames for second, fps)로 표시되며 영상의 1초가 얼마나 많은 스틸 프레임으로 구성되어 있는가를 설명하는 데 사용되는 용어입니다. 예를 들어 Gone Girl의 클립 1초는 24개의 프레임으로 구성되어 있습니다.
https://www.imdb.com/title/tt2267998/
이 클립을 우리의 편집 툴로 가져와서 각 프레임을 확인해보면 24개의 개별 프레임으로 구성되어 있는 것을 확인할 수 있습니다. 각 프레임은 1/24초를 나타냅니다.
https://www.20thcenturystudios.com/
위 사진은 클립 1초를 구성하는 프레임들입니다. 총 24개의 프레임이 1초를 구성하는 것을 확인할 수 있습니다. 디지털 영화를 만드는 데 있어서 약간은 구식이라고 느껴질 수 있는 "초당 프레임"이라는 용어는 셀룰로이드(8mm, 14mm, 35mm 필름)에서 파생되었으며 초마다 노출되는 프레임의 수를 자세히 설명합니다. 디지털카메라는 필름을 사용하지 않지만 개별 스틸 프레임을 전자적으로 유사하게 처리하므로 이 용어는 셀룰로이드와 디지털에 모두 사용됩니다.
선택할 수 있는 선택지가 많은 셔터 스피드와는 달리 프레임 레이트는 일반적으로 일련의 표준을 준수하며 23.976, 24, 25, 29.97, 30, 48, 50, 59.94, 60fps 중에서 선택됩니다.
여기서 왜 하필 24fps에서 시작하는 걸까요? 왜 19개나 20개가 아닌 24개일까요? 일반적으로 인간은 10~12개의 프레임 정도면 식별 가능하며 개별적인 이미지로 인식합니다. 하지만 1초 내에 그보다 더 많은 이미지가 지나가게 되면 우리의 뇌는 이미지를 움직임으로 인식하게 됩니다. 1900년대 초에는 표준 프레임 레이트가 존재하지는 않았지만 프레임 속도를 높이기 위해선 더 많은 필름을 사용해야 하므로 프레임 속도를 낮게 유지하는 것이 스튜디오에 이득이었습니다.
앞서 언급했듯이 보편적으로 영화에서는 24fps가 표준으로 여겨집니다. 그럼에도 불구하고 몇몇의 혁신적이고 실험적인 영화 제작자들은 또 다른 선택지를 찾기 시작했습니다. 그중 한 가지 유명한 예시는 호빗 3부작을 48fps로 촬영한 Peter Jackson입니다.
Jackson의 48fps로의 진출은 엇갈린 피드백을 받았지만 일부에서는 이런 프레임 레이트에 대한 테스트를 그만두지 않았습니다. James Cameron은 아바타 후속작을 48fps로 촬영하고 있으며 Ang Lee는 최근 Genmini Man을 120fps로 촬영했습니다.
대부분의 디지털 프로젝터와 홈 스트리밍 서비스가 수용할 수 있는 다양한 프레임 레이트로 촬영할 수 있지만 영화가 24fps로 촬영되고 있는 이유는 단순히 이러한 특징이 우리에게 익숙한 것이기 때문입니다.
비디오에 대한 미국의 표준은 오랫동안 30fps였지만 TV 방송에 대한 표준은 29.97fps입니다. 이 30fps라는 수치는 미국의 60Hz 전력 표준과 이상적인 동기화를 위해서 선택되었습니다. 이러한 형식을 NTSC라고 합니다. 유럽에서는 50Hz의 전력 표준으로 인해 비디오의 표준 프레임 레이트가 25fps입니다. 이러한 형식을 PAL이라고 합니다. 온라인에서의 비디오는 주로 30fps로 업로드되며 액션이 많은 콘텐츠의 경우 60fps로 업로드됩니다.
60Hz의 전력 표준으로 인해 많은 사람들이 PAL 영역에서 NTSC fps로 촬영이 가능한지 궁금해합니다. 다행히도 이미 이 질문에 대해 조사했으며 이 글에서 관련 정보를 확인할 수 있습니다.
우리는 종종 24, 30, 60fps 외에도 23.976, 29.97, 59.94fps를 볼 수 있습니다. 이러한 프레임 레이트는 왜 사용하는 걸까요? 컬러 TV가 처음 도입되었을 때 Color Subcarrier라고 불리는 색조와 채도 레벨을 제공하는 추가적인 신호는 가시적이고 정적인 형태로 기존 흑백 TV에 간섭을 일으켰습니다. 다행히도 프레임 레이트를 29.97로 낮추면 이런 정적 형상이 해소되었습니다. 이후 29.97fps로 방송하는 것은 방송 업계의 표준이 되었습니다. 이러한 포맷을 드롭 프레임(Drop Frame)이라고 하며 그대로인 30fps를 논 드롭 프레임(Non Drop Frame)라고 합니다.
29.97fps에서 드롭 프레임 오프셋을 보정하기 위해 드롭 프레임에서 타임코드는 10분의 배수를 제외하고 1분에 한 번씩 00과 01 프레임을 반드시 건너뛰어야 합니다. 물론 24fps, 60fps에 대한 드롭 프레임의 타임코드 변형도 존재합니다. 일반적인 영상작업에서는 알아두는 것으로 괜찮지만 방송용 영상작업에서는 드롭 프레임과 타임코드 보정은 매우 중요합니다.
온라인 콘텐츠에서의 프레임 레이트.
유튜브와 페이스북 동영상과 같은 온라인 콘텐츠는 TV의 표준 관행을 따를 필요가 없으며 마찬가지로 영화의 프레임 레이트를 따를 필요도 없습니다. 온라인 콘텐츠에서 사용하기에 가장 좋은 프레임 레이트는 과연 무엇일까요? 온라인 플랫폼의 유연성 때문에 명확한 정답이 없습니다. 다만 유튜브의 경우 가이드라인에서 다음과 같이 설명되어 있습니다.
Content should be encoded and uploaded using the same frame rate that was used during recording. Common frame rates include: 24, 25, 30, 48, 50, and 60 frames per second (other frame rates are also acceptable). 콘텐츠는 녹화 중에 사용한 것과 동일한 프레임 레이트로 인코딩한 뒤 업로드되어야 합니다. 일반적인 프레임 레이트는 다음을 포함합니다: 24, 25, 30, 48, 50, 60fps(다른 프레임 레이트도 허용됨).
결국 여기서의 프레임 레이트는 만드는 콘텐츠의 유형에 따라 결정됩니다. 만약 여행 브이로그 영상을 촬영하고 영화와 같은 분위기를 연출하고 싶다면 24fps나 25fps로 하는 것이 좋습니다. 만약 빠른 페이스의 액션 영상을 촬영하는 경우 느린 프레임 레이트로 인해 흐림(블러) 현상이 발생할 수 있으므로 높은 프레임 레이트를 사용하는 것이 좋습니다.
맺는 글.
프레임 레이트가 동작하는 방식에 대한 기술적인 세부사항은 이보다 훨씬 더 많이 있지만 이 정도의 지식이 있다면 최소한 이를 식별하고 현재 프로젝트에 적합한 것을 선택할 수 있습니다.