Season 1 아카이브
<뭐든 시작하면 어떻게든 된다> - 목표가 달라지는 것은 자연스러운 현상
2018. 8. 26.그때그때마다 자기가 계속 달려갈 수 있게끔 해주는 가장 효과적인 생각을 적용하면 그만이다. 정답은 없다.3가지를 동시에 하면 최단거리로 달릴 수 있다. 3가지 병행이 시간적으로 힘들다고 생각할 수도 있는데, 오히려 바로 그런 점이 이 방법의 핵심이다. 자연히 효율적인 시간 사용법을 궁리하게 되고, 무엇보다 질리지 않는다. 사람은 늘 성장하고 새로운 깨달음을 얻기 때문에 목표가 달라지는 것은 자연스러운 현상이다. 성장했기 때문에 보이게 되는 경치 혹은 현재 당신이 모르는 세계도 많다. '이 행동의 목적은 뭐지?'하고 스스로에게 되물어라. 목적이 있다면 무엇이든 쓸데없는 행동은 없다. 공을 멀리날리기 위해 똑바로 위로 던지는 사람은 없는데도, 노력에 관해서는 - 왠지는 몰라도 - 던지는 각도가 너무 크거나 ..
Strings, bytes, runes and characters in Go - (4) Range loops, Libraries
2018. 8. 25.Strings, bytes, runes and characters in Go Range loopsGo 가 UTF-8 을 특별히 다루는 하나의 방법은 문자열에 for range 루프를 사용할 때이다. for range 루프의 경우, 각각의 반복에서 하나의 UTF-8-encoded rune 을 디코딩한다. 루프를 도는 동안, 루프의 인덱스는 현재 rune 의 시작점으로 바이트로 측정되며, 코드 포인트는 그것의 값이 된다. 코드포인트의 유니코드 값과 출력 형태를 보여주는 다음의 예를 보자. 1234567891011package main import "fmt" func main() { const nihongo = "日本語" for index, runeValue := range nihongo { fmt.Print..
Strings, bytes, runes and characters in Go - (3) Code points, characters, and runes
2018. 8. 25.Strings, bytes, runes and characters in Go 유니코드 표준은 단일값으로 표현되는 아이템에 대해 "code point" 라는 용어를 사용한다. 코드포인트 U+2318 은 hexadecimal 값 2318을 갖고 ⌘ 기호로 표현된다(더욱 자세한 내용은 Unicode page 참조). 다른 예를 들어보면, 유니코드 코드 포인트 U+0061 은 LATIN SMALL LETTER A 인 a이다. 그러면 다음과 같은 억음 부호 'A', à 는 어떤가? 물론 문자이고, 코드 포인트 U+00E0 를 갖는다.하지만, 다르게 볼 수도 있다. 아래의 억음 부호 코드 포인트 U+0300 에 U+0061 인 소문자 a를 덧붙인 것으로 말이다. 일반적으로 문자는 얼마간의 서로 다른 코드 포인트의 ..
Strings, bytes, runes and characters in Go - (2) UTF-8 and string literals
2018. 8. 25.Strings, bytes, runes and characters in Go 문자열은 단순히 바이트를 나열해놓은 것이다. 문자를 문자열로 저장할 때, byte-at-a-time representation 을 저장하는 셈이다. 하나의 문자를 가진 문자열 상수를 다음의 3가지 서로 다른 방법으로 출력하는 간단한 프로그램을 만들어보자.plain stringASCII-only quoted stringindividual bytes in hexadecimal 123456789101112131415161718192021package main import "fmt" func main() { const placeOfInterest = `⌘` fmt.Printf("plain string: ") fmt.Printf("%s"..
Strings, bytes, runes and characters in Go - (1) Printing strings
2018. 8. 25.Strings, bytes, runes and characters in Go Go에서 문자열이란 사실 '읽기전용' 바이트 슬라이스라고 할 수 있다. \xNN 표기법을 사용하는 다음의 예를 보자 (바이트는 hexadecimal 값으로 00 에서 FF 까지의 값을 가진다)1const sample = "\xbd\xb2\x3d\xbc\x20\xe2\x8c\x98"cs앞선 예제의 일부 바이트는 ASCII 나 UTF-8 이 아니다. sample 을 출력하면 다음과 같이 흉한 결과물이 나올 것이다 (환경에 따라 출력되는 모양은 다소 다를 수 있다).123fmt.Println(sample) ▒▒=▒ ⌘cs문자열이 어떤 값을 가지고 있는지 정확히 알아보기 위해서, 부분부분 나눠서 살펴볼 필요가 있다. 몇 가지 방법이 있..
고Go 웹서버 만들기 Build a simple web server
2018. 8. 25.Go 는 net/http 패키지를 통해 HTTP 를지원한다. http 패키지를 사용하여 웹서버를 셋팅해보자. 1234567891011121314151617181920212223242526272829package main import ( "fmt" "net/http" "strings" "log") func sayhelloName(w http.ResponseWriter, r *http.Request) { r.ParseForm() // parse arguments, you have to call this by yourself fmt.Println(r.Form) // print form information in server side fmt.Println("path", r.URL.Path) fmt.Println..
How to Write Go Code - Code organization
2018. 8. 24.Workspace작업공간은 Git 등에 의해 관리되는 다수의 버전 관리 저장소를 포함하고 있다. 각각의 저장소는 하나 이상의 패키지를 포함하고 있으며, 각각의 패키지는 단일 디렉토리에 하나 이상의 Go 소스파일로 구성된다. 패키지 디렉토리 경로에 따라 import 경로가 정해진다. 특히 이 점이 프로젝트별로 별도의 작업공간을 갖게 되는 여타 프로그래밍 환경과 다른 점이다. 그리고 작업공간은 버전 관리 저장소와 밀접히 연계되어 있다. 작업공간은 최상단에 3개의 디렉토리를 가진 디렉토리 계층구조를 말한다. src 에는 Go 소스 파일이 들어있다.pkg 디렉토리에는 패키지 객체를 포함한다.bin 디렉토리에는 실행가능한 명령어가 포함되어 있다.go tool 은 소스 패키지를 빌드하고, 결과물인 바이너리를 패키지..
Go 프로그램 삭제 Uninstalling Go
2018. 8. 24.시스템에 존재하는 Go 를 제거할려면, go 디렉토리를 삭제하면 된다. 일반적으로 리눅스, 맥, FreeBSD의 경우 /usr/local/go 에 위치하고, 윈도우의 경우 c:\Go 디렉토리에 존재한다. 그리고 PATH 환경변수에 설정된 Go bin 디렉토리도 삭제해야 한다. 리눅스와 FreeBSD 의 경우 /etc/profile 또는 $HOME/.profile 을 편집해야 한다. Mac OS X 패키지로 설치한 경우 /etc/paths.d/go 파일을 삭제해야 한다. 윈도우 사용자의 경우 환경 변수 섹션을 참고하자.
Go 프로그램 설치 및 테스트 Install the Go tools
2018. 8. 24.설치 파일 다운로드 하단 링크에서 운영체제에 맞는 설치 파일을 다운로드한다. 본 포스팅에서는 리눅스 기반으로 진행한다. https://golang.org/dl/파일을 다운로드한 후 다음과 같이 /usr/local/go 디렉토리를 만들어 압축을 해제한다 (일반적으로 root 계정이나 sudo 를 통해 진행해야 한다).1# tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gzcs/etc/profile (system-wide 인 경우) 또는 $HOME/.profile 파일을 열어 /usr/local/go/bin 을 PATH 환경변수에 추가한다. 12345# /etc/profile: system-wide .profile file for the Bourne shell (sh(..
Luminus 를 이용한 Clojure 방명록 만들기 (5) - 테스트 및 패키지화
2018. 8. 23.Luminus 를 이용한 Clojure 방명록 만들기 (5) Adding some tests이제 어플리케이션이 작동할 준비를 마쳤다. 몇 가지 테스트를 하기 위해 test/clj/guestbook/test/db/core.clj 파일을 열어 다음과 같이 업데이트해보자. /home/fukaerii/guestbook/test/clj/guestbook/test/db/core.clj12345678910111213141516171819202122232425262728(ns guestbook.test.db.core (:require [guestbook.db.core :refer [*db*] :as db] [luminus-migrations.core :as migrations] [clojure.test :refer :..
Test failed in clojure luminus guestbook tutorial
2018. 8. 23.guestbook 튜토리얼을 진행하는 중 마지막 테스트 단계에서 아래의 실패 메시지가 나오는 경우를 만날 수 있다.123456789101112131415161718192021222324252627282930313233~/guestbook$ lein test2018-08-23 08:21:32,895 [main] DEBUG org.jboss.logging - Logging Provider: org.jboss.logging.Slf4jLoggerProvider lein test guestbook.test.db.core2018-08-23 08:21:34,884 [main] INFO migratus.core - Starting migrations2018-08-23 08:21:34,909 [main] INFO mig..
Luminus 를 이용한 Clojure 방명록 만들기 (4) - 페이지 생성 및 폼입력 다루기
2018. 8. 23.Luminus 를 이용한 Clojure 방명록 만들기 (4) Creating Pages and Handling Form Inputguestbook.routes.home 네임스페이스에 경로가 정의되어 있습니다. 그러면 파일을 열어서 데이터베이스로부터 메시지를 렌더링하는 로직을 넣어보겠습니다. Bouncer 검증과 ring.util.response 레퍼런스와 함께 db 네임스페이스 레퍼런스를 추가해야합니다. /home/fukaerii/guestbook/src/clj/guestbook/routes/home.clj12345678(ns guestbook.routes.home (:require [guestbook.layout :as layout] [compojure.core :refer [defroutes GET ..
AICPA 시험에서 말하는 테스팅 윈도우(Testing Windows)란 무엇인가?
2018. 8. 23.예전에 한 번 언급해드린 내용입니다만, 응시주와 관련된 내용도 있어 다시 한 번 더 포스팅해봅니다.일단 Notice to Schedule (NTS)를 수령하게 되면, 이제 응시일을 정할 때가 온 것입니다. 컴퓨터로 치러지는 AICPA 시험은 매 쿼터마다 시험을 볼 수 있는데요, 응시 가능한 달을 테스팅 윈도우(testing windows)라고 보통 부릅니다.시험 스케줄링을 할 때, 계획을 잘 짜셔야 합니다. 이미 알고 계시겠지만, AICPA 시험은 매쿼터 마지막 달에는 시스템 및 데이터뱅크 유지 보수 관계로 진행되지 않는 것이 원칙입니다. 올해는 3, 6, 9, 12월 1~10일까지 시험이 있기는 합니다.먼저 봐야하는 과목이 따로 정해져있는 것은 아니므로, 어떤 과목이든 편한대로 예약하시면 됩니다. 하지..
Luminus 를 이용한 Clojure 방명록 만들기 (3) - 어플리케이션 구동
2018. 8. 21.Luminus 를 이용한 Clojure 방명록 만들기 (3) Running the Application다음과 같이 개발모드에서 어플리케이션을 구동할 수 있다.1234567891011121314151617~/guestbook$ lein run2018-08-21 10:14:21,661 [main] DEBUG org.jboss.logging - Logging Provider: org.jboss.logging.Slf4jLoggerProvider2018-08-21 10:14:23,384 [main] INFO guestbook.env --=[guestbook started successfully using the development profile]=-2018-08-21 10:14:23,578 [main] INFO..
Luminus 를 이용한 Clojure 방명록 만들기 (2) - H2 데이터베이스 생성 및 접근
2018. 8. 21.Luminus 를 이용한 Clojure 방명록 만들기 (2) Creating the Database먼저 어플리케이션을 위한 모델을 만들어야 한다. 마이그레이션 폴더에 위치한 -add-users-table.up.sql 파일을 열어보자. 다음과 같은 내용이 포함되어 있을 것이다. 1~/guestbook/resources/migrations$ nano 20180821033932-add-users-table.up.sqlcs 1234567891011 CREATE TABLE users(id VARCHAR(20) PRIMARY KEY, first_name VARCHAR(30), last_name VARCHAR(30), email VARCHAR(30), admin BOOLEAN, last_login TIMESTAMP,..
Luminus 를 이용한 Clojure 방명록 만들기 (1) - 프로젝트 생성 및 루미너스 어플리케이션 구조
2018. 8. 21.Luminus 를 이용한 Clojure 방명록 만들기 (1)Creating a new applicationLeiningen 은 이미 설치되어 있다면, 다음의 명령으로 어플리케이션을 초기화할 수 있다.설치 이전이라면 다음 링크를 참조 http://redhotkorea.tistory.com/1769123$ lein new luminus guestbook +h2Retrieving luminus/lein-template/3.0.1/lein-template-3.0.1.pom from clojars Colored by Color Scriptercs이를 통해 H2 임베디드 데이터베이스 엔진을 지원하는 새로운 템플릿 프로젝트가 생성된다. Anatomy of a Luminus application새롭게 생성한 어플리케이..
AICPA 시험의 필수사이트, CPA Central 이란 무엇인가?
2018. 8. 21.NASBA에서는 CPA Central (https://cpacentral.nasba.org/) 인터페이스를 업그레이드하였습니다. 예전에 비하면, 산뜻한 디자인에 유용한 기능을 담고 있습니다. CPA Central 이란, AICPA 시험에 있어 NASBA의 핵심이 되는 사이트로, CPA Central 사이트 한 곳에서 시험을 마치는 순간까지 필요한 모든 것을 지원합니다. CPA Central 은 크게 홈페이지와 사용자 대시보드로 이루어져있습니다. 홈페이지는 다음에 대한 주요링크를 제공하고 있습니다. Learn more about the exam,Take the exam in an international location,Get your scores and related items,Reprint docume..
수리부엉이는 황혼에 날아오른다 (2) 지하 2층에서 일어나는 일
2018. 8. 19.p.81제 경우 소설의 아이디어 같은 걸 적어두는 일은 별로 없어요 손을 움직여 글을 쓰면서 생각하는 타입이라, 일정 분량 이상의 글을 쓰는 작업이 중요합니다. 일단 한 덩어리의 글을 써놓고 조금씩 손대며 고쳐나가고 그 사이 내 안에서 무언가가 자동적으로 움직이기 시작하는.... 그런 걸 기다리는데, 여기에도 역시 시간이 필요해요. 써놓고 한두 달 지나면 소설이 된냐 하면 그건 아니거든요. 아무래도 반년에서 일 년, 일 년에서 이녀이 세월이 필요합니다. p.82네 일단 씁니다, 만약 친구가 와주지 않더라도 와줄법한 환경을 만들어둬야죠. 저쪽에 방석을 좀 깔아놓고 청소도 하고, 책상도 닦고, 차도 내려두고, 아무도 오지 않을 때는 그런 '밑준비'라도 해두는 겁니다. 아무도 안 오니깐 오늘은 실컷 낮ㅈㅁ이나..
탈옥의 키, 무개념 명상 - 위험 속에서는 의식이 단전에 모아진다
2018. 8. 19.위험 속에서는 의식이 단전에 모아진다. 딴 생각을 하면서 앉아 있을 수 없다. 생각할 틈도 없이 즉각적으로 행동해야 한다. 담이 무너지면 피해야 한다. 어떤 동작을 한 상태에서 장시간 머물게 하거나 단순한 동작을 극단적으로 반복하여 고통을 만들어 간다. 그러면 우리 몸은 극한 한계 상황에 처하게 되고 모든 잡념이 사라지게 된다. 힘들게 3천배를 하다보면 망념이 빠져나가는 원리와 같다. 무념의 경지에 이르게 되는 것이다. 태어난지 1년을 조금 지나 곧바로 뇌성마비에 걸린 어린 소녀의 오체투지 기록 p.125 불교에서는 '나무아미타불 관세음보살' 같은 진언이 있다. 이것은 단순한 단어나 문장이 아니라 우리의 의식을 보다 높은 차원으로 데리고 가는 정화 작용을 한다. 비교적 짧은 주문을 진언이라고 하며 긴 것..
클로저 12. 제어문 - 기본적인 논리검사
2018. 8. 18.식과 형식식은 평가될 수 있는 코드, 형식은 평가될 수 있는 적법한 식 class 함수12345 user=> (class true)java.lang.Booleanuser=> cs true? false?함수불린 true 및 불린 false 값인지를 알려주는 함수클로저에서는 함수의 결과가 boolean 인 경우 함수 이름 끝에 ? 를 붙이는 것이 관례1234567 user=> (true? true)trueuser=> (true? false)falseuser=> cs nil? 함수값이 없음을 검사하는 함수1234567 user=> (nil? nil)trueuser=> (nil? 1)falseuser=> cs not 함수부정negation 표현인수가 논리적 거짓이면 true 반환, 그렇지 않으면 false 반환..
클로저 11. 함수 만들기 - 이름공간에서 심볼 관리 (2) require
2018. 8. 18.require 를 사용해서 자신의 이름공간에서 라이브러리를 사용할 수 있는 3가지 방법1) 이름공간을 인수로 받아 require 를 사용하는 것clojure.set 이름공간이 REPL이 시작될 때 로딩된다. 그렇지 않은 경우 require 를 사용해서 작업을 직접할 수 있다.123456789 user=> (clojure.set/union #{:r :b :w} #{:w :p :y})#{:y :r :w :b :p}user=> user=> (require 'clojure.set)niluser=> Colored by Color Scriptercs2) :as 를 사용해서 require 의 별칭 기능을 이용하는 것심볼 이름 앞에 원래의 이름공간 대신 별칭을 붙여서 심볼에 접근할 수 있다.12345678910 use..
클로저 10. 함수 만들기 - 이름공간에서 심볼 관리 (1)
2018. 8. 18.ns 를 이용하여 이름 공간을 새로 만들고 그 이름공간으로 전환할 수 있다.이제 디폴트 이름공간이 user 에서 alice.favfoods 로 바뀌었음을 알 수 있다. 현재 이름공간을 나타내는 *ns*라는 명령을 통해 이를 확인할 수 있다. 123456789 user=> (ns alice.favfoods)nilalice.favfoods=> alice.favfoods=> *ns*#object[clojure.lang.Namespace 0x44fdc648 "alice.favfoods"]alice.favfoods=> Colored by Color Scriptercs여기에서 var 를 정의하면, 그 var 는 직접 접근할 수 있다. 이름공간을 포함하는 완전한 이름인 alice.favfoods/fav-food 를 ..
클로저 09. 함수 만들기 - defn, fn, 그리고 무명함수
2018. 8. 18.'함수를 만들고 그것에 심볼을 할당하고 그 함수를 호출한다.' defn 은 def 와 비슷하지만, 함수를 위한 var 를 만든다. defn 은 함수이름, 함수 인수들의 벡터, 함수 본문을 인수로 받는다 (빈벡터를 사용하여 함수를 인수없이 호출할 수도 있다)함수를 호출하려면 함수를 괄호로 둘러싸서 사용하면 된다. 함수를 호출하면 클로져는 그 함수를 평가한 후 결과를 반환한다. 인수없이 정의한 예1234567 user=> (defn follow-the-rabbit [] "Off we go!")#'user/follow-the-rabbituser=> (follow-the-rabbit)"Off we go!"user=> Colored by Color Scriptercs인수로 2개의 잼을 받고 그 잼들을 포함하는 맵..
AICPA 시험 테스팅 윈도우와 시험결과 발표일정
2018. 8. 17.CPA 시험은 1년에 4번 치뤄집니다. 보통 그 기간을 “testing windows” 라고 부릅니다. 분기별로 살펴보면 다음과 같습니다.Q1: 1/1 ~ 3/10Q2: 4/1 ~ 6/10Q3: 7/1 ~ 10/10Q4: 11/1 ~ 12/10 해당 테스팅 윈도우에 시험을 치루기 위해서는 응시원서를 작성한 후 NTS (Notice to Schedule) 를 수령해야 합니다.아래 표는 테스팅 윈도우별 시험 결과 발표일을 나타내고 있습니다. 이 중 2018 Q2, Q3 Q4 테스팅 윈도우에는 스코어 홀딩 기간이 있습니다. 이 부분에 대해 더 자세히 알고 싶다면 2018 score holds in the Exam FAQ 섹션을 참고하세요. Testing Window: January 1 - March 10 (Q..
클로저 08. 심볼과 바인딩 - def, var, let
2018. 8. 17.def 는 값에 이름을 줘서 참조 가능하게 한다. 심볼에 직접 값을 바인딩하지 않고 var 를 통해서 한다.예를 통해 살펴보자. 12345 user=> (def developer "Alice")#'user/developeruser=> csdef 는 위에서 보는 바와 같이 이름공간 user 에 심볼인 developer 를 위한 var 객체를 만들었다.이제 REPL 에서 developer 을 평가하면 "Alice" 로 평가된다. 심볼 앞에 / 를 붙여서 이름공간을 지정할 수도 있다. 즉, var 의 완전한 이름은 이름공간/var의 이름인 셈이다.하지만 여기서는 현재의 이름공간이 var 의 이름공간과 같기 때문에 developer 만 사용한 것이다. 12345 user=> (def user/developer ..
클로저 07. 데이터 컬렉션 - 리스트가 핵심
2018. 8. 17.맨 앞에 붙은 ' 기호가 리스트를 만드는 역할을 한다. 이 인용기호가 필요한 이유는, LISP 에서는 식expression 의 첫 요소를 연산자나 함수로 인식하기 때문이다. 그 다음 요소들은 모두 연산자나 함수를 위한 인수로 인식된다.따라서 인용기호가 없으면, 아래에서 보듯이 문자열이 리스트의 첫 요소로 있어서 함수로 인식하여 호출하려고 하기 때문에, 에러를 발생시킨다. 문자열은 함수가 아니다. 12345678 user=> ("marmalade-jar" "empty-jar" "pickle-jam-jar")ClassCastException java.base/java.lang.String cannot be cast to clojure.lang.IFnuser/eval1302 (form-init689628077..
클로저 06. 데이터 컬렉션 - 집합
2018. 8. 17.집합은 유일한 값들의 컬렉션이다. 요소의 중복이 없는 컬렉션을 만들 때 유용하다. 집합은 #{} 로 둘러싼다.집합을 생성할 때는 당연히 중복은 허용되지 않는다.1234567 user=> #{:red :blue :white :pink}#{:white :red :blue :pink} user=> #{:red :blue :white :pink :pink}IllegalArgumentException Duplicate key: :pink clojure.lang.PersistentHashSet.createWithCheck (PersistentHashSet.java:68) Colored by Color Scriptercsunion, difference, intersection 과 집합연산이 가능하다. 집합연산을 하기..
클로저 05. 데이터 컬렉션 - 맵
2018. 8. 17.맵은 키-값 쌍으로 구조화된 데이터를 저장하는데 많이 사용된다. 맵은 중괄호 {} 로 둘러싸인다. 123user=> {:jam1 "strawberry" :jam2 "blackberry"}{:jam1 "strawberry", :jam2 "blackberry"} Colored by Color Scriptercsget 함수로 값을가져온다. 123user=> (get {:jam1 "strawberry" :jam2 "blackberry"} :jam2)"blackberry" Colored by Color Scriptercs키가 없을 경우 반환되는 값을 디폴트로 줄 수 있다. get 함수의 마지막 인수로 디폴트 값 주면 된다. 1234 user=> (get {:jam1 "strawberry" :jam2 "blackb..
클로저 04. 데이터 컬렉션 - 컬렉션의 공통점
2018. 8. 17.모든 컬렉션은 불변immutable이고 존속적persistent이다.cons 를 통해 컬렉션에 요소를 요청하게 되면, 원래의 컬렉션은 변하지 않고, 단지 그 요소가 추가된 새로운 버전의 컬렉션이 반환된다. 존속(persistent)이란 구조 공유(structual sharing)라는 기법으로 컬렉션의 신규 버전이 효율적으로 만들어진다는 것을 의미한다. 존속이라는 개념은 저장장치와 관련이 없고, 데이터가 갱신되었지만, 이전 버전의 값이 지워지지 않고 그대로 보존됨을 의미한다.컬렉션은 다음의 함수를 지원한다.시퀀스 함수 (first, rest, last) 를 지원한다.count 함수는 컬렉션의 크기를 반환한다.conj 함수는 컬렉션에 하나 이상의 요소를 추가한다. 그 컬렉션의 데이터 구조에 가장 효율적인 방..
클로저 03. 데이터 컬렉션 - 벡터
2018. 8. 17.벡터벡터는 중간에 있는 요소를 가져오고자 할 때 유용하다. 인덱스 접근이 필요할 때 유용한 셈이다. 벡터는 대괄호로 둘러싸서 만든다.벡터에도 first 와 rest 가 등장한다.123456789 user=> [:jar1 1 2 3 :jar2][:jar1 1 2 3 :jar2]user=> (first [:jar1 1 2 3 :jar2]):jar1user=> (rest [:jar1 1 2 3 :jar2])(1 2 3 :jar2)user=> Colored by Color Scriptercs 벡터는 인덱스를 통해 요소에 빠르게 접근가능하다.1234567891011121314151617 user=> (nth [:jar1 1 2 3 :jar2] 0):jar1user=> (nth [:jar1 1 2 3 :jar2] ..