Difference between revisions of "쏠쓰 코드"

Jump to navigation Jump to search
1,311 bytes added ,  06:44, 17 April 2020
(Created page with "== 단어 == Source code. 디지털 기기의 소프트웨어 내용을 프로그래밍 언어로 나타낸 설계도. 보통 이용하게 되는 프로그램...")
 
 
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
== 단어 ==
{{Template:바로 가기}}
[[Source code]]. 디지털 기기의 [[소프트웨어]] 내용을 [[프로그래밍 언어]]로 나타낸 설계도. 보통 이용하게 되는 [[프로그램]]들은 이 [[쏠쓰 코드]]를 [[컴파일]]한 것이다. 쏠쓰 코드 없이 이진 파일만으로 프로그램의 설계를 유추해내는 것은 대단히 어렵다. 그래서 간혹가다 [[인디 게임]]([[indie game]], [[independent game]], [[독립 게임]], 전문 개발 업체가 아닌 개인이나 소규모 단체가 개발한 게임)이나 프로그램에서 쏠쓰 코드를 잃어버려서 개발/업데이트를 못한다는 말이 간간히 보인다. [[소스 코드]]가 공개된 것을 [[오픈 쏠쓰]]([[open source]])라고 부른다.
<div style="float: right; margin-left: 12px">__TOC__</div>


== 영화 ==
== 개요 ==
attachment:/Source_Code.jpg?width=300
[[쏠쓰 코드]] ([[source code]], [[쏘쓰 코드]], [[쏘스 코드]], [[소스 코드]])
포스터에 써있는 SF액션의 진화는 그냥 홍보용으로 붙인거고, 실제로는 액션이 중심인 영화가 아니다.


|| '''장르''' ||[[SF]]||
[[원시 코드]]라고도 한다.
|| '''러닝 타임''' ||93분||
|| '''개봉일시''' ||2011.05.04||
|| '''감독''' ||덩컨 존스[* 《[[더 문]]》이 데뷔작이며 소스 코드는 두 번째 영화. 음악인 [[데이비드 보위]]의 아들].||
|| '''출연''' ||[[제이크 질렌할]], 미셸 모나한||
|| '''국내등급''' ||12세 관람가||
=== 개요 ===
주어진 8분의 시간을 계속 반복하여 열차를 폭파한 테러리스트를 추적한다는 기본 설정을 바탕으로, 그 8분간을 어떻게 활용하느냐에 따라 전혀 다른 전개가 펼쳐지는 이색적인 영화. 사실 시간을 반복한다는 요소는 《[[사랑의 블랙홀]]》 같은 고전 걸작에서 이미 써먹었던 설정이지만, 소스 코드는 이 위에다 [[평행우주]]를 도입해 더 세련되게 표현하였다.
=== 개봉 후 ===
전년도 나온 《[[인셉션]]》과 비교되며 2010년에는 《인셉션》이 있었다면 2011년엔 《소스 코드》다! 소리를 들을 정도로 호평을 받았다. 평론가들의 평가도 좋았다.제작비 3200만 달러를 들여 북미 흥행 5470만 달러, 월드와이드 합계 1억 4700만 달러를 벌어들이는 등 흥행에도 성공했다.
=== 스토리 ===
[[include(틀:스포일러)]]
==== 모든게 시작되는 열차 ====
문득 정신을 차리고 보니 콜터 스티븐스 대위(제이크 질렌할)은 자신이 열차에서 모르는 여자와 한창 대화 중이었다는걸 깨닫는다. 그는 자신을 콜터 스티븐스 대위이며 헬기 조종사이고, 아프가니스탄에 있어야할 자신이 왜 시카고로 가는 열차에 있냐고 여성에게 묻는다. 대화 상대 크리스티나 워런(미셸 모나한)[* 영화 시작부터 등장하지만 이름이 나오는건 좀 진행이 된 다음이다.]은 자신을 계속 역사 교사 숀 펜트리스라고 부르고, 어찌된 상황인지 몰라하던 콜터는 곧 열차가 폭발물에 의해 폭파되는 상황에 처해 목숨을 잃는다. 그리고 그는 죽음과 동시에 깨어나게 되는데...
==== 갇힌 공간과 반복되는 8분 ====
한번 죽은 다음 정신을 차린 대위가 깨어난 곳은 어느 밀폐된 캡슐같은 공간. 그곳에서 굿윈이라는 여성 장교가 당신은 임무 수행중이라며 기억요법으로 모든걸 떠올리게 만든다. 대강 기억을 떠올린 대위는 다시한번 8분의 시간에 빠져들고, 그 8분의 세계는 아침에 있었던 열차 테러 사고의 희생자 숀 펜트리스라는 남자의 뇌에 접속하여 같은 시간을 반복하는 것이었다. 계속해서 8분을 반복하면서, 완전히 다른 용의자를 따라가다가 허탕을 치기도 하고, 여주인공의 마음을 캐내기도 하며, 총을 몰래 꺼내려다 전기 충격기에 맞아 허탕을 치는 뻘짓(…)을 하면서 서서히 진상에 접근하다가, 대위는 자신이 이미 아프간에서 죽었으며[* 그래도 영화속에서는 꿈꾸는 것처럼 안면신경을 움직인다. 다만 팔과 허리가 잘려 생명유지장치에 연결된 상태.] 그 자신도 숀 펜트리스의 경우처럼 소스 코드로 이용당하고 있었단 걸 깨닫는다. 여러 시도 끝에 범인을 붙잡아 이름을 캐내는데 성공하고, 굿윈에게 정보를 전달한 그는 마지막 접속을 부탁하며, 접속한 후 8분이 지나면 자신을 죽여달라고 굿윈에게 부탁한다. 접속이 시작되고, 8분이 지나자 약속대로 접속을 끊는 굿윈. 마지막으로 대위는 기차 속에 있는 코미디언에게 자신들을 웃기게 하면 100 달러치(지갑에는 126달러가 있었다.)내기를 하고[* 아마도 최악의 순간에도 모두가 행복한 순간에 삶을 끝내려고 그런것으로 추측된다.] 그곳에 있는 모든 탑승객이 웃는 상황에서 콜터와 크리스티나는 키스를 하고 세상이 멈추는 장면은 이 영화 희대의 명장면이다.
==== 그리고 새로운 시작 ====
영원히 멈출것 같은 세계가 다시 활동하기 시작하며 이제는 숀 펜트리스로써의 삶을 시작한 콜터 스티븐스. 소스 코드는 개발한 사람들이 생각했던 것보다 막강했기 때문에, 콜터 스티븐스가 활약했던 평행세계가 접속을 끊음과 동시에 다른 평행우주로 분리되었던 것. 콜터 스티븐스 대위는 새로 형성된 세계의 굿윈에게 연락을 보내어 이곳에서 소스 코드 임무를 수행하게 된 콜터 스티븐스를 잘 부탁한다며 안부를 보내며 영화는 끝이 난다.


참고로 굿윈 보고 새 콜터에게 모두 잘될 거라고 말해주라면서 영화가 끝나는 이 부분에 복선이 있는데 대사는 영화 시작할 때 굿윈이 콜터보고 말해주던 대사이기 때문이다. 게다가 초반부에 이상하게도 소스 코드를 가동하고 싶지만 그럴 만한 사건이 일어나지 않는다는 대사도 있다. --굿다운로더 및 웹 유출본에선 편집된 내용인지 안 나오는 대사들이다-- 즉 이 영화에서 다뤄지는 부분이 첫 루프가 아닐 수도 있다는 것. [흠좀무].[* 사실, 깊이 파고들면 여러 가지로 헛점이 많다. Groundhog Days처럼 그냥 그러려니 하면서 감동만 갖고 넘어가자.]
디지털 기기의 소프트웨어를 만들 수 있도록 [[프로그래밍 언어]]로 작성한 설계도. 프로그래머가 정의한 키워드들과 언어 자체에 정해진 예약어와 기호들로 의미를 가지도록 만들어진 문서의 일부 혹은 전체를 말한다. 보통 이용하게 되는 프로그램들은 이 소스 코드를 [[컴파일]]한 것이다.


영화 중간 중간에도 복선이 깔리는데 주인공이 현실로 돌아오는 시점은 언제나 "8분 리미트가 끝난 후"가 아니라 "주인공이 죽은 후"였다. 기차 밖에서 기차가 터진 다음 다른 기차에 깔려 죽거나, 범인을 잡으러 따라갔다가 총에 맞아 죽었을 때 등은 모두 '8분이 지난 시점'이었으나 즉시 현실로 돌아가지 않았으며, 죽었을 때 비로소 돌아갔던 것을 보면 알 수 있다. 즉, 소스 코드 속에서 죽지 않는 이상은 현실로 돌아오지 않음을 간접적으로 깔아둔 것.
위 문장이 무슨 의미인지 전혀 모르겠다면, 다음의 설명을 읽어 보자.
=== 영화의 난이도 ===
제2의 《인셉션》 소리를 들으며 영화를 보고 많은 게시물들이 올라왔지만, 사실 애니메이션이나 라노벨을 통해 [[평행우주]]나 양자역학, [[루프물]] 등을 자주 접해왔던 오덕들한테는 영화가 별 무리없이 다가왔고, --솔직히, 인셉션과 비교하는 것은 무리다. 오덕들도 인셉션은 이해하기 어려워하거든-- 오히려 일반 관객층들이 이해하는데 고생했다. 인터넷 게시판 보면 시간여행물로 잘못 이해하여 과거를 바꾸어 주인공이 살아남았다는 식으로 이해하는 사람도 많다. 그러나 《소스 코드》의 번역가는 이런 사소함도 놓치지 않았으니...--놓쳤어야 했는데--
=== 홍주희 크리 ===
영화 번역가 [[홍주희]]가 이 영화의 번역을 맡으면서, 관객들이 혹여나 이해를 못했을까 우려하여 엔딩 크레딧에다 친절히 단어 설명을 해주는 드립을 시전하였다. 영화 자체가 결말이 여운이 강한 타입이라 이 친절은 더 끔찍한 폐해로 다가왔으며 [[듀나]]도 자신의 칼럼에서 홍주희를 깠다. [http://entermedia.co.kr/news/news_view.html?idx=305&page=4&bc=&mc=&find=&sch_date= 링크] 영화 《[[메멘토]]》가 비디오로 나왔을때 크레딧으로 친절히 설명해줬던 것과 다를바 없는 드립.


[[category:프로그래밍]]
컴퓨터 소프트웨어(프로그램)를 만들 때는 [[설계도]]가 필요하다. 소스 코드가 바로 그 설계도다. 그것도 개념만 나타낸 추상적인 설계도가 아니라(그런 건 [[순서도]]라고 한다), 당장 컴퓨터에 입력만 하면 진짜로 프로그램을 완성할 수 있는 매우 세밀하고 구체적으로 짜여진 설계도다. 이름인 '''소스''' 코드 중 “소스”(source, 근원)가 이를 의미하는 것으로, 프로그램의 근원이란 뜻이다.
[[category:소프트웨어]]
 
[[category:KHW]]
건축물의 설계도나 전자기계의 회로도가 주로 기호(그림)로 이루어져 있듯, 컴퓨터 프로그램의 설계도인 소스 코드는 프로그래밍 언어로 작성되어 있다. 따라서 (언어라는 표현으로부터 짐작할 수 있겠지만) 그 언어의 문법만 알면 사람도 소스 코드를 읽고 그 뜻을 이해할 수 있다. 실제로 소스 코드를 보면 영문자와 숫자, 몇 가지 특수문자 등으로 쓰여져 있고, “set”, “value”, “push” 등 영어 단어 비슷한 것도 종종 보인다.
 
이런 단어와 기호, 숫자를 정해진 규칙에 따라 조합하면 컴퓨터에게 특정한 작업을 시킬 수 있는 명령이 만들어진다. 즉 소스 코드에 빽빽하게 나열되어 있는 문장들은 대부분이 "컴퓨터, 키보드로부터 특정 입력이 들어오면 해당 이벤트를 A라는 객체에 전달해라" 라든지 “컴퓨터, 이 변수가 특정한 값이 될 때까지  B라는 연산을 반복해라" 등과 같은, 컴퓨터에게 내리는 명령 목록인 것이다. 이렇게 프로그래밍 언어로 작성한 명령어들을 “코드”(code)라 부르기에, 프로그램의 설계도를 소스 '''코드'''라 부르는 것이다.
 
진정한 컴맹이라면 “건물을 지을 때는 설계도 외에 시멘트나 철근도 필요하고, 전자회로를 만들 때는 회로도 외에도 기판과 부품이 필요한데, 컴퓨터 프로그램은 설계도만 있으면 다른 재료가 하나도 없어도 만들 수 있단 말인가?” 하는 의문이 들 수도 있겠다. 허나 컴퓨터 프로그램은 오로지 정보로만 이루어져 있기 때문에, 설계도만 있어도 실물(?)을 만들 수 있다. 악보를 읽을 줄 아는 사람에게 노래를 시키려면 악보만 있으면 되는 것에 비유할 수 있을 것이다. 소스 코드는 악보, 프로그램은 컴퓨터가 부르는 노래라고 생각해도 좋을지도.
 
그런데 소스 코드에는 컴퓨터에게 내리는 명령 외에도 프로그래머 등의 인간이 읽고 참조할 수 있는 안내문도 포함되어 있다. 이런 것은 대개 코드의 기능을 설명하는 [[주석#s-3.4|주석]]이며, 개발 중인 프로그램일 경우 다른 작업자들에게 추가/삭제/변경된 코드의 변경 의도에 대해 설명하는 메모가 포함되어 있기도 하다.
 
또한 오픈 소스 소프트웨어나 기업이 제작한 상용 프로그램은 대개 여러 프로그래머들이 참여하는 대규모 프로젝트기 때문에, 주석을 잘 달아주는 것이 필수적일뿐더러 사람이 읽고 그 의미를 알기 쉽도록 작성하는 것이 좋다.[* 예를 들어 소스 코드에서 띄어쓰기는 해도 좋고 안해도 좋은 프로그래밍 언어가 많은데, 그래도 띄어쓰기를 해 주면 사람이 읽기가 훨씬 좋다.] 이와는 반대로 업계 표준에 맞게 논리적이고 간결하게 짜여져 있지 않은, 즉 읽기 불편한 소스 코드는 일명 [[스파게티(소스 코드)|스파게티]]라 불린다. [* 물론 컴퓨터에게는 소스 코드에 주석이 달려 있건 없건, 스파게티이건 아무 상관도 없다. 이런 것은 소스 코드를 접해야 하는 개발자 등의 인간을 위한 배려일 뿐. 컴퓨터 선정리가 엉망으로 되어있건 깔끔하게 되어있건 컴퓨터 성능에는 문제가 없는것과 같다.]
 
그런데, 사람이 읽을 수 있는 형태의 설계도(소스 코드)는 컴퓨터에게는 너무나 읽기 힘든 고차원적인(?) 내용이다. 때문에 컴퓨터가 읽을 수 있도록 아주 원초적인 레벨의 형태로 바꿔줘야 한다. 이렇게 바꿔주는 과정을 컴파일링/인터프리팅[* 컴파일링은 기계어로 된 번역물을 던져주고 인터프리팅은 한 줄씩 번역해서 바로 실행하는 차이가 있다.]이라 하며 이를 해 주는 컴퓨터 프로그램을 [[컴파일러]]/[[인터프리터]]라 하는데, 아무튼 그 결과물은 컴퓨터가 읽을 수 있는 형태인 [[기계어]]로 쓰여 있다. 이 결과물은 이진수로 쓰여 있다고 하여 “바이너리([[이진법|이진수]], binary)”라고도 하고 컴퓨터에서 실행이 된다고 하여 “실행파일(이그제큐터블, executable)”이라고도 하는데, 이게 우리가 일반적으로 말하는 컴퓨터 프로그램(소프트웨어)이다. 바이너리는 이진수로 쓰여져 있기 때문에 사람은 읽지 못하며, 억지로 뜯어봐도 1과 0만 어지럽게 나열되어 있을 뿐이다. [[16진수]]로 묶어도 뭥미? 소리만 나올 뿐.
 
학생 시절에 [[BASIC]]이나 [[Python]] 등으로 프로그래밍을 배워본 위키러라면 소스 코드를 본 적이 있는 셈이다. 그런데 위에서 언급한 컴파일러라든지 바이너리는 본적이 없을 것이다. 베이식이나 Python 같은 스크립팅 언어는 실행파일을 만들어놓아야하는 컴파일러 대신, 즉석에서 언어를 해석(인터프리트) 하여 컴퓨터가 실행할 수 있게 해주는 인터프리터를 사용하기 때문이다. 따라서 얘네들은 코드만 있고 바이너리 파일(실행 파일)이 따로 없다.[* 베이직용 컴파일러도 나와 있다. 인터프리터가 워낙 느리다 보니.]
 
상용 프로그램이 아닌 공개 프로그램 중에는, 실행파일(바이너리)뿐만 아니라 소스 코드까지 함께 다운로드할 수 있게 해놓은 경우도 많다. 그런데 다운로드 페이지를 좀 유심히 살펴봤다면, 바이너리는 윈도 PC용, 매킨토시용 등등 OS별로 구분되어 있는 데 반해 소스 코드는 OS 구분 없이 하나만 있음을 눈치챘을 것이다. 이는 소스 코드는 설계도이기 때문에 OS 종류에 관계없이 바이너리 제작에 이용할 수 있기 때문이다. 단 해당 프로그램이 OS 의존성이나 하드웨어 의존성이 낮은 경우에 한한다. 제아무리 소스 코드를 공개해놨다고 하더라도 윈도우용 디바이스 드라이버를 리눅스에서 컴파일해 쓸 순 없다.
 
공개 프로그램 중에는 다른 사용자/개발자들이 소스 코드를 들여다보고 연구 개발을 하는 것을 권장하기 위해 소스 코드를 공개하는 경우도 많다. 함께 힘을 합쳐 더 좋은 프로그램을 만들자는 초청 같은 것인데, 이렇게 공개(오픈)된 소스 코드를 갖는 프로그램을 [[오픈 소스]] 프로그램이라 부른다.
 
상용 프로그램 중에는 일부, 혹은 전부를 오픈 소스로 공개하는 경우도 있으나, 대부분은 오픈 소스가 아니다. 오픈은 커녕 [[영업비밀]]로 철저히 감춰지는 경우가 대부분이다.[* 그래서 해당 소스가 일부라도 유출되어서 사용되었을 경우 [[너 고소]]를 당할 수 있다. 이런 것들은 오픈 소스에 대비해서 클로즈드 소스라고 부른다.] [[리버스 엔지니어링|소스 코드 없이 바이너리 파일만으로 프로그램의 설계를 유추해내는 것]]은 --대단히 어렵다-- 귀찮고 까다로운 일이다.[* 2018년 현재는 디컴파일러가 많이 발전해서 바이너리로부터 소스 코드를 복원하는 게 크게 어렵진 않다. 특히 Java의 경우 거의 소스 코드 그대로 나와버리며 C로 만든 바이너리도 오픈 소스 라이브러리를 많이 땡겨쓴 경우 절반 이상 소스 코드가 복원돼 나온다.] 그래서 간혹가다 인디 게임이나 프로그램에서 포맷/바이러스 따위 때문에 소스 코드를 잃어버려서 개발/업데이트를 못한다는 말이 간간히 보인다. 물론 [[프리서버]]처럼(불법이기는 하지만) 기존 소스 코드에 기대지 않고 처음부터 다시 프로그래밍하여 기능을 복제하는 경우도 있기는 하다.
== 관련 문서 ==
* [[오픈 쏠쓰]] ([[open source]], [[오픈 쏘쓰]], [[오픈 쏘스]], [[오픈 소스]])
* [[쏘프트웨어]] ([[software]], [[소프트웨어]])
* [[프로그래밍 언어]]
* [[순서도]]
* [[트킨터]] ([[Tkinter]], [[티케이인터]])
 
[[Category:컴퓨터 공학]]
[[Category:컴퓨터]]
[[Category:오픈 쏠쓰]]
[[Category:오픈 쏘쓰]]
[[Category:오픈 쏘스]]
[[Category:오픈 소스]]
[[Category:쏠쓰 코드]]
[[Category:쏘쓰 코드]]
[[Category:쏘스 코드]]
[[Category:소스 코드]]
20

edits

Navigation menu