hotchpotch/wikipedia-multilingual-ir-pairs huggingface dataset:
어윤중 생애
경기도 광주에서 출생하여 지난날 한때 평안도 강서에서 잠시 유아기를 보낸 적이 있는 그는 한성부에서 성장하였으며 1869년 별시 병과에 합격하여 교리, 지평 등을 지내고, 박정양·홍영식 등과 함께 조사시찰단의 일원으로 일본에 다녀온 후 서북경략사(西北經略使)로서 청나라·러시아 제국 등과 국경을 정하는 데 노력했다. 1881년 일본에 교육생들을 파견시키는 업무를 맡았다. 암행어사 시절 백성들의 존경과 흠모의 관심 대상으로 요주의 인물이었던 신재효를 잠시 감찰하기도 했다.
1886년에는 지난날 갑신 정변의 실패 이후 역적으로 연좌되어 굶어 죽은 스승 박원양 내외의 시신을 수습하여 장례를 치러주었다가 심순택 등에게 심한 비판을 받고 이를 해명하기도 하였다.
어윤중 생애
그 후 승지, 참판 등을 거쳐 1893년 양호순무사로서 동학교도들의 보은집회를 해산시켰으며, 1894년 김홍집 내각의 탁지부대신이 되었다. 친러파의 세력이 강해져 1896년 고종이 러시아 공사관에 옮겨가(→아관파천 참조) 김홍집 등이 살해되었다. 어윤중은 친일파가 아니었으나, 지레 겁을 먹고 고향으로 도망가던 중 경기도 용인에 도착했을 때 하필 이전에 산송 문제로 원한을 샀던 정원로 등을 만나, 그 머슴들에게 암살되었다.
규장각 대제학으로 특별 증직되고 1909년 7월에 충숙(忠肅)이라는 시호가 내려졌다.
어윤중 가족 관계
증조부 : 어재상(魚在象, 1773년 ~ 1850년)
친할아버지 : 어명능(魚命能, 1799년 ~ 1865년)
아버지 : 어약우(魚若愚, 1818년 ~ 1863년 8월 6일) ... 아명은 어도우(魚道愚)
어머니(생모) : 여주 이씨 부인 ... 이용규(李容逵)의 딸
본인 : 일재 어윤중(1848년 ~ 1896년)
서모 : ?
이복 남동생 : 어윤수(魚允修, 1854년 ~ 1944년)
서모: ?
이복 남동생 : 어윤랑(魚允浪, 1856년 ~ 1922년)
서조모 : ?
이복 서숙부 : 어취우(魚就愚, 1830년 ~ 1892년)
사촌 남동생 : 어윤공(魚允恭, 1863년 4월 30일 ~ 1928년 10월 29일)
서조모 : ?
이복 서숙부 : 어창우(魚昌愚, 1851년 ~ 1924년)
사촌 남동생 : 어윤익(魚允益, 1866년 11월 29일 ~ 1901년 12월 22일)
사촌 남동생 : 어윤적(魚允迪, 1868년 8월 25일 ~ 1935년 2월 3일)
사촌 남동생 : 어윤업(魚允業, 1876년 5월 24일 ~ 1941년 11월 18일)
사촌 종제수 : 풍산 홍씨 부인 홍애덕(1878년 ~ 1949년)
어윤중 가족 관계
5촌 종조카 : 어약선(魚躍善, 1914년 9월 6일 ~ 1959년 7월 31일?)
서조모 : ?
이복 서숙부 : 어현중(魚玄仲, 1853년 ~ 1929년)
사촌 여동생 : 어윤희(魚允姬, 1880년 ~ 1961년)
외할아버지 : 이용규(李容逵)
어윤중 기타
문하생 중 윤치호는 해평 윤씨 집안의 서자 출신의 무관 윤웅렬의 아들로, 윤웅렬은 아들의 앞날을 위해 농업학교나 기술학교 대신 도진샤(同人社)에 입학하게 해달라고 부탁하였다. 윤웅렬의 부탁을 거절할 수 없었고, 윤치호의 재능을 아깝게 생각한 어윤중은 이노우에 가오루 등을 설득시켜 윤치호를 도진샤에 입학하게 한다.
이동인
이동인(李東仁, 1849년? ~ 1881년 5월)은 조선 후기의 불교 승려이자 외교관, 개화 사상가이다. 법명(法名)은 천호(淺湖)이다. 개화기에 활동한 인물 가운데 처음으로 창씨개명을 한 사람이며(1880년 10월), 일본명은 아사노 도진(일본어: 朝野 東仁)이다. 애초 일찍부터 개화된 승려였던 그는 유대치, 오경석 등을 통해 김옥균, 서광범, 윤치호 등의 청년들을 만나 신문물을 전하며 그들과 교류하였다. 1879년 김옥균의 주선으로 일본을 다녀왔으며 이후 여러 번 일본을 다녀와 신문물을 시찰하였다.
1880년말에는 조선 정부의 밀사로써 일본에 파견됐다. 귀국 후 서울 도착 즉시 이동인은 국왕으로부터 조선국 금위영 예하 별선군관 직책에 임명되어 자유로이 왕궁을 출입하게 되었다. 이후 통리기무아문의 참모관으로서 이동인은 1881년 신사유람단을 일본에 보낼 때에도 막후에서 활동하였으며, 총포 등의 무기와 군함을 구입하기 위해 일본과 비밀교섭을 하기도 했다. 1881년 신사유람단으로 일본에 다시 파견되기 직전 갑자기 의문의 실종을 당하는데 1881년 5월경 한성부에서 암살된 것으로 알려졌다.
이동인 생애
이동인은 1849년 조선 경상도 양산군(지금의 대한민국 경상남도 양산시) 출신으로 알려져 있으나, 그의 가계나 출신 성분, 유년 시절에 대해서는 잘 알려져 있지 않으며 일찍이 승려가 되었다. 부산 범어사에 승려로 있었으며, 양산 통도사에 있었다는 말도 있다.
그 뒤 1860년대부터 한성부 봉원사에서 활동하였다. '일본통'으로 알려진 인물로, 처음에는 유대치와 교류하다가 1870년경 유대치의 소개로 그의 문하에 출입하던 김옥균 등을 만나게 되었다.
한자와 일어에 능했던 이동인은 일본 혼간사(本願寺)의 부산 별원을 왕래하면서 일본의 승려들로부터 입수한 〈만국사기〉(萬國事記)와 세계 각국의 풍물 사진을 청년 관리들에게 전해 주었다.
1879년 3월에 이동인은 일본 불교 오타니 파 혼간사의 부산별원에 드나들면서 서구 여러 나라에 관한 사진과 〈만국사기〉, 성냥 등을 얻어서는 서울 봉원사에서 김옥균, 서재필, 유대치, 오경석 등에게 개화 문물을 보여줌으로써 개화파와 교류를 하였던 것이다.
이동인 생애
1870년대 초에도 청나라를 다녀온 뒤 서구 문물의 놀라움을 말하던 박규수나 오경석 등의 말을 아무도 듣지 않자, 이들과 일찍부터 친하게 지내던 이동인은 부산과 일본을 오가거나 개성의 송상을 통해 들여온 괘종 시계, 태엽 기계와 시계 등을 보여주어 박규수, 오경석의 주장이 어느 정도 신빙성이 있음을 입증해주었다. 이동인이 혼간사 부산별원에 드나들었다는 것은 오쿠무라의 〈조선국포교일지〉에 의하여 1878년 6월 2일부터 2회, 12월 9일부터 4회에 걸쳐 드나들었다는 기록이 있는 것으로 확인되었다.
1879년 3월부터 오쿠무라의 포교소(부산 별원)에 드나들면서 일본 밀항을 준비한다. 1879년 6월 일본의 국정을 살피고 세계 정세를 파악할 목적으로 유대치 등과 함께 일본으로 밀항해 일본어를 배웠다. 1880년 5월 이래로 주일 영국 공사관의 서기관 사토우(Ernest M. Satow)와 빈번히 접촉하여 그에게 한국어를 가르쳐주며 그와 정치 문제를 논의하기도 하였다. 개화승으로 행세하면서 조선과 일본을 건너다니며 다수의 유학생을 일본으로 보내어 친일파로 육성하는 데 크게 기여하였다.
이동인 생애
이동인은 일본에 가보길 원했으나 승려였고, 이러한 사정을 딱하게 여긴 김옥균은 그의 일본행을 적극 주선, 건의하여 1876년(고종 16년) 조선정부의 사신 자격으로 일본에 보내 신문물을 견학하고 돌아오게 했다.
이동인은 양산 통도사의 승려인데 오쿠무라와의 접촉으로 개화 문물을 손에 넣은 다음에는 서울로 올라와, 봉원사에서 김옥균, 서재필을 비롯한 개화파들과 교류하면서 김옥균이 여비로 준 금덩이 네 개를 오쿠무라에게 내보이면서 일본 도항을 부탁하였다. 그러나 이들은 이동인의 금을 받지 않고 여비나 생활비로 쓰라 하며 오히려 추가 여비와 각 지방 별로 무사집단이 난립하는 혼란상임을 주지시키고 조심할 것을 충고했다.
이리하여 이동인은 오쿠무라와 마에다(前田獻吉) 영사의 주선으로 교토에 가서 그곳 혼간사 본산에 머물면서 일본어를 배웠다.
1879년 4월 이동인은 득도식을 하고 일본 진종(眞宗)의 승려가 되었고, 도쿄 아사쿠사 별원(草別院)에 기숙하면서 주지 스즈키(鈴木惠順)의 각별한 보살핌을 받으면서 일본 외무성의 요인들을 비롯한 여러 일본 명사들과 접촉하였다. 또한 그는 이때 수신사로 도일한 김홍집을 만나서 친교를 쌓았다.
이동인 생애
이동인은 동경에서 데라다(寺田福壽)의 소개를 받아 당시 일본의 외교가로 명망을 떨치던 후쿠자와 유키치와 교류하기도 하고, 일본 각지를 다니면서 미국과 프랑스, 영국 선함과 백인들을 만나보기도 했다. 이동인은 이들의 행동, 신체 구조 이들이 먹는 특이한 고기 등에 대해서 편지로 적어 유대치와 김옥균 등에게 보냈다.
일본·중국의 유지들과 간친회로서 아시아 및 세계 정세를 분석하고 구미제국에 대항한다는 명분 아래 활동하던 흥아회(興亞會)에 출석하는 등 일본 조야의 정계, 재계의 유력자들과 교유의 폭을 넓혔다. 그리고 많은 서적과 자료 등을 오쿠무라에게 부탁하여 김옥균 등에게 보내기도 하였다.
이동인은 일본에 머무르고 있던 1880년 6월에 수신사로 일본을 방문한 김홍집과 만났는데, 이동인의 식견에 감동한 김홍집의 추천으로 조선 조정에도 연이 닿게 되었다. 1880년 8월에 이동인은 제2차 수신사로 와서 아사쿠사 관음사에 유숙하던 김홍집과 만나면서 조선 정계에 두각을 나타낼 수 있는 계기가 되었다. 김홍집과의 면담 이후 급격히 그와 가까워진 이동인은 수신사 일행이 1880년 9월 16일 일본을 떠나 귀국하자 이들 일행과 함께 귀국, 9월 28일 귀경하였다.
이동인 생애
그해 9월 귀국하면서 가져온 램프·석유·잡화 등의 일본 제품을 왕실·세도가와 친지에게 선물로 주었다. 이때 처음으로 일본 제품이 서울에 들어왔다. 서울에서는 일본 공사관에 드나들며 1881년 신사유람단의 막후 참모 역할을 하였다. 1880년 10월에 일본으로 다시 건너가서 아사노 도진(淺野東仁)으로 개명하면서 일본 외무성에서 잠시 근무하기도 했다.
귀국 직후 이동인은 김옥균 등에게 서적 및 기타 자료를 건네주었다. 이동인이 귀국할 때 혼간지에서는 이동인에게 쌀 2백 가마 값에 해당하는 일본화 1천 엔을 주었다. 이와는 별도로 포교 비용은 나중에 부쳐 주었다. 일화 1천 엔으로 이동인은 램프, 석유, 잡화 등을 들여와서 왕실, 세도가와 친지들에게 선물했는데, 이것이 조선인에 의해 외제 상품이 서울에 공식적으로 들어온 최초였다.
김홍집은 귀국 직후 민영익에게 이동인을 소개하였다. 민영익은 이동인을 만나보고 그의 식견의 탁월함에 경탄하여 자기의 사랑방인 연당(蓮堂)에 거처를 정해 주고 여러 차례 국왕에게 알현토록 주선하였다.
이동인 생애
이동인은 일본 국정의 견문, 분석은 물론 세계의 정세와 이에 대처할 조선왕조의 방책을 상주하여 고종을 감복시킨데다가 김옥균 등의 강력한 조언에 힘입어 크게 중용되기에 이르렀다. 뿐만 아니라 그는 국왕의 밀사로서 1880년 10월에 재차 도일하였다. 이동인은 제2차 일본행은 조미수호통상교섭의 알선을 주일청국공사 하여장(何如장)에게 의뢰하는 고종의 밀명을 수행하는 것이었다.
11월 19일 하여장 청국공사를 찾아가 고종의 밀명을 이행하였다. 한편 국내에서는 대원군과 그 당료들이 고종의 개방정책을 못마땅하게 생각하여 고종의 밀명으로 일본에 밀파된 이동인이 귀국하면 제거하기로 계획을 세우고 있었다. 이 정보를 접한 유대치가 급거 부산으로 달려갔다. 귀국한 이동인은 동래부에 체포 구금되었다. 그러나 유대치의 주선으로 7일 만에 속방되어 1881년 1월 초순에 상경하였다.
서울 도착 즉시 이동인은 국왕으로부터 별선군관에 임명되어 자유로이 왕궁을 출입, 고종과 대담하고 진언하기에 이르렀다. 통리기무아문의 참모관으로서 이동인은 1881년 신사유람단을 일본에 보낼 때에도 막후에서 활동하였으며, 총포 등의 무기와 군함을 구입하기 위해 일본과 비밀교섭도 벌였다.
김옥균은 곧 자신도 일본에 가고자 했고, 이동인이 입수해온 서적과 물건들을 선물로 받았다. 김옥균은 1881년경 일본에 갈 것을 결심하고 고종에게 여러번 건의하여 설득한다. 이때 이동인 역시 신사유람단에 동행하기도 하였다.
이원회와 함께 일본과의 군함 구매 비밀교섭을 하다가 실패한 뒤 행방을 감추었다. 1881년 5월 서울에서 암살당하였다고 전해진다.
이동인 평가
한 불교학자는 그가 오래 생존하였다면 한국의 개화에 크게 기여하고 불교 근대화에도 새로운 장이 열렸을 것으로 전망하기도 한다. 하지만 승려 겸 사학자인 임혜봉은 그를 일본의 조선 침략 세력에 부화뇌동한 전형적인 친일 인물로 평가하였다. 왜냐하면 이동인이 개화문물을 처음 접하게 된 것은 일본 정부의 침략 밀명을 받고 부산에 처음 상륙한 일본 불교의 접근에 의해서 이루어진 것으로 평가하였다.
이동인 기타
그밖에 그는 본래 승려가 아니었으나 1880년 정식으로 일본 승려가 되었다는 주장도 있다.
비트맵
비트맵(영어: BMP file format, DIB file format 또는 bitmap, 문화어: 비트매프, 이진 숫자 배렬표)은 컴퓨터 분야에서 디지털 이미지를 저장하는 데 쓰이는 이미지 파일 포맷 또는 메모리 저장 방식의 한 형태이다. 보다 일반적으로는 래스터 그래픽스(점방식)라고 한다. 화면 상의 각 점들을 데카르트 좌표계를 사용하여 화소 단위로 나타낸다. 그림을 확대하면 각 점이 그대로 커져 경계선 부분이 오돌도돌하게 보이는 계단 현상이 나타나며, 이를 좀 더 부드럽게 처리 하기 위한 알고리즘들(쌍삼차 필터링, 이중선형 필터링 등)이 있다.
가로 곱하기 세로 만큼의 픽셀 정보를 다 저장해야 하기 때문에 벡터 방식의 이미지나 텍스트 자료에 비해 상대적으로 용량이 크고 처리 속도가 느리다. 이를 개선하기 위해 JPEG, GIF, PNG 등의 다양한 파일 형식이 개발되었다.
이와 상반되는 방식의 그림 표현 방법에는 어떤 도형을 나타낼 것인지를 저장하는 벡터 방식이 있다.
비트맵을 두값본으로 부르기도 하는데, 두값본은 1997년 12월에 문화관광부에서 발행한 국어순화용어자료집에 전산기 순화 용어로 실렸으나 현재는 사용하지 않는 용어이다.
MOD
MOD, Mod, mod는 다음과 같은 뜻을 가지고 있다:
mod는 개조나 변형을 의미하는 modification의 줄임말로 쓰인다.
컴퓨터에서 모드(mod)는 컴퓨터 하드웨어의 개조를 의미한다.
모드칩(modchip)은 콘솔 게임 기기의 저작권 보호 기능이나 지역 코드를 쓸모 없게 만드는 칩이다.
비디오 게임에서 모드(mod)는 이미 완성된 비디오 게임을 수정해 새로운 게임으로 만드는 행위를 말한다.
케이스 모딩은 컴퓨터 케이스를 직접 만드는 행위를 말한다.
하나부사 요시모토
하나부사 요시모토(일본어: 花房義質, 1842년 2월 10일(덴포 13년 1월 1일) ~ 1917년(다이쇼 6년) 7월 9일)는 메이지 시대와 다이쇼 시대에 활동한 일본 제국의 외교관이다. 오카야마번의 번사이며 실업가이자 초대 오카야마시장을 역임한 정치가이다. 추밀고문관, 일본 적십자사 사장을 역임하였으며 작위는 자작이다.
하나부사 요시모토 생애
오가타 고안(緒方洪庵)의 데키주쿠(適塾)에서 난학을 배웠으며, 1867년에는 유럽과 미국으로 유학을 가서 이듬 해에 귀국하였다. 1870년부터 외국관어용괘(外国官御用掛)로 외무성에 출근하였으며, 같은 해에 〈청일수호조약〉의 체결을 위하여 청나라에 갔다.
1872년에 일본 요코하마 항에 정박 중이던 페루 선적의 마리아 루스(María Luz) 호에서 청나라 노동자에 대한 학대 사건(마리아 루스호 사건)이 발생하자 서기관으로 외무경 소에지마 다네오미를 보좌하였고, 중재 재판을 위한 대리공사로서 상트페테르부르크에 파견되었다. 소송 이후에는 일본과 러시아의 국경 확정을 위한 교섭을 위해서 파견된 전권공사 에노모토 다케아키를 보좌하였다.
1877년에 주조선 대리공사에 임명되었고, 조선 정부가 부산 두모진(豆毛鎮)에 세관을 설치하자 1878년 8월 10일부터 군함과 함께 부산에 파견되어 세관의 철거를 요구하였으며, 같은 해 12월 4일에 조선 정부가 정식으로 세관을 철거하게 하였다. 1880년 4월에 일본 정부는 조선의 한성에 공사를 상주시키기로 결정하였고, 하나부사를 초대 공사로 임명하였다.
하나부사 요시모토 생애
1882년 임오군란 당시에 일본 공사관이 습격당하자 공사관을 탈출하여 일본으로 귀국하였고, 데라우치 마사타케가 인솔하는 일본군과 함께 조선에 건너와 〈제물포 조약〉을 체결시켜, 사건의 손해 보상과 함께 한성에 일본군 주둔 등을 조선 정부가 인정하게 한다.
1883년부터 1886년까지 러시아 주재 특명 전권공사로서 상트페테르부르크에 주재하였다. 이후에는 농상무차관, 황실회계심사국장, 궁내차관, 추밀고문관, 일본 적십자사 사장 등을 역임하였다. 1896년 남작의 작위를 받았으며, 1907년 자작으로 승작되었다.
DirectX
Microsoft DirectX(마이크로소프트 다이렉트엑스)는 멀티미디어, 특히 게임 프로그래밍에서 마이크로소프트 플랫폼에서 작업을 위한 API의 집합이다. 다이렉트엑스는 마이크로소프트 윈도우, 세가, 드림캐스트, 마이크로소프트 엑스박스 및 엑스박스 360을 위한 비디오 게임 개발에 널리 쓰인다.
다이렉트엑스는 또한 게임뿐 아니라 최근에 나온 3차원 그래픽 하드웨어를 사용하여 높은 품질의 3차원 그래픽을 빠르게 렌더링할 수 있기 때문에 소프트웨어 업계 전반에서 사용되기도 한다.
다이렉트엑스 런타임과 소프트웨어 개발킷은 무료이지만 개조는 할 수 없는 클로즈드 소스(오픈 소스의 반대 개념) 소프트웨어이다. 다이렉트엑스 런타임은 원래 컴퓨터 게임 개발자들에게만 공개되었으나, 최근에는 기본적으로 윈도우에 포함되어 있다. 상위 버전으로 업데이트하고 싶을 경우 마이크로소프트의 공식 홈페이지를 통해 설치할 수 있다. 설치 시, Bing 바 설치가 기본적으로 체크되어 있으니 주의하자.
DirectX
Direct3D 9Ex, Direct3D 10은 윈도우 비스타 이상, Direct3D 11은 윈도우 비스타 SP2 또는 윈도우 7 이상, Direct3D 12는 윈도우 10에서만 사용할 수 있다. 그 까닭은 이러한 새로운 버전들은 윈도우 비스타에 도입되었던 새로운 윈도우 디스플레이 드라이버 모델이 있어야 동작하기 때문이다. 그래서 DirectX 조건에 맞더라도 드라이버가 윈도우 디스플레이 드라이버 모델을 지원하지 않으면 사용할 수 없다. 새로운 비스타/WDDM 그래픽스 구조에는 데스크톱 창 관리자와 같이, 그래픽 하드웨어를 여러 개의 응용 프로그램과 서비스에 가상화할 수 있게 도와 주는 새로운 비디오 메모리 관리자를 포함하고 있다.
DirectX 개발 역사
1994년 말, 마이크로소프트는 다음 운영 체제인 윈도우 95를 출시할 준비가 되었다. 마이크로소프트의 3명의 직원 Craig Eisler, Alex St. John, Eric Engstrom은 프로그래머들이 마이크로소프트의 이전 운영 체제인 MS-DOS를 더 나은 플랫폼으로 보는 경향이 있었기 때문에 걱정이 있었다. MS-DOS가 게임 프로그래밍을 위한 더 나은 플랫폼으로 비쳐졌는데, 그 이유는 윈도우 95용으로 개발된 게임이 거의 없어서 운영 체제가 큰 성공을 거두지 못할 것으로 생각되었기 때문이다. 라이온 킹 비디오 게임의 윈도우 포팅에 관한 부정적인 반응이 함께했다.
DirectX 개발 역사
도스는 비디오 카드, 키보드, 마우스, 사운드 장치, 그리고 시스템의 나머지 모든 부분들에 직접 접근을 허용하였던 반면에 윈도우 95는 보호 메모리 모델이 포함되어 이 모든 것들에 대한 접근을 제한하였다. 마이크로소프트는 프로그래머들을 위한 조속한 솔루션이 필요했는데, 이 운영 체제가 출시되기 수개월 밖에 안 남았기 때문이다. Eisler (development lead), St. John, and Engstrom (program manager)은 함께 이 문제를 해결하여 솔루션을 내놓았는데 이 이름이 DirectX이다.
DirectX 구성 요소
다이렉트 그래픽 인프라스트럭처(DirectX Graphics Infrastructure)
다이렉트2D(Direct2D)
다이렉트 엑스 10.1 표준에 포함된 2D 그래픽 표현 API이다. GDI, GDI+를 대체한다.
다이렉트3D(Direct3D)
3차원 그래픽을 그리는 데에 쓰인다.
다이렉트 드로(DirectDraw)
2차원 그래픽을 그리는 데에 쓰이며, 8 이후로 다이렉트 그래픽으로 통합되면서 쓰이지 않고 있다. 다이렉트2D가 역할을 대신하고 있다.
다이렉트인풋(DirectInput)
게임 콘트롤러 등의 조작 장치를 제어할 때 쓰인다.(다이렉트엑스 10으로 넘어오면서 엑스인풋으로 이름이 바뀜).
엑스인풋(XInput)
Windows 크로스 플랫폼(Cross-Platform) 표준 입력(키보드 마우스 조이스틱 등등) API. Windows (XP sp1, Vista 이상) 및 XBox360 을 지원하며 DirectInput 대신에 XInput 을 사용하면 XBox360 전용 콘트롤러 및 고유한 기능(버튼,진동 등)을 Windows 에서도 사용할 수 있다.
다이렉트뮤직(DirectMusic)
DirectX 구성 요소
다이렉트 뮤직 프로듀서에 의해 만들어지는 사운드 트랙 재생.
다이렉트 오디오(Direct Audio)
다이렉트사운드(DirectSound)
게임 중 음향 효과에 쓰인다. DirectX 8이후로 다이렉트 사운드3D와 통합되어, 다이렉트 오디오가 되었으나, 여전히 다이렉트사운드로 불린다.
다이렉트사운드3D(DirectSound3D)
3차원 사운드를 위한 API. DirectX 8이후로 다이렉트 오디오에 통합되었다.
다이렉트라이트(DirectWrite)
다이렉트 엑스 10.1 표준에 포함된 글꼴 표현 API이다.
다이렉트쇼(DirectShow)
동영상,mp3 등의 멀티미디어 재생 API. 2005년 4월이후 DirectX SDK에서 완전히 제외되었으며, 현재는 Windows (Platform) SDK 에 포함된 상태.
다이렉트플레이(DirectPlay)
네트워크 게임을 위한 API 제공, 다이렉트엑스 8 이후로 개발이 중단되었다.
다이렉트컴퓨트(DirectCompute)
다이렉트X 11에 포함된 그래픽 프로세서를 통한 범용 연산 API, 다이렉트 10까지 지원하는 그래픽카드에 대응한다.
DirectX 대안
DirectX 계열의 응용 프로그램 프로그래밍 인터페이스에 대한 대안으로 대부분의 기능이 있는 OpenGL이 있다. 이 밖에도 SDL, 알레그로, 오픈맥스, OpenAL, FMOD가 있다. 이 라이브러리들 가운데 대다수가 크로스플랫폼이거나 오픈 코드에 기반을 두고 있다.
또, DirectX와 똑같은 API를 둔 다른 대안으로 와인을 들 수 있다.
라이브러리 (컴퓨팅)
라이브러리(영어: library)는 주로 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임이다. 여기에는 구성 데이터, 문서, 도움말 자료, 메시지 틀, 미리 작성된 코드, 서브루틴(함수), 클래스, 값, 자료형 사양을 포함할 수 있다. OS/360 및 이후 세대에서는 파티션 데이터 세트로 부른다.
라이브러리 (컴퓨팅) 역사
라이브러리와 유사한 최초의 프로그래밍 개념들은 프로그램 구현체로부터 데이터를 분리하기 위한 의도였다. JOVIAL은 1959년 "COMPOOL" (Communication Pool)이라는 개념을 통해 주목을 끌었으나 이는 대형 시스템 SAGE 소프트웨어로부터 개념을 가져온 것이다. 관심사 분리와 정보 감춤이라는 컴퓨터 과학 원칙을 따라, Comm Pool의 목적은 중점이 되는 데이터 기술을 제공함으로써 수많은 프로그램들 간에 시스템 데이터 공유를 허가하는 것이었다.
코볼 또한 1959년에 라이브러리 시스템을 위한 원시적인 기능을 포함했으나, Jean Sammet은 회상을 통해 이를 "적절하지 않은 라이브러리 기능"으로 정의하였다.
현대의 라이브러리 개념은 주로 포트란의 서브프로그램 이노베이션의 형태로 나타났다. 포트란의 서브프로그램들은 서로 개별적으로 컴파일할 수 있지만 컴파일러에 링커가 존재하지 않았다. 그러므로 포트란-90의 모듈 도입 이전까지는 포트란 서브 프로그램들 사이에 자료형 검사가 불가능했다.
라이브러리 (컴퓨팅) 역사
마침내, 이 개념의 사학자들은 영향력 있는 시뮬라 67을 기억해냈다. 시뮬라는 최초의 객체 지향 프로그래밍 언어로, 이 언어의 클래스가 자바, C++, C 샤프에 쓰인 현대의 개념과 매우 근접했다. 시뮬라의 클래스 개념은 또한 에이다의 패키지, 모듈라-2의 모듈의 조상이었다. 원래 1965년에 개발되었음에도 시뮬라 클래스들은 라이브러리 파일에 포함되어 컴파일 타임에 추가될 수 있었다.
라이브러리 (컴퓨팅) 라이브러리 링크
라이브러리는 링크 또는 바인드 작업에 중요하며, 라이브러리 모듈에 대한 링크나 심볼이라는 참조를 해결한다. 링크 과정은 일반적으로 링커나 바인더 프로그램을 이용하여 자동으로 수행되며, 주어진 순서대로 라이브러리 및 다른 모듈의 집합을 검색한다. 주어진 라이브러리 집합에서 링크 대상을 여러 번 발견하는 것은 오류로 간주되지 않는 것이 일반적이다. 링크는 실행 파일이 만들어질 때나 프로그램이 런타임에 사용될 때마다 수행된다.
라이브러리 (컴퓨팅) 구분
정적 라이브러리는 컴파일러가 소스 파일을 컴파일할 때 참조되는 프로그램 모듈이다. 즉, 정적 라이브러리(statically-linked library)는 루틴(routine) 외부 함수와 변수들의 집합으로 컴파일러, 링커, 바인더 등에 의해 목표된 애플리케이션으로 복사되어 오브젝트 파일과 독립적으로 실행할 수 있는 실행 파일을 생성하는데에 사용된다. 윈도의 .LIB파일과 같이 .a의 확장자를 갖고 있다.
동적 라이브러리는 프로그램 수행 도중 해당 모듈이 필요할 때 불러쓰는 프로그램 모듈이다. 윈도우에서는 주로 DLL 확장자를 가지며, 리눅스에서는 주로 SO 확장자를 가진다.
라이브러리 (컴퓨팅) 공유 라이브러리
공유 라이브러리 또는 공유 오브젝트는 실행 파일, 더 나아가 공유 오브젝트 파일에 의해 공유될 목적으로 만들어진 파일이다.
동적 링크 라이브러리
동적 링크 라이브러리(영어: dynamic-link library, DLL)는 마이크로소프트 윈도우 또는 OS/2 운영체제의 공유 라이브러리이다. DLL에는 실행 코드(함수), 데이터 및 리소스가 포함될 수 있다.
DLL 파일은 일반적으로 파일 확장자 .dll을 사용하지만 필수는 아니다. 이 확장자는 때때로 파일의 내용을 설명하는 데 사용된다. 예를 들어, .ocx는 ActiveX 컨트롤에 대한 일반적인 확장자이며 .drv는 레거시(16비트) 장치 드라이버에 대한 확장자이다.
리소스만 포함하는 DLL은 리소스 DLL이라고 불릴 수 있다. 예시로는 일반 확장자 .icl을 가진 아이콘 라이브러리, 그리고 일반 확장자 .fon 및 .fot을 가진 글꼴 라이브러리가 있다.
동적 링크 라이브러리
DLL의 파일 형식은 실행 파일(일명 EXE)과 동일하다. DLL 파일과 EXE 파일의 주요 차이점은 운영 체제가 실행을 시작하기 위해 엔트리 포인트를 요구하기 때문에 DLL을 직접 실행할 수 없다는 점이다. 윈도우는 DLL이 노출하는 함수를 실행하기 위한 유틸리티 프로그램(RUNDLL.EXE/RUNDLL32.EXE)을 제공한다. 동일한 형식을 가지므로 EXE도 DLL로 사용될 수 있다. 소비 코드는 DLL을 로드하는 것과 동일한 메커니즘을 통해 EXE를 로드할 수 있다.
동적 링크 라이브러리 배경
마이크로소프트 윈도우의 초기 버전은 단일 주소 공간에서 프로그램을 함께 실행했다. 모든 프로그램은 그래픽 사용자 인터페이스(GUI)가 멀티태스킹하고 최대한 응답할 수 있도록 CPU를 다른 프로그램에 양보하여 협력하도록 되어 있었다. 모든 운영 체제 수준 작업은 기본 운영 체제인 MS-DOS에 의해 제공되었다. 모든 상위 수준 서비스는 윈도우 라이브러리 "동적 링크 라이브러리"에 의해 제공되었다. 드로잉 API, 그래픽 장치 인터페이스(GDI)는 GDI.EXE라는 DLL에 구현되었고, 사용자 인터페이스는 USER.EXE에 구현되었다. DOS 위에 있는 이러한 추가 레이어는 1메가바이트 미만의 RAM을 가진 컴퓨터에서 윈도우가 작동할 수 있도록 할 뿐만 아니라 프로그램들이 서로 협력할 수 있도록 모든 실행 중인 윈도우 프로그램에서 공유되어야 했다. GDI의 코드는 드로잉 명령을 특정 장치에서의 작업으로 변환해야 했다. 디스플레이에서는 프레임 버퍼의 픽셀을 조작해야 했다. 프린터에 그릴 때는 API 호출이 프린터 요청으로 변환되어야 했다. 제한된 장치 세트(예: 컬러 그래픽스 어댑터 디스플레이, HP 레이저젯 프린터 명령 언어)에 대한 하드코딩된 지원을 제공할 수 있었지만, 마이크로소프트는 다른 접근 방식을 선택했다. GDI는 "장치 드라이버"라고 불리는 다른 코드 조각을 로드하여 다른 출력 장치와 작동하도록 했다.
동적 링크 라이브러리 배경
GDI가 다른 장치 드라이버를 로드할 수 있게 한 동일한 아키텍처 개념은 윈도우 셸이 다른 윈도우 프로그램을 로드하고, 이러한 프로그램들이 공유 USER 및 GDI 라이브러리에서 API 호출을 호출할 수 있게 했다. 그 개념이 바로 "동적 링크"였다.
기존의 비공유 정적 라이브러리에서는 코딩 단계에서 실행 파일이 빌드될 때 호출 프로그램에 코드 섹션이 단순히 추가된다. 두 프로그램이 동일한 루틴을 호출하는 경우, 해당 루틴은 두 프로그램의 링크 단계에서 모두 포함된다. 동적 링크에서는 공유 코드가 단일의 별도 파일에 배치된다. 이 파일을 호출하는 프로그램은 런타임에 운영 체제(또는 윈도우 초기 버전의 경우 OS 확장)가 바인딩을 수행하면서 연결된다.
초기 버전의 윈도우(1.0 ~ 3.11)의 경우 DLL은 전체 GUI의 기반이 되었다. 따라서 디스플레이 드라이버는 단순히 .DRV 확장자를 가진 DLL로, 통합된 장치 드라이버 인터페이스(DDI)를 통해 동일한 드로잉 API의 사용자 지정 구현을 제공했으며, 드로잉(GDI) 및 GUI(USER) API는 단순히 .EXE 확장자를 가진 GDI 및 USER 시스템 DLL이 내보내는 함수 호출이었다.
동적 링크 라이브러리 배경
동적으로 로드되는 라이브러리 컬렉션에서 운영 체제를 구축하는 이 개념은 윈도우의 핵심 개념이며 2015년 기준 현재까지 유지되고 있다.
DLL은 공유 라이브러리의 표준 이점인 모듈화를 제공한다. 모듈화를 통해 여러 애플리케이션에서 공유되는 단일 자체 포함 DLL의 코드와 데이터를 애플리케이션 자체를 변경하지 않고도 변경할 수 있다.
모듈화의 또 다른 이점은 플러그인을 위한 일반 인터페이스를 사용하는 것이다. 애플리케이션 자체를 수정하지 않고도 기존 애플리케이션에 이전 모듈과 새로운 모듈을 런타임에 원활하게 통합할 수 있는 단일 인터페이스가 개발될 수 있다. 이러한 동적 확장성 개념은 액티브X의 기반이 되는 컴포넌트 오브젝트 모델에서 극대화된다.
동적 링크 라이브러리 배경
윈도우 1.x, 2.x, 3.x에서는 모든 윈도우 응용 프로그램이 동일한 주소 공간과 메모리를 공유했다. DLL은 이 주소 공간에 한 번만 로드되었으며, 그 이후로는 라이브러리를 사용하는 모든 프로그램이 DLL에 액세스했다. 라이브러리의 데이터는 모든 프로그램에서 공유되었다. 이는 간접적인 형태의 프로세스 간 통신으로 사용될 수도 있었고, 의도치 않게 다른 프로그램을 손상시킬 수도 있었다. 윈도우 95에서 32비트 라이브러리가 도입되면서 각 프로세스는 자체 주소 공간에서 실행되었다. DLL 코드는 공유될 수 있지만, 공유 데이터가 라이브러리에 의해 명시적으로 요청되지 않는 한 데이터는 비공개이다. 그러나 윈도우 95, 윈도우 98, 윈도우 미의 상당 부분은 16비트 라이브러리로 구축되었으며, 이는 출시 당시 펜티엄 프로 마이크로프로세서의 성능을 제한하고 궁극적으로 DOS 기반 윈도우 버전의 안정성과 확장성을 제한했다.
동적 링크 라이브러리 한계
DLL 기술은 윈도우 아키텍처의 핵심이지만 단점도 있다.
DLL 지옥은 잘못된 버전의 DLL이 사용될 때 애플리케이션이 비정상적으로 동작하는 것을 설명한다. 완화 전략은 다음과 같다.
DLL의 실행 코드는 호출 프로세스의 메모리 공간에서 동일한 접근 권한으로 실행된다. 이는 사용 시 오버헤드가 적다는 것을 의미하지만, DLL에 어떤 종류의 버그가 있을 경우 호출 프로그램에 대한 보호가 거의 없다는 것을 의미하기도 한다.
동적 링크 라이브러리 특징
DLL 기술은 소비 구성 요소를 다시 컴파일하거나 다시 링크할 필요 없이 애플리케이션을 수정할 수 있도록 한다. DLL을 교체하면 다음번에 애플리케이션을 실행할 때 새로운 DLL 버전을 사용한다. 올바르게 작동하려면 DLL 변경 사항이 하위 호환성을 유지해야 한다.
운영 체제도 DLL을 통해 애플리케이션에 노출되기 때문에 업그레이드할 수 있다. 시스템 DLL을 교체하면 다음번에 애플리케이션을 실행할 때 새로운 시스템 DLL을 사용한다.
윈도우 API에서 DLL 파일은 섹션으로 구성된다. 각 섹션은 쓰기 가능 또는 읽기 전용, 실행 가능(코드용) 또는 비실행 가능(데이터용) 등 자체 속성 집합을 갖는다.
동적 링크 라이브러리 특징
DLL의 코드는 일반적으로 DLL을 사용하는 모든 프로세스 간에 공유된다. 즉, 물리적 메모리의 한 곳을 차지하며, 페이지 파일의 공간을 차지하지 않는다. 윈도우는 DLL에 대해 위치 독립 코드를 사용하지 않는다. 대신, 코드는 로드될 때 재배치되어 DLL을 로드하는 첫 번째 프로세스의 메모리 공간에서 사용 가능한 위치에 모든 진입점의 주소를 고정한다. 모든 실행 중인 프로세스가 단일 공통 주소 공간을 차지했던 이전 버전의 윈도우에서는 DLL 코드의 단일 복사본이 모든 프로세스에 항상 충분했다. 그러나 각 프로그램에 대해 별도의 주소 공간을 사용하는 최신 버전의 윈도우에서는 각 프로그램이 DLL 코드를 수용할 수 있는 동일한 가상 주소를 가지고 있는 경우에만 여러 프로그램에서 동일한 재배치된 DLL 복사본을 사용할 수 있다. 일부 프로그램(또는 이미 로드된 DLL의 조합)에 해당 주소가 비어 있지 않으면, 다른 재배치된 진입점 세트를 사용하여 DLL 코드의 추가 물리적 복사본을 생성해야 한다. 코드 섹션이 차지하는 물리적 메모리를 회수해야 하는 경우, 해당 내용은 버려지고 필요할 때 DLL 파일에서 직접 다시 로드된다.
동적 링크 라이브러리 특징
코드 섹션과 달리 DLL의 데이터 섹션은 일반적으로 비공개이다. 즉, DLL을 사용하는 각 프로세스는 DLL의 모든 데이터의 자체 사본을 갖는다. 선택적으로 데이터 섹션을 공유하여 이 공유 메모리 영역을 통해 프로세스 간 통신을 허용할 수 있다. 그러나 사용자 제한이 공유 DLL 메모리 사용에 적용되지 않으므로, 이는 보안 허점을 생성한다. 즉, 한 프로세스가 공유 데이터를 손상시킬 수 있으며, 이는 다른 모든 공유 프로세스가 원치 않는 방식으로 동작하게 할 가능성이 높다. 예를 들어, 게스트 계정으로 실행되는 프로세스가 이러한 방식으로 권한 있는 계정으로 실행되는 다른 프로세스를 손상시킬 수 있다. 이는 DLL에서 공유 섹션 사용을 피해야 하는 중요한 이유이다.
동적 링크 라이브러리 특징
특정 실행 파일 압축기(예: UPX)에 의해 DLL이 압축되면 모든 코드 섹션이 읽기 및 쓰기로 표시되며 공유되지 않는다. 읽기-쓰기 코드 섹션은 개인 데이터 섹션과 마찬가지로 각 프로세스에 비공개이다. 따라서 공유 데이터 섹션을 가진 DLL은 여러 프로그램에서 동시에 사용될 경우 압축해서는 안 된다. 각 프로그램 인스턴스가 DLL의 자체 복사본을 가지고 있어야 하므로 메모리 소비가 증가하기 때문이다.
정적 라이브러리와 마찬가지로, DLL의 가져오기 라이브러리는 .lib 파일 확장자로 표시된다. 예를 들어, 파일 생성 및 메모리 관리와 같은 윈도우 기본 함수의 주 동적 라이브러리인 kernel32.dll은 kernel32.lib를 통해 링크된다. 가져오기 라이브러리와 실제 정적 라이브러리를 구별하는 일반적인 방법은 크기이다. 가져오기 라이브러리는 실제 DLL을 참조하는 심볼만 포함하고 링크 시간에 처리되므로 훨씬 작다. 그러나 둘 다 유닉스 ar 형식 파일이다.
동적 링크 라이브러리 특징
동적 라이브러리로의 링크는 일반적으로 실행 파일을 빌드하거나 링크하여 생성할 때 가져오기 라이브러리로 링크함으로써 처리된다. 생성된 실행 파일은 모든 DLL 함수 호출이 참조되는 가져오기 주소 테이블(IAT)을 포함한다(각 참조된 DLL 함수는 IAT에 자체 항목을 포함한다). 런타임에 IAT는 별도로 로드된 DLL의 함수를 직접 가리키는 적절한 주소로 채워진다.
시그윈/MSYS 및 MinGW에서 가져오기 라이브러리는 관례적으로 .dll.a 접미사를 사용하며, 윈도우 DLL 접미사와 유닉스 ar 접미사를 모두 결합한다. 파일 형식은 유사하지만 가져오기를 표시하는 데 사용되는 심볼이 다르다(_head_foo_dll vs __IMPORT_DESCRIPTOR_foo). GNU 바이너리 유틸리티 도구 체인이 가져오기 라이브러리를 생성하고 링크할 수 있지만, DLL에 직접 링크하는 것이 더 빠르다. MinGW의 실험 도구인 genlib은 MSVC 스타일 심볼로 가져오기 라이브러리를 생성하는 데 사용할 수 있다.
동적 링크 라이브러리 특징
DLL이 내보내는 각 함수는 숫자 서열 번호와 선택적으로 이름으로 식별된다. 마찬가지로 함수는 서열 번호 또는 이름으로 DLL에서 가져올 수 있다. 서열 번호는 DLL 내보내기 주소 테이블에서 함수의 주소 포인터 위치를 나타낸다. 내부 함수는 서열 번호로만 내보내는 것이 일반적이다. 대부분의 윈도우 API 함수는 다른 윈도우 릴리스에서도 이름만 유지되며, 서열 번호는 변경될 수 있다. 따라서 서열 번호로 윈도우 API 함수를 안정적으로 가져올 수 없다.
서열 번호로 함수를 가져오는 것은 이름으로 가져오는 것보다 약간 더 나은 성능을 제공한다. DLL의 내보내기 테이블은 이름순으로 정렬되어 있으므로 이진 검색 알고리즘을 사용하여 함수를 찾을 수 있다. 찾아진 이름의 인덱스는 내보내기 서열 번호 테이블에서 서열 번호를 찾는 데 사용된다. 16비트 윈도우에서는 이름 테이블이 정렬되지 않아 이름 조회 오버헤드가 훨씬 더 눈에 띄었다.
동적 링크 라이브러리 특징
또한 실행 파일을 특정 DLL 버전에 바인딩할 수 있다. 즉, 컴파일 시간에 가져온 함수의 주소를 해결하는 것이다. 바인딩된 가져오기의 경우 링커는 가져오기가 바인딩된 DLL의 타임스탬프와 체크섬을 저장한다. 런타임에 윈도우는 동일한 버전의 라이브러리가 사용 중인지 확인하고, 그렇다면 가져오기 처리를 건너뛴다. 그렇지 않거나 라이브러리가 바인딩된 것과 다르면 윈도우는 일반적인 방식으로 가져오기를 처리한다.
동적 링크 라이브러리 특징
바인딩된 실행 파일은 컴파일된 환경과 동일한 환경에서 실행될 경우 다소 빠르게 로드되고, 다른 환경에서 실행될 경우 정확히 동일한 시간에 로드되므로 가져오기를 바인딩하는 데 단점이 없다. 예를 들어, 모든 표준 윈도우 응용 프로그램은 해당 윈도우 릴리스의 시스템 DLL에 바인딩된다. 응용 프로그램의 가져오기를 대상 환경에 바인딩할 좋은 기회는 응용 프로그램 설치 중이다. 이렇게 하면 다음 OS 업데이트까지 라이브러리가 "바인딩된" 상태로 유지된다. 그러나 실행 파일의 체크섬이 변경되므로 서명된 프로그램이나 파일 버전을 관리하는 데 체크섬(예: MD5 체크섬)을 사용하는 구성 관리 도구에 의해 관리되는 프로그램에서는 수행할 수 없다. 최근 윈도우 버전이 모든 로드된 라이브러리에 대해 고정된 주소를 갖는 방식에서 벗어나면서(보안상의 이유로) 실행 파일을 바인딩할 기회와 가치가 감소하고 있다.
DLL 파일은 런타임에 명시적으로 로드될 수 있는데, 마이크로소프트에서는 이를 단순히 런타임 동적 링크라고 부른다. 이는 LoadLibrary(또는 LoadLibraryEx) API 함수를 사용하여 수행한다. GetProcAddress API 함수는 이름으로 내보낸 심볼을 찾는 데 사용되며, FreeLibrary는 DLL을 언로드하는 데 사용된다. 이러한 함수는 POSIX 표준 API의 dlopen, dlsym, dlclose와 유사하다.
명시적 런타임 링크 절차는 함수 포인터를 지원하는 모든 언어에서 동일하며, 언어 구성이 아닌 윈도우 API에 의존한다.
일반적으로 DLL의 가져오기 라이브러리에 연결된 애플리케이션은 DLL을 찾을 수 없으면 시작되지 않는다. 윈도우는 애플리케이션이 필요할 수 있는 모든 DLL을 찾을 수 없는 한 애플리케이션을 실행하지 않기 때문이다. 그러나 애플리케이션은 동적 라이브러리의 지연 로딩을 허용하도록 가져오기 라이브러리에 연결될 수 있다.
이 경우 운영 체제는 애플리케이션 시작 시 DLL을 찾거나 로드하려고 시도하지 않는다. 대신, 링커에 의해 애플리케이션에 스텁이 포함되어 있어, 해당 함수 중 하나가 호출될 때 LoadLibrary 및 GetProcAddress를 통해 DLL을 찾고 로드하려고 시도한다. DLL을 찾거나 로드할 수 없거나 호출된 함수가 존재하지 않으면 애플리케이션은 예외를 생성하며, 이는 적절히 처리될 수 있다. 애플리케이션이 예외를 처리하지 않으면 운영 체제에 의해 잡히고 오류 메시지와 함께 프로그램이 종료된다.
지연 로딩 메커니즘은 DLL이 로드될 때 및 DLL 함수가 호출될 때 애플리케이션이 추가 처리 또는 오류 처리를 수행할 수 있도록 알림 훅을 제공한다.
동적 링크 라이브러리 컴파일러 및 언어 고려 사항
소스 파일에서 program 대신 library 키워드가 사용된다. 파일 끝에는 exports 절에 내보낼 함수가 나열된다.
델파이는 DLL에서 함수를 가져오기 위해 LIB 파일이 필요하지 않다. DLL에 링크하려면 함수 선언에서 external 키워드를 사용하여 DLL 이름을 지정하고, 이어서 심볼 이름(다른 경우)을 지정하는 name 또는 인덱스를 식별하는 index를 사용한다.
비주얼 베이직 (VB)에서는 런타임 링크만 지원되지만, LoadLibrary 및 GetProcAddress API 함수를 사용하는 것 외에도 가져온 함수의 선언이 허용된다.
선언을 통해 DLL 함수를 가져올 때, VB는 DLL 파일을 찾을 수 없으면 런타임 오류를 생성한다. 개발자는 오류를 잡아 적절히 처리할 수 있다.
동적 링크 라이브러리 컴파일러 및 언어 고려 사항
VB에서 DLL을 만들 때 IDE는 ActiveX DLL만 만들 수 있도록 허용하지만, 사용자가 각 내보낸 함수의 순서 위치와 이름을 정의하는 .DEF 파일을 포함하도록 링커에 명시적으로 지시할 수 있는 방법이 만들어졌다. 이를 통해 사용자는 Visual Basic (버전 6 이하)을 사용하여 "Declare" 문을 통해 참조할 수 있는 표준 윈도우 DLL을 만들 수 있다.
마이크로소프트 Visual C++ (MSVC)는 C++ 표준에 여러 확장을 제공하여 함수를 C++ 코드에서 직접 가져오거나 내보낼 수 있도록 한다. 이러한 확장 기능은 GCC의 윈도우 버전을 포함한 다른 윈도우 C 및 C++ 컴파일러에서 채택되었다. 이 확장 기능은 함수 선언 앞에 __declspec 속성을 사용한다. C 함수가 C++에서 액세스될 때 C++ 코드에서도 extern "C"로 선언되어야 컴파일러에 C 링크를 사용해야 한다고 알려야 한다.
동적 링크 라이브러리 컴파일러 및 언어 고려 사항
__declspec 속성을 사용하여 가져오거나 내보낸 함수를 지정하는 것 외에도, 프로젝트에서 사용하는 DEF 파일의 IMPORT 또는 EXPORTS 섹션에 나열할 수 있다. DEF 파일은 컴파일러가 아닌 링커에 의해 처리되므로 C++에만 국한되지 않는다.
DLL 컴파일은 DLL 및 LIB 파일을 모두 생성한다. LIB 파일(가져오기 라이브러리)은 컴파일 시간에 DLL에 연결하는 데 사용되며 런타임 링크에는 필요하지 않다. DLL이 컴포넌트 오브젝트 모델(COM) 서버가 아닌 한, DLL 파일은 PATH 환경 변수에 나열된 디렉터리 중 하나, 기본 시스템 디렉터리 또는 DLL을 사용하는 프로그램과 동일한 디렉터리에 배치되어야 한다. COM 서버 DLL은 regsvr32.exe를 사용하여 등록되며, 이는 DLL의 위치와 전역 고유 ID(GUID)를 레지스트리에 배치한다. 그러면 프로그램은 레지스트리에서 GUID를 찾아 DLL의 위치를 찾거나 클래스 식별자와 인터페이스 식별자를 사용하여 COM 객체 인스턴스를 간접적으로 만들 수 있다.
동적 링크 라이브러리 프로그래밍 예시
다음 예시는 컴파일 시간에 DLL에 링크하기 위해 언어별 바인딩을 사용하여 심볼을 가져오는 방법을 보여준다.
델파이
C
Example.dll이 생성되었다고 가정하고 정적 링크 전에 프로젝트에 'Example.lib' 파일을 포함해야 한다. 'Example.lib' 파일은 DLL 컴파일 시 컴파일러에 의해 자동으로 생성된다. 위 문장을 실행하지 않으면 링커가 AddNumbers의 정의를 찾을 위치를 알 수 없어 링크 오류가 발생한다. 'Example.dll' DLL 파일도 다음 코드에 의해 .exe 파일이 생성되는 위치에 복사해야 할 수 있다.
다음 예시는 언어별 윈도우 API 바인딩을 사용하여 런타임 로딩 및 링크 기능을 사용하는 방법을 보여준다.
동적 링크 라이브러리 프로그래밍 예시
네 가지 샘플 모두 DLL 사전 로드 공격에 취약하다는 점에 유의해야 한다. example.dll이 저자가 의도하지 않은 위치로 확인될 수 있기 때문이다(애플리케이션 디렉터리가 시스템 라이브러리 위치보다 우선하지 않고, HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode 또는 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\CWDIllegalInDLLSearch가 없으면 현재 작업 디렉터리가 시스템 라이브러리 디렉터리보다 먼저 검색됨). 따라서 악성 라이브러리 버전에 취약하다. 마이크로소프트의 안전한 라이브러리 로딩에 대한 지침은 참조를 참조하라. 즉, 애플리케이션 디렉터리와 현재 작업 디렉터리를 DLL 검색 경로에서 제거하려면 kernel32의 SetDefaultDllDirectories를 사용하거나, 현재 작업 디렉터리를 DLL 검색 경로에서 제거하려면 kernel32의 SetDllDirectoryW를 사용해야 한다.
파이썬 ctypes 바인딩은 POSIX 시스템에서 POSIX API를 사용한다.
동적 링크 라이브러리 컴포넌트 오브젝트 모델
컴포넌트 오브젝트 모델(COM)은 DLL 및 EXE 파일에 객체의 구현을 호스팅하기 위한 바이너리 표준을 정의한다. 이는 해당 파일을 찾고 버전을 지정하는 메커니즘과 언어 독립적이고 기계 판독 가능한 인터페이스 설명을 제공한다. DLL에 COM 객체를 호스팅하는 것은 더 가볍고 클라이언트 프로세스와 리소스를 공유할 수 있도록 한다. 이를 통해 COM 객체는 Visual Basic 및 ASP와 같은 간단한 GUI 프런트엔드에 강력한 백엔드를 구현할 수 있다. 또한 스크립팅 언어에서도 프로그래밍할 수 있다.
동적 링크 라이브러리 DLL 하이재킹
DLL 하이재킹, DLL 스푸핑, DLL 프리로드 또는 바이너리 플랜팅으로 흔히 알려진 취약점으로 인해, 많은 프로그램은 이러한 프로그램이 연 데이터 파일과 동일한 폴더에 포함된 악성 DLL을 로드하고 실행한다. 이 취약점은 2000년에 게오르기 구닌스키에 의해 발견되었다.
2010년 8월 ACROS Security가 이를 재발견하고 수백 개의 프로그램이 취약한 것으로 밝혀지면서 전 세계적으로 주목을 받았다.
안전하지 않은 위치, 즉 다운로드 또는 임시 디렉터리와 같이 사용자가 쓰기 가능한 폴더에서 실행되는 프로그램은 거의 항상 이 취약점에 취약하다.
인도네시아의 주
인도네시아의 행정 구역은 총 38개의 주로 구성되어 있다. 이 가운데 아체주, 욕야카르타 특별주, 자카르타 3개 주와 서뉴기니의 6개 주는 특별주로 지정되어 있다.
서뉴기니(Western New Guinea, 서파푸아(West Papua), 뉴기니섬의 서반부 지역)
서파푸아주(Papua Barat, 옛 이름은 서이리안자야주(Irian Jaya Barat))
남서파푸아주(Papua Barat Daya), 2022년 서파푸아주에서 분리되어 신설
파푸아주(Papua, 옛 이름은 이리안자야주(Irian Jaya))
중앙파푸아주(Papua Tengah), 2022년 파푸아주에서 분리되어 신설
파푸아고원주(Papua Pegunungan), 2022년 파푸아주에서 분리되어 신설
남파푸아주(Papua Selatan), 2022년 파푸아주에서 분리되어 신설
인도네시아의 주
수마트라섬(Sumatera)
아체주(Nanggröe Aceh Darussalam)
방카블리퉁주(Kepulauan Bangka Belitung)
븡쿨루주(Bengkulu)
잠비주(Jambi)
람풍주(Lampung)
리아우주(Riau)
리아우 제도주(Kepulauan Riau)
남수마트라주(Sumatera Selatan)
서수마트라주(Sumatera Barat)
북수마트라주(Sumatera Utara)
인도네시아의 주 제안한 새로운 주
칼리만탄(Kalimantan, 보르네오섬의 인도네시아 영토)
누산타라 수도특수지역(Daerah Khusus Ibu Kota Negara Nusantara), 출처 지역은 동칼리만탄주이다.
대카푸아스주(Kapuas Raya), 출처 지역은 서칼리만탄주이다.
탄중푸라주(Tanjungpura), 출처 지역은 서칼리만탄주이다.
대바리토주(Barito Raya), 출처 지역은 중앙칼리만탄주이다.
코타와링인주(Kotawaringin), 출처 지역은 중앙칼리만탄주이다.
안토니 판 레이우엔훅
안토니 필립스 판 레이우엔훅 FRS(네덜란드어: Antoni Philips van Leeuwenhoek FRS, 네덜란드어 발음: [ˈɑntoːni vɑn ˈleːu.ə(n)ˌɦuk] ( 듣기), 1632년 10월 24일~1723년 8월 26일)은 네덜란드의 미생물학자, 현미경 과학자이다. 미생물학의 아버지로 알려져 있으며 현미경의 발달과 미생물학의 정립에 큰 공헌을 하였다. 그는 스스로 렌즈를 갈아 만든 현미경으로 단세포 생물을 관찰하였다.