0036 External 방식의 CSS 적용


이제 <link /> 요소에 대해서 알았으니 외부의 CSS 파일을 HTML 페이지에 링크하는 External 방식의 CSS 적용을 시도해보도록 하자. 

     

우선, 우리가 할 일은 HTML 문서를 만들고 해당 문서에 스타일을 적용하기 위한 외부의 CSS 파일을 만드는 것이다. 

      

우선 사용할 HTML 파일은 앞서 만든 0034_1.html과 거의 유사하지만 <head> 영역에 <style> 요소 대신에 다음과 같은 <link /> 요소를 넣어 0036.html 파일을 만들도록 하자.

    

<link rel="stylesheet" type="text/css" href="0036.css" />


0036.css 는 우리가 앞으로 만들 외부 CSS 파일 이름이다. 해당 파일을 만들고 0036.html 파일과 0036.css 파일을 같은 디렉터리에 두면 정상적으로 웹페이지에 스타일이 적용될 것이다. 

    

물론, <title> 요소를 수정하여 웹페이지 제목도 변경한다.

   

다음과 같이 0036.html을 작성해보자. 

    

<!DOCTYPE html>

    

<html>

<head>

 <title>External CSS 적용</title>

 <link rel="stylesheet" type="text/css" href="0036.css" />

</head>

<body>

 <h1>h1 블록</h1>

 <h2>첫 번째 h2 블록</h2>

 <p>p블록 시작 <br /><br />p블록 끝</p>

 <h2>두 번째 h2 블록</h2>

 <p>2번 p블록 시작 <br /><br />2번 p블록 끝</p>

</body>

</html>


<head> 영역 내의 <link /> 요소에서 외부 CSS 파일을 링크하고 있지만 아직 해당 CSS 파일이 만들어지지 않았으므로 어떤 CSS 규칙도 HTML에 적용되지 않은 상황이다. 실행 결과는 다음과 같다.



이젠 외부(external) CSS 파일을 만들 차례다. 

    

메모장이나 텍스트 에디터를 열어 다음과 같이 작성하고 0036.css 파일로 저장해보자(0036.html 파일과 같은 디렉터리에 두어야 한다.).

    

/* h1 요소와 h2 요소의 

공통으로 글꼴(font)과 

글자색(color)을 설정 */

h1, h2 {

  font-family: sans-serif;

  color: blue;

}

/* h1 요소에 1픽셀 

두께의 빨간 실선으로 

밑줄을 만든다. */

h1 {

  border-bottom: 1px solid red;

}

/* 블록인 p 요소의 

텍스트를 가운데로 

정렬하고 글자색은 

빨간색으로 설정 */

p {

  text-align: center;

  color: red;

}


그리고 다시 0036.html을 새로고침 하거나 재실행해보면 그 결과는 다음과 같다. 



아래와 같이 CSS에서 주석(comment)을 다는 방법은 HTML과 다르다. 

    

HTML 주석 형식     <!-- 주석(comment) 내용 --> 

CSS 주석 형식   /* 주석(comment) 내용 */


위의 실행 결과에서 보듯이 주석은 웹페이지에 어떤 영향도 미치지 않는다. 그리고 여러 줄에 걸쳐서 주석을 달 수 있다. 

    

CSSborder 속성(property)이 경계선을 주는 속성이라면 border-bottom밑줄을 주는 속성이다. 속성을 정의하는 방식은 border와 동일하다.

    

border: 1px solid red;

border-bottom: 1px solid red;


위의 boder-bottom 선언(declaration)으로 1픽셀 두께의 빨간 실선으로 밑줄이 생김

   

그리고 text-align 속성은 텍스트의 정렬을 설정한다. 속성값을 center로 하면 텍스트가 가운데로 정렬된다.


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:  0036 External 방식의 CSS 적용.apkg







0035 External CSS 적용을 위한 <link /> 요소


앞에서 Inline 방식Internal 방식을 모두 사용해봤다. 마지막으로 External 방식을 사용해보아야 하는데 그 전에 <link /> 요소에 대해서 간단히 알아볼 필요가 있다.

    

<link /> 요소는 내용(content)이 없는 빈요소(empty element)이고 <head> 영역에 위치한다. CSS 파일 뿐만 아니라 다른 외부 소스(source)들HTML 문서에 링크하는 역할을 하기 때문에 <img /> 요소처럼 <link /> 요소도 여러 번 계속 사용할 수 있다. 하지만 주로 CSS 파일을 연결하는데 사용된다.

    

이번에는 아래와 같이 작성된 CSS 파일에 링크하는 <link />경우에 한정해서 살펴보자.

    

<link rel="stylesheet" type="text/css" href="myStyle.css" />


1. rel 속성(attribute)

    

rel 속성은 현재 문서와 링크된 자료 사이의 관계(relationship)를 특정하는 속성이다.

    

rel의 속성값 "stylesheet"<link>외부 자료HTML 웹페이지에 적용될 스타일 시트(stylesheet)라는 뜻이다.


2. type 속성(attribute)

   

type 속성은 링크로 연결된 자료의 인터넷 미디어 타입을 특정하는 속성이고 이러한 type에 속성값을 "text/css"로 주면 연결 링크된 외부 자료의 미디어 타입이 외부의 스타일 시트라는 것을 의미한다. 

    

type 속성은 앞서 공부한 순서가 있는 목록 요소 <ol>의 글머리 기호를 설정하는 type 속성과는 전혀 다르다(0028 HTML 순서가 있는 목록의 글머리 기호 바꾸기 참조 ).

    

<link /> 요소에 type 속성을 사용할 때는 반드시 href 속성을 설정해 주어야 한다.


3. href 속성(attribute)

    

href 속성은 링크로 연결할 외부 자료의 위치를 명시하는 속성이다. 속성값은 <img /> 요소의 src 속성과 마찬가지로 절대 경로(URL)상대 경로(relative path)이다. 이에 대해서는 0015 URL 간략하게 이해하고 연습하기0016 이미지를 보여주는 img 요소 01 사용법 및 src 속성을 참조하기 바란다. 

    

주의할 점은 <a> 요소에서 href 속성을 사용할 때, 아이디(id) 이동이 가능했는데 <link /> 요소의 href 속성은 그 특성상 아이디(id) 이동이 허용되지 않는다는 점이다.

    

href의 속성값으로 상대경로(relative path) "myStyle.css"가 주어졌으므로 외부(external) CSS 파일은 myStyle.css라는 파일명으로 스타일이 적용될 HTML 웹페이지 파일과 동일한 디렉터리에 있어야 한다.


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:  0035 External CSS 적용을 위한 link 요소.apkg







0019 HyperText 링크를 제공하는 앵커(anchor)의 <a> 요소 01 사용법 및 href 속성



1. <a> 요소의 기본적인 사용법


HTML월드와이드웹(www)에서 웹페이지를 부호화하고 HyperText 링크를 제공하는 언어이다. 이때, HyperText 링크를 제공하는 요소가 바로 앵커(anchor)를 의미하는 <a> 요소이다.

   

<a> 요소는 링크를 눌렀을 때 다른 페이지가 열려야 하므로 기본적으로 열어야할 목적지 주소와 링크로 제시될 내용이 포함되어 다음과 같은 형식으로 작성한다.

    

<a href="URL 또는 상대경로">내용(링크를 제시할 이미지 요소나 텍스트)</a>

    

<a> 요소의 내용(contents)은 이미지 요소나 텍스트 형식으로 링크가 어디로 연결될지 보여주는 라벨의 역할을 수행한다. 라벨은 브라우저에서 클릭할 수 있다는 것을 나타내기 위해 밑줄이 처진 상태로 보이고 그 위에 마우스 커서를 올리면 커서가 작은 손 모양으로 바뀐다.



2. href 속성


href 속성은 hypertext reference의 줄임말로 링크가 연결될 목적지 주소(destination address)<a> 요소에 부여하는 필수적인 속성이다. 웹 브라우저는 바로 이 href의 속성값을 읽어 목적지의 문서를 연결한다. <a> 요소에 href 속성이 없으면 웹 표준 위반이다.

   

다음의 HTML 문서를 작성해서 0019.html로 만들고  sun.jpg파일을 같은 디렉터리에 놓고 실행해보자. 

   

<!DOCTYPE html>

   

<html lang="ko">

 <head><title>0019 a요소의 href 속성</title></head>

 <body>

  <h2 id="first">a요소의 href 속성으로 다양한 링크 걸기</h1>

  <p>

   URL로 링크걸기 : 

    <a href="https://deliciouslearning.tistory.com/">책 씹어먹는 즐거움</a>

   <br /><br />

   이미지에 링크걸기(아래 사진)

   <br /><br />

    <a href="https://deliciouslearning.tistory.com/"><img src="sun.jpg" /></a>

   <br /><br />

   로컬 링크를 상대경로로 링크 :

    <a href="sun.jpg">일출사진</a>

   <br /><br />

   특정 id를 가진 요소로 이동:

    <a href="#first">id가 "first"인 요소로 이동</a>

   <br />

   빈 링크: <a href="#">빈 링크</a>

  </p>

 </body>

</html>


다음은 sun.jpg 파일이다. 




0019.html 파일은 웹 브라우저에 다음과 같이 나타난다. 

    



href 속성으로 제시할 수 있는 목적지의 형식은 URL, 상대경로, id 이동이 있는데 이를 위의 예제 웹페이지는 전부 집어넣어 보았다. 하나하나 살펴보자. 


URL로 링크걸기 : 책 씹어먹는 즐거움

   

이 부분에 해당하는 HTML<p> 요소 내부에 다음과 같이 작성된 부분이다.

    

URL로 링크걸기 : <a href="https://deliciouslearning.tistory.com/">책 씹어먹는 즐거움</a>


가장 흔히 볼 수 있는 URL로 링크 걸기이다. 외부 사이트에 링크를 만들 경우에는 URL을 이용하여 링크한다. URL에 대해서는 0015 URL 간략하게 이해하고 연습하기를 참조하길 바란다.


② 이미지에 링크걸기

   

그 다음은 이미지에 링크를 건 경우이다. 태양 사진이 있고 이를 클릭하면 본 블로그로 이동한다. 이는 <a> 요소 내부에 <img /> 요소를 아래와 같이 중첩시켜 만들었다(0019.html 파일과 sun.jpg 파일이 같은 디렉터리에 있어야 한다.).

    

이미지에 링크걸기(아래 사진)<br />

<a href="https://deliciouslearning.tistory.com/"><img src="sun.jpg" /></a>


로컬 링크상대경로로 링크

    

이 부분에 해당하는 HTML<p> 요소 내부에 다음과 같이 작성된 부분이다.

    

로컬 링크를 상대경로로 링크 : <a href="sun.jpg">일출사진</a>


상대경로에 대해서는 앞의 0016 이미지를 보여주는 img 요소 01 사용법 및 src 속성의 하단부에 정리된 src 속성에서 상대경로 작성법과 동일하다.

   

클릭하면 서버 내에 웹페이지 파일과 같은 디렉터리에 있는 sun.jpg 파일을 브라우저로 열게 된다. 이렇게 같은 사이트 내에서 서버 내부의 파일로 연결하는 링크를 로컬 링크(local links)라고 한다. 

    

로컬 링크의 경우에는 다음과 같은 이유에서 href 속성의 속성값으로 URL이 아닌 상대경로를 사용하도록 권장된다. 

     

html 소스가 상대적으로 짧아 가독성이 좋다

웹 서버를 옮기거나 URL이 변경되어도 디렉터리 구조를 그대로 유지하면 내부의 링크가 여전히 유효


④ 특정 id를 가진 요소로 이동

    

이 부분에 해당하는 HTML<p> 요소 내부에 다음과 같이 작성된 부분이다.

    

특정 id를 가진 요소로 이동: <a href="#first">id가 "first"인 요소로 이동</a>


이를 클릭하면 제목(<h2>요소)으로 되어 있는 “a요소의 href 속성으로 다양한 링크 걸기”로 이동한다. 이는 다음과 같이 제목의 요소(<h2>요소)아이디(id) 속성 "first"가 부여되어 있기 때문이다. 즉, href 속성값으로 "#first"가 부여되어 있으면 같은 페이지에 있는 요소 중에 아이디(id)"first"인 요소로 이동한다. 

   

<h2 id="first">a요소의 href 속성으로 다양한 링크 걸기</h1>


아이디(id) 속성은 원하는 요소(element)를 다른 요소와 구별되어 그 자체로 고유하게 만드는 속성이다. 똑같은 <h1> 요소라고 해도 아이디(id)를 통해서 다른 <h1> 요소와 구별되는 것이다. 나중에는 이 아이디(id) 속성을 이용하여 CSS로 특정 id의 요소만 스타일링 하거나, Javascript로 특정 id의 요소만 조작하는 등으로 응용할 수 있어 가장 많이 사용되는 속성(attribute) 중에 하나이다.

    

HTML 웹페이지의 요소에 필요한 아이디(id) 속성을 부여하고 이제 <a> 요소의 href 속성에 "#아이디" 형태의 문자열을 속성값으로 부여하면 같은 페이지에 있는 해당 아이디(id)를 가진 요소로 바로 이동할 수 있다. 

    

아이디(id)로 이동은 같은 페이지 내부의 이동에만 사용되는 것은 아니다. 앞서 배운 URL 뒤에 "#아이디" 형태의 문자열을 붙이거나, 상대경로의 뒤에 "#아이디" 형태의 문자열을 붙여서 다른 페이지의 해당 아이디(id)를 속성으로 가진 요소로 바로 이동할 수 있다. 가령, 다음과 같다.

    

https://www.ankilog.com/index.html#ankimanual

0019.html#first


아이디(id) 속성은 거의 대부분의 요소에 부여할 수 있고, 하나의 웹페이지에서 아이디(id)는 중복되지 말고 고유해야 한다. 아이디(id) 속성이 단일 웹 페이지에서 중복되어 있는 것은 웹 표준에 어긋난다. 만일 id 속성이 단일 웹페이지에서 중복되어 있으면 가장 먼저 나오는 요소로 이동한다.

    

아이디(id) 속성은 대소문자를 가리므로 외부에서 특정 아이디(id)를 대상으로 조작할 경우 대소문자를 가려 아이디(id)를 지칭해주어야 한다.

    

아이디(id) 속성의 속성값은 항상 문자(A-Z, a-z)로 시작해야 하고 그 뒤는 어떤 문자나, 숫자(0-9), 하이픈, 밑줄, 콜론, 마침표들이 올 수 있고 최소 1개 이상의 문자로 이루어져야 하며 공백은 없어야 한다. 특히, 아이디(id) 속성값을 숫자로 시작하는 실수가 많다.(W3C 튜토리얼에서는 이와 같은 속성값의 규칙을 HTML5 이전의 제약이고 현재는 숫자로 시작하는 id도 가능하다고 언급하고 있지만 현재도 이 규칙이 크롬과 파이어폭스에 규칙이 유효하게 작동하는 것을 확인함)  ← 2019년 1월 2일 수정함

    

⑤ 빈 링크

    

빈 링크는 <a> 요소에 하이퍼링크 기능을 제거하고 사용하는 경우에 사용한다. 웹 표준<a> 요소에 반드시 href 속성을 요구하기 때문에 href의 속성값에 "#"을 입력하여 웹 표준을 준수하는 빈 링크를 만든다.

    

<a href="#">빈 링크</a>


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:   0019 a요소 01 사용법 및 href 속성.apkg


2019/01/02 am 1:27 본문 및 Ankilog 파일에 id 속성값으로 올 수 있는 문자들 문구 수정




문서는 Anki 2.0 유저 매뉴얼을 번역한 문서입니다.


기본적으로 구글 번역을 통해서 초벌을 번역하고 이를 수정하는 방식으로 번역했습니다. 


또한, 본문에 충실한 직역보다는 매뉴얼을 숙지하기 쉽도록 의역 위주로 번역하였습니다.


 



Anki 매뉴얼 전체 개요 페이지 가기




 Frequently Asked Question

 

 

I haven't studied for a while, and now the next due times are too big!

(얼마간 공부를 안하다가 다시 하려니. 이제 카드의 만기가 지나치게 늘어나 버렸다!)

 

 

매일 Anki사용하여 카드를 학습하면 올바르게 응답할 때마다 해당 카드의 다음 학습 간격은 늘어나게 된다.

 

간격이 매번 두 배씩 늘어난다고 가정하면 처음 학습 간격이 5일이었다면 이어서 10, 20, 40일 순으로 늘어나게 된다.

 

 

이런 시스템에서 몇 주 또는 몇 달 동안 공부를 하지 않다가 다시 카드뭉치를 학습하게 되면, 갑자기 늘어난 학습 간격에 종종 놀라곤 한다.

 

Anki는 사용자가 실제로 어느 정도의 시간이 지난 후 카드를 학습했는지 여부를 기준으로 학습간격을 설정하지 처음 예정되어있던 학습 일정을 그대로 고수하지 않는다.

 

따라서 처음 카드의 다음 학습 간격이 5일로 예정되어 있었지만 한 달 동안 그 카드를 학습하지 않았다면 다음 학습 간격은 5일의 2배인 10일 보다는 한 달의 두배인 두 달 즉, 60일에 가까울 것이다.

 

 

이건 좋은 일이라고 생각한다.

 

1개월이 지난 후에 카드를 성공적으로 기억해 냈다면, 더 오래 기다린 후에도 다시 기억할 가능성이 높다.

 

학습 기간이 초과된 이후에 학습을 할 때에도 평소에 사용되는 방식과 동일하게 간격반복시스템 SRS(Spaced Repetition System)를 효과적인 시스템으로 만들어주는 동일한 원리가 역시 적용되는 것이다.

 

오히려 카드를 한 달 이후에 쉽게 기억해냈다면 학습 간격을 다시 줄여서 10일 이후에 학습하는 것이 더 이해하기 어려운 일일 것이다.

 

 

카드뭉치를 초기화하는 것은 좋은 해결책이 아니라 매우 나쁜 해결책이라고 할 수 있다.

 

장기간 카드 학습을 방치하고 나서 다시 카드뭉치로 돌아왔다면 아마도 그동안 학습했던 많은 카드들의 내용이 잘 기억나지 않을 것이다.

 

그러나 전부 홀라당 까먹은 것은 아닐 수 있는데 전체 카드뭉치를 초기화 해버리면 이미 알고 있는 내용도 다시 공부하게 되어 시간을 낭비할 수밖에 없게 된다.

 

 

자 이제 당신은 이미 공부해야할 학습 시기를 놓쳤지만 여전히 기억은 환기할 수 있는 카드를 발견했다.

 

물론, 수월하게 기억되는 것은 아니다.

 

그 카드들은 학습이 이루어져야할 시기에 학습이 이루어지지 않았으므로 수월하게 기억하지 못하는 것은 매우 당연하다.

 

이러한 상황에 대한 해결책으로 Anki는 사용자가 평가한 난이도에 따라서 해당 카드의 다음 학습 기간을 다르게 설정하고 있다.

 

만일, 카드를 쉬움(easy)라고 평가했다면 마지막 학습 간격과 그동안 지연되었던 기간을 합산하여 산식에 넣고 계산하여 다음 학습 간격을 설정할 것이다.

 

만일, 알맞음(good)이라고 평가했다면 지연되었던 기간의 반만 합산할 것이고, 어려움(hard)라고 평가했다면 지연되었던 기간의 4분의 1만 사용될 것이다.

 

그래서 만일 당초 예정된 학습 간격이 5일인 카드를 20일 만기 초과되어 응답을 한 경우 그 다음 학습 간격은 평가한 난이도에 따라서 대략 다음과 같이 될 것이다.

 

Hard: (5 + 20/4) * 1.2 = 12

 

Good: (5 + 20/2) * 2.5 = 37.5

 

Easy: (5 + 20) * 3.25 = 81.25일

 

(카드뭉치 학습 퍼포먼스에 따라서 실제 학습간격을 조정하는 인자의 값도 변화한다.)

 

 

만일, 카드를 어려움(hard)이라고 평가하게 되면 그 카드의 다음 학습 간격은 상당히 보수적으로 결정되어 마지막 대기(25)보다 짧게 나타난다.

 

그리고 카드를 알맞음(good)이라고 평가하면, 다음 학습 간격은 대략 50% 더 높게 나타난다. 그리고 쉬움(easy)의 경우는 평소처럼 학습 간격을 공격적으로 증가시킨다.

 

그러므로 한참 공부를 하지 않다가 Anki로 돌아왔다면 그저 평상시처럼 공부하는 것을 추천한다.

 

그러나 반드시 카드뭉치를 초기화해야 된다고 생각한다면, 브라우저에서 초기화를 수행할 카드를 골라 편집 일정조정을 사용하라.

 

 

 

 

Can I do multiple-choice questions?

(다지 선다형으로 객관식을 만들 수 있는가?)

 

 

다지 선다형의 객관식은 여러 가지 이유로 좋은 학습 도구라고 할 수 없다.

 

학교나 아카데미에서 객관식 형식을 일상적으로 사용하는 이유는 그것이 표기하기 쉽기 때문이고 이러한 객관식 문제 형태로 인하여 사람들이 스스로 답을 생각해낼 수 없더라도 여러가지 선택지에서 올바른 답을 인지할 수 있는 능력 갖추는 식으로 공부하는 것이 가능하기 때문이기도 하다.

 

객관식 문제를 잘 만들려면 정답과 유사하여 실제 정답을 헷갈리게 하는 혼란스러운 선택지(distractor) 갖고 있다.

 

컴퓨터는 유사한 철자를 가진 단어들은 찾을 수 있지만 보다 복잡한 주제의 문제에서는 정답을 헷갈리게 하는 혼란스러운 선택지를 찾아낼 능력이 없다.

 

시험을 목적으로 공부하고 있고 다음과 같은 다지 선다형 문제로 시험을 치른다고 해보자.

 

Q: What animal has a really long neck?

 

A: 1. A monkey.  2. A giraffe.  3. A donkey.  4. A snail.

 

 

이 질의 방식은 Anki에서 다음과 같이 질문을 다시 작성되어야 한다.

 

Q: What animal has a really long neck?

A: A giraffe.

 

 

또는 자신 만의 선택을 질의에 추가시킬 수도 있다.

 

Q: What animal has a really long neck? (dog/cat/giraffe/penguin)

 

A: A giraffe.

 

 

 

 

 

Can I link cards together? Add dependencies? How should I handle synonyms?

(카드들 끼리 link를 서로 연결할 수 있는가? 서로 종속성을 추가할 수 있는가? 동의어는 어떻게 처리해야하는가?)

 

 

Anki는 하나의 노트에서 나온 카드들 사이의 링크를 지원하지만 서로 관련이 없는 카드들 사이의 링크는 지원하지 않는다.

 

일본어를 인지하고 동시에 말할 수 있도록 일본어를 공부하고 있다고 상상해보라.

 

"big"이라는 뜻의 "ookii"라는 단어를 입력하고 Anki에게 양방향으로 “ookii”“big”, “big” “ookii” 카드를 생성하도록 지시 할 수 있다.

 

위의 상황에서 Anki는 두 유사카드가 노출되는 간격을 띄어놓음으로써 하나의 카드가 나타나고 바로 다음에 유사카드가 나타나는 상황을 피할 수 있다. (유사카드간 노출 간격 띄우기 참조).

 

 

어떤 사람들은 이러한 유사카드들 간의 링크를 임의의 카드 사이까지 확장하려고 한다.

 

그들은 Anki에게 "이 카드를 보여 주고 나서 저 카드를 보여줘" 또는 "이 카드를 충분히 숙지하기 전까지 그 카드는 보여주지 말아"라고 지시할 수 있기를 원한다.

 

이것은 이론상 좋은 생각처럼 들릴 수 있겠지만 실제로는 전혀 실용적이지 않다.

 

 

우선 첫 번째로는, 위의 유사카드 사례와는 달리, 임의의 카드 사이의 모든 관계를 직접 정의해야한다.

 

이러면 Anki에 새로운 노트를 추가하는 일이 매우 복잡한 절차를 수행하는 과정이 되어버린다.

 

카드뭉치를 검색하고 새로운 학습 자료와 이전의 자료 간의 관계를 일일이 설정해야 하는 등의 일이 생길 것이다.

 

 

두 번째로는, Anki는 학습 자료를 다시 보여줄 최적의 시간을 결정하기 위하여 알고리즘을 사용하고 있다는 점을 기억하라.

 

이러한 알고리즘에 카드들이 노출되는 규약들을 추가하게 되면 카드들은 좀 더 빨리 노출되거나 늦게 노출될 것이고 이는 간격 반복 시스템(SRS)의 효율성을 떨어뜨리게 될 것이다.

 

, 필요보다 더 많은 학습을 하게 되거나, 더 적게 학습하게 될 것이다.

 

 

Anki를 가장 효과적으로 사용하는 방법은 모든 노트들을 다른 노트와는 독립적으로 다루는 것이다.

 

유사한 단어들을 같이 다루기 위해 노력하는 대신에 유사한 단어들의 차이점을 결정하고 서로 떼어놓는 것이 나을 것이다.

 

동의어들이 서로를 완전히 상호 대체할 수 있는 경우는 매우 드물다.

 

언어에 어떤 뉘앙스가 붙는 경향이 있으며, 단어가 동의어로 대체될 경우 문장이 갑자기 이상해지는 경우도 적지 않다.

 

 

앞서 언급한 일본어의 경우로 좀 더 계속해보자.

 

“dekai”라는 단어를 배우고 싶다고 상상해보자.

 

이 단어도 대략 “big”이라고 번역될 수 있다.

 

하지만 이 단어는 훨씬 구어적인 표현이다.

 

여전히 앞뒤 양방향으로 학습을 하고 싶다면 아마도 영어 쪽의 단어를 “big(more casual)”이라고 쓰게 될 것이다.

 

하지만 언어 공부가 더 진척될수록 비슷한 단어들의 차이점을 세세하게 정의하는 것이 부담이 된다.

 

이러한 이유 때문에 특정 단어들에 대한 카드들을 만든다면 해당 학습 단계에 어울리는 것으로 만들고 이 카드를 업데이트할 필요는 없다.

 

그저 그대로 남겨놓는 것이 가장 좋다.

 

우리 모두는 수동적으로 사용하는 어휘들이 능동적으로 사용하는 어휘들 보다 훨씬 더 많기 때문에 기본적인 어휘를 습득하고 인지 기반의 학습이 이루어지면 공부가 진척됨에 따라 자연스럽게 좀 더 미묘한 차이를 이해할 수 있게 된다.

 

 

우선 좀 더 쉬운 학습 내용이 나타나고 그 뒤에 좀 더 어려운 학습 내용이 나타나게 하는 것을 보장할 수 있는 몇 가지 도구들이 있다.

 

하지만 새 카드들은 기본적으로 추가된 순서대로 나타나기 때문에 공부하려고 하는 자료가 본인의 학습 진도에 적절하게 맞고 제대로 등급에 따라서 난이도가 심화되고 있는 자료라면 이를 순서대로 추가하는 것만으로도 적절한 난이도에 따라서 학습 자료가 표시될 것이다.

 

 

 

 

 

Can I give my notes an arbitrary number of fields?

(내 노트에 필드 수를 마음대로 늘릴 수 있는가?)

 

 

노트는 밀접하게 연관된 정보들을 잘 연계하여 나타내기 위하여 디자인되어 있다.

 

그리고 해당 정보들이 카드의 어디서 나타나는지를 인지하기 쉽도록 만들어졌다.

 

가령, 언어 학습의 경우 구문과 해당 구문의 번역을 쌍으로 나타내거나, 구문-번역-읽기의 삼중으로 나타낼 때 등에 매우 유용하다.

 

여기서 언급하는 모든 관계는 11의 관계다.

 

, 주어진 구문에 대한 번역과 읽기는 오직 하나인 것이다. (1)

 

 

서로 연관된 정보를 함께 묶을 수 있는 이러한 노트의 기능 때문에 일부 사람들은 관련성이 적은 정보들도 함께 묶으려고 시도한다.

 

예를 들어, 다음과 같이 "completely"라는 단어가 두 개의 문장에 엮여서 오는 경우를 보자.

 

- He was completely confused.(그는 완전히 혼란스러웠다.)

- That was completely uncalled for.(그는 전혀 부름을 받지 않았다.)

 

 

단지, 이 두 개의 문장이 하나의 단어를 공유하고 있다는 관련성만으로 관련 있다고 판단하여 상기의 두 문장을 같은 노트에 넣는다.

 

하지만 또 다른 예문을 우연히 마주치게 되면 어떻게 될까?

 

- The book confused her.(그 책은 그녀를 혼란스럽게 만들었다.)

 

 

이 문장은 "confused"라는 단어를 위의 문장과 공유한다.

 

그렇다면 "confused"라는 노트에도 이 문장이 있어야 할까? 아니면 "completely"에 대한 노트? 아니면 둘 다?

 

 

위에서 언급한 구문-번역 쌍과 달리 동일한 단어를 공유하고 있는 문장들이 서로 관련성이 있다고 말하게 되면 문장들은 정말 지나치게 많은 관계를 형성하게 된다.

 

, 문장 A는 문장 B, C와 관련 될 수 있고, 문장 BA, D 등과 관련 될 수 있다.

 

관계들이 복잡하고 서로 겹치기 때문에 노트는 이러한 관계를 나타내기에 좋은 방법은 아니다.

 

 

사람들이 이러한 관계를 노트로 표현하려고 하는 것은 다음의 두 가지 주된 이유가 있는 것으로 보인다.

 

 

1) "한 곳에서 모든 정보를 모으는 것이 깔끔하기 때문에"

 

이 말이 사실인 것처럼 보일 수 있지만 실제로는 별로 그렇지 않다.

 

서로 다른 노트에 있는 “completely”라는 단어가 들어간 모든 예제 문장을 전부 알고 싶다면 그냥 “completely”라는 단어를 브라우저에서 검색하기만 하면 된다.

 

 

2) "동일한 단어가 있는 카드를 분리해서 복습하기 원하기 때문"

 

이것은 앞에서 제시된 FAQ 질문과 관련이 있다.

 

카드들 사이의 링크를 일일이 정의하는 작업은 무척 시간이 많이 소모되는 작업이다.

 

만일 이러한 작업이 자동으로 수행되어 단어를 공유하는 모든 카드가 단어를 공유하는 다른 카드와 분리되어 복습이 이루어지도록 할 수 있다고 해도, 일단 지나치게 많은 연산이 필요하므로 금지되어야 한다.

 

, 모든 카드들이 다른 무언가와 링크가 발생하여 어떤 카드도 나타나지 않는 상황이 발생할 수 있다.

 

물론 이렇게 하고자 하는 의도에는 동의한다.

 

누가 생각해도 동일한 단어가 들어 있는 카드가 연달아 나타나는 것이 이상적인 상황일리 없다.

 

하지만 카드를 추가할 때 이를 임의의 순서로 했다면 그런 상황은 잘 일어나지 않는다.

 

그리고 부작용을 막기 위한 시도들이 그 정도의 수고를 들여야 할 가치가 없다고 생각한다.

 

그리고 만약의 경우 어떤 해결책이 있어 모든 단어의 최적화된 노출 순서를 만든다고 하더라도, 실제 세계에서 그 단어들과 조우하는 것을 막을 수는 없다

 

 

(1) 사람들이 동일한 구를 각각 다른 방법으로 번역 할 수 있으며, 다양한 변증으로 인하여 동일한 단어가 다르게 읽을 수 있다.

 

그러나 이 문제는 지금의 논의와는 별다른 연관이 없다.

 

 

 

 

 

Can I host my own AnkiWeb?

(내가 나만의 AnkiWeb을 호스팅 할 수 있는가?)

 

 

미안하지만 AnkiWeb은 호스팅 서비스로만 제공된다.

 

 

 

 

Why is the Android version free when the iPhone version isn’t?

(왜 iPhone 버전과 달리 Android 버전만 무료인가?)

 

 

Anki 데스크톱, AnkiWeb AnkiMobile에서 일하는 것이 내 풀타임 직업이다.

 

그리고 비용이 지출되고 있으므로 돈나올 곳이 필요하다. 

 

데스크탑 및 웹 버전을 무료로 제공하기 때문에 개발 자금은 전적으로 iPhone 앱 판매에 의존하고 있다.

 

 

AnkiDroid는 별도의 자원 봉사자들이 제작했다.

 

그들이 AnkiDroid를 제작할 때 무료 데스크탑 버전을 기반으로 제작했고 카드뭉치 동기화는 무료 AnkiWeb에 의지하였기 때문에 그들은  AnkiDroid 역시 무료로 결정했다.

 

 

 

 

What spaced repetition algorithm does Anki use?

(Anki가 사용한 간격 반복 알고리즘은 무엇인가?)

 

 

Anki는 애초에 SuperMemo SM5(SM3+가 맞는 것 같지만 원문은 SM5로 되어 있음) 알고리즘을 기반으로 제작되었다.

 

하지만 Anki는 카드에 대해서 난이도를 평가하는 버튼을 누르기 전에 버튼에 따라서 다음 학습 간격이 미리 제시되어 있다.

 

이러한 Anki의 기본적인 설정이 SM5 알고리즘의 근본적인 문제를 드러냈다.

 

SM2와 알고리즘 개정판의 주요 차이점은 다음과 같다.

 

- SM2는 카드가 다시 학습될 일정을 결정함에 있어 사용자의 퍼포먼스를 이용한다.

- SM3+는 한 카드에 대한 사용자의 퍼포먼스를 이용하여 해당 카드 및 그와 유사한 카드들이 다시 학습될 일정을 결정한다.

 

 

후자의 접근법은 단일 카드에 대한 퍼포먼스뿐만 아니라 그룹에 대한 퍼포먼스까지 고려하므로 보다 정확한 학습 간격을 보장한다.

 

만일 공부하는 방식이 일관되어 있고 이러한 카드들의 난이도가 유사하다면 이러한 접근방법은 꽤나 잘 적용될 수 있다.

 

그러나, 이러한 산출식에 어떤 급격한 변인(가령, 카드의 난이도가 매우 다르거나 매일 동일한 시간에 공부하는 것이 아니라는 등)이 유입되면 SM3+ 알고리즘은 다음 학습 간격을 산출함에 있어 잘못된 추정을 하는 경향이 있다.

 

그 결과 카드가 너무 자주 노출되거나 또는 너무 늦게 나타나게 된다.

 

 

게다가 SM3+"최적화 요인" 표를 동적으로 조정하므로 그 결과 카드에 대하여 "어려움(hard)"이라고 응답한 것이 "쉬움(easy)"이라고 응답한 경우보다 학습 간격이 길어지는 경우가 종종 일어난다.

 

SuperMemo에서는 다음 학습 간격을 사용자에게 표시하지 않으므로 사용자는 이 사실을 결코 알지 못한다.

 

 

여러 가지 대안을 비교 평가해보고 나서 Anki 제작자는 잘못된 추정의 위험을 무릅쓰고 최적의 학습 간격을 얻는 것보다 SM2 알고리즘에 의해 유도된 최적에 근접한 학습 간격이 더 낫다고 결정했다.

 

SM2 접근 방식은 최종 사용자가 예측할 수 있고 직관적인 학습 간격을 제시하는 반면 SM3+ 접근 방식은 사용자에게 세부적인 사항을 숨기고 시스템이 실수할 수 있음에도 시스템에 대한 무조건적인 신뢰를 요구한다.

 

 

Anki SM2 알고리즘을 기반으로 하지만 일부 측면에서는 다르다.

 

 

SM2에서는 초기의 학습 간격을 1일 그리고 6일로 설정한다. Anki에서는 사용자가 초기 익힘 단계의 단계수와 간격을 완전히 제어한다. Anki는 새 카드를 기억하려면 그것을 여러 번 봐야한다는 사실을 이해하고 있다. 그래서 초기의 실패(failures)”는 시행착오일 뿐, 몇 일간 실패한 카드를 여러 차례에 걸쳐 공부할 필요까지는 없다고 판단한다. 그래서 익힘 단계에서의 사용자의 퍼포먼스는 추후 해당 기억을 유지하는 단계에서의 퍼포먼스에 반영되지 않는다.

 

Anki는 복습 카드에 응답하기 위해 6가지가 아닌 4가지 선택 버튼을 사용한다. 이 중 실패 버튼은 3가지가 아닌 오직 하나만 있다. 이렇게 버튼을 배치한 이유는 전체 복습 중에서 실패하는 경우는 많지 않고 카드의 수월함(ease)을 조정하는 것은 긍정적인 응답 버튼을 변경하는 것만으로 충분히 가능하기 때문이다.

 

예정된 일정보다 늦게 카드에 응답하는 것도 다음 학습 간격 계산의 한 요소로 들어간다. 따라서 예정보다 늦게 응답했음에도 여전히 기억하고 있다면 그 카드의 학습 간격은 훨씬 늘어나고 해당 카드의 학습 진도는 빨라진다.

 

Anki의 실패 버튼은 SM2와 마찬가지로 카드의 학습 간격을 초기화하는 것이 기본이다. 그러나 사용자는 그 카드의 학습 간격을 완전히 초기화하지 않고 몇 단계 뒤로 되돌리는 방식을 취할 수 있다. 또한 성숙한 카드를 실패한 경우 이를 같은 날 복습하지 않고 다른 날에 복습하도록 선택할 수 있다.

 

쉽게 기억된다고 응답하면 것은 수월함 요소가 늘어날 뿐만 아니라 현재의 학습 간격 계산에서도 보너스가 추가되어 표준 SM2 알고리즘보다 조금 공격적이다.

 

익힘 중인 카드를 연속으로 실패한다고 해도 카드의 수월함은 더 이상 줄어들지 않는다. 표준 SM 알고리즘에 대한 공통적인 불만사항이 카드를 반복으로 실패할 경우 해당 카드가 낮은 학습 간격 지옥에 빠지게 된다는 것이다. Anki에서는 초기에 카드를 익히는 과정에서 일어난 일이 카드의 수월함 요소값에 영향을 미치지 않는다.

 

 

SM2 알고리즘에 대한 설명은 다음을 참조하길 바란다.

 

http://www.supermemo.com/english/ol/sm2.htm

 

 

또한 Anki의 소스 코드에서 학습 일정에 대한 코드인 sched.py를 확인할 수 있다.

 

다음은 요약이다(기울임 꼴로 표시된 옵션에 대한 카드뭉치 옵션 섹션 참조).

 

당신이 다음의 버튼을 누를 경우 ...

 

Again(다시)

카드가 재익힘 모드로 이동하고 수월함이 20% 포인트 감소한다(, 퍼센트 포인트 단위로 나타나 있는 수월함 값에서 20을 빼면 된다.). 그리고 현재의 학습 간격은 새로운 학습 간격과 곱해진다. 이 간격은 카드가 재익힘 모드에서 나올 때 사용된다.

 

Hard(어려움)

카드의 수월함은 15% 포인트 감소하고 현재 간격에는 1.2가 곱해진다.

 

Good(알맞음)

현재 간격에는 현재 수월함 값이 곱해진다. 수월함은 변함 없다.

 

Easy(쉬움)

현재 간격에 현재의 수월함 값과 쉬움 보너스가 곱해지고 수월함이 15% 증가한다.

 

 

Hard, Good Easy의 경우 다음 학습 간격에는 간격 수정요소(modifier)가 추가로 곱해진다.

 

카드가 만기가 초과되어 늦게 복습되는 경우, 앞에서 언급한 것처럼 추가된 일수가 현재 학습 간격에 추가된다.

 

 

카드가 취할 수 있는 일정 조정 관련 값에는 몇 가지 제한 사항이 있다.

 

수월함은 결코 130% 이하로 떨어지지 않는다.

 

SuperMemo의 조사에 따르면 수월함 값이 130% 이하로 떨어지면 카드가 자주 만기가 되어 나타남으로써 필요 이상의 학습을 강요하고 사용자를 귀찮게 하는 경향이 있음을 보여준다.

 

학습 간격은 최대 학습 간격 이상으로 절대로 증가하지 않는다.

 

마지막으로, 모든 새로운 학습 간격(Again 제외)은 항상 이전 간격보다 최소 하루 이상 길다.

 

 

<주의>

 

난이도 평가 버튼을 선택하면 Anki는 이 버튼에 붙은 학습 간격에 약간의 변경을 임의의 퍼지 논리에 따라 부여한다.

 

이렇게 하면 카드들이 서로 붙어서 동일한 날 동시에 나타나는 것을 방지할 수 있다.

 

이러한 퍼지 요소는 버튼에 표시되지 않으므로 선택했던 버튼에 표시된 간격과 카드가 실제로 노출되는 간격 사이에 약간의 불일치가있는 경우 이것이 원인 일 수 있다.

 

 

 


Anki 매뉴얼 전체 개요 페이지 가기



문서는 Anki 2.0 유저 매뉴얼을 번역한 문서입니다.


기본적으로 구글 번역을 통해서 초벌을 번역하고 이를 수정하는 방식으로 번역했습니다. 


또한, 본문에 충실한 직역보다는 매뉴얼을 숙지하기 쉽도록 의역 위주로 번역하였습니다.


 


Anki 매뉴얼 전체 개요 페이지 가기




Deck Options

 

 

 

 Description(설명)

 

 

카드뭉치 옵션에서 설명 탭은 아래와 같다.

 

 

 

 

설명 탭의 경우 학습 개요 화면에 표시되는 카드뭉치 설명을 작성하는 섹션이다.

 

만일 공유 카드뭉치를 다운받아 실행하는 경우라면 해당 설명은 자동으로 설정된다.

 

학습 개요 화면에서 더 이상 설명을 보고 싶지 않다면 이 설명 탭의 모든 텍스트를 삭제하면 된다.

 

아래를 보면 설명탭의 섹션에 작성된 HTML이 해당 카드뭉치의 학습 개요 화면에 그대로 나타난 것을 알 수 있다.

 

학습 개요 화면의 shared deck page라는 링크는 https://ankiweb.net/shared/info/1988434165 라는 링크로 연결되어 있다.

 

사례로 든 카드뭉치 "400 TOEFL Words"는 AnkiWeb에서 공유된 카드뭉치를 다운받은 것으로 다운받을 당시에 이미 설명 섹션이 작성되어 있었다.

 

해당 링크를 클릭하면 AnkiWeb의 카드뭉치 설명으로 넘어간다.

 

 

 

링크를 클릭하면 아래와 같이 카드뭉치 "400 TOEFL Words"를 설명하는 페이지가 열린다.

 

 

 

위의 사례에서 보았듯이, 노트에 적용할 때 잘 작동하는 HTML이라면 설명 섹션에서도 잘 작동하므로 HTML도 사용할 수 있다.

 

 



Anki 매뉴얼 전체 개요 페이지 가기



문서는 Anki 2.0 유저 매뉴얼을 번역한 문서입니다.


기본적으로 구글 번역을 통해서 초벌을 번역하고 이를 수정하는 방식으로 번역했습니다. 


또한, 본문에 충실한 직역보다는 매뉴얼을 숙지하기 쉽도록 의역 위주로 번역하였습니다.


 


Anki 매뉴얼 전체 개요 페이지 가기




Cards and Templates

 

 

 

 Dictionary Links(온라인 사전 링크 만들기)

 

 

필드는 카드로 나타날 때는 각 노트에 해당하는 텍스트로 변경되어 나타난다.

 

이렇게 필드가 텍스트로 대체되는 것을 이용하면 여러가지를 해볼 수 있다.

 

만일, 언어를 공부하고 있다고 해보자, Anki에 각종 영단어를 집어넣어 학습하는 중이다.

 

하지만 보다 풍부한 내용을 공부하기 위해서 혹은 애매한 부분을 확인하기 위해서 온라인 영어사전을 찾아보고 싶은 경우가 발생할 것이다.

 

가령, 영단어를 한국어로 외우고 있는데, 가끔씩 영영사전에서의 표현을 확인해보고 싶을 수 있다.

 

그럴 때마다 해당 단어를 온라인 영어사전에 검색해볼 수도 있지만 그건 너무 번거롭고 손이 많이 가는 일이다.

 

그렇다면 카드의 영단어를 온라인 사전에서 검색할 수 있는 링크를 만들면 매우 편해질 것이다.

 

 

일단, 검색할 온라인 사전을 준비한다.

 

아래 링크의 온라인 사전은 네이버 영영사전이다. (다음사전은 작동하지 않아서 네이버 사전을 사용함)

 

이 링크에서 마지막의 MyWord 부분에 우리가 찾고자 하는 단어를 집어넣으면 해당 언어를 검색한 웹페이지가 뜬다.

 

 

즉, MyWord 부분만 카드 앞면의 단어로 바꿔주면 카드의 앞면에 노출되는 단어를 온라인 사전으로 검색할 수 있다.

 

그럼 이제 온라인 사전 링크를 만들어보자.

 

우선, 영단어를 공부하는 노트는 기본적으로 {{앞면}} 필드와 {{뒷면}} 필드로 이루어져 있는데, {{앞면}} 필드에 우리가 공부하려고 하는 영어단어를 집어넣고 뒷면 필드에 해당 단어의 뜻을 적어놓는다.

 

"clever"라는 단어를 학습하기 위해서 아래와 같이 노트를 만들었다. 

 

카드창을 클릭해보자. 

 

 

 

 

카드창에 온라인 사전링크를 만들고 싶으면 앞면 템플릿에 다음과 같이 적는다.

 

여기서는 위에서 언급한 MyWord 부분이 {{앞면}} 필드로 대체되어 있는 것을 확인할 수 있다.

 

그러면 {{앞면}} 필드의 텍스트인 "clever"로 대체된다.

 

 <a href="http://endic.naver.com/search.nhn?sLn=kr&isOnlyViewEE=N&query={{앞면}}">사전으로 확인하기</a>

 

그러면 카드창의 앞면 미리보기에 "사전으로 확인하기"라는 텍스트의 링크가 생긴다.

 

 

 

이를 클릭해보면 네이버 사전에서 "clever"라는 단어를 검색해서 보여주는 것을 확인할 수 있다.

 

 

 

이제 이와 같은 템플릿으로 노트를 만들면 학습할 영단어의 온라인 사전 링크를 자동으로 만들 수 있다.

 

그리고 학습하는 동안 링크를 클릭하여 각 노트에 해당 단어를 온라인 사전으로 검색할 수 있게 된다.

 

그러나 여기에 주의 사항이 있으므로 다음 섹션을 참조하기 바란다.

 

 


Anki 매뉴얼 전체 개요 페이지 가기



문서는 Anki 2.0 유저 매뉴얼을 번역한 문서입니다.


기본적으로 구글 번역을 통해서 초벌을 번역하고 이를 수정하는 방식으로 번역했습니다. 


또한, 본문에 충실한 직역보다는 매뉴얼을 숙지하기 쉽도록 의역 위주로 번역하였습니다.


 


Anki 매뉴얼 전체 개요 페이지 가기




Cards and Templates

 

 

 

 Hint Field(힌트 필드)

 

 

카드의 앞면이나 뒷면에 필드를 추가하되 명시적으로 보려고 할 때까지는 해당 필드가 노출되지 않도록 할 수 있다.

 

이것을 힌트 필드라고 부른다.

 

힌트를 더하기 전에 유념해야 할 것이 있다.

 

Anki에서 질문에 답하기 쉽게 만들수록 리얼 라이프에서 그것을 제대로 써먹을 가능성이 낮아진다.

 

그러니 다음 URL에 있는 문건에서 최소정보 원칙에 대한 내용을 꼭 읽어보기 바란다.

 

https://www.supermemo.com/en/articles/20rules

 

 

힌트 필드를 만들기 위해서는 우선 힌트를 저장하기 위한 필드를 추가해야 한다.(필드 섹션 참조)

 

일단, MyField라는 필드를 만들었다고 해보자. 그리고 Anki에서 이 필드를 포함시키되 기본적으로 숨기도록 하려면 다음과 같이 템플릿에 추가하면 된다.

 

        {{hint:MyField}}

 

이렇게 하면 "MyField 보기" 링크(힌트 링크)가 표시된다.

 

 

 

힌트 링크를 클릭하면 이 필드의 내용이 카드에 표시된다.

 

아래의 사진에서는 힌트 필드에 "힌트"를 입력함.(MyField가 비어있으면 아무 것도 표시되지 않는다.)

 

 

 

 

만일 카드 앞면의 힌트를 보고 답을 생각해낸 후 "답 보기" 버튼을 눌러 답을 보면, 힌트는 다시 숨겨지고 링크로 변한다.

 

답이 표시될 때 항상 힌트가 표시되길 원한다면 뒷면 템플릿에서 {{FrontSide}}를 제거하고 표시할 필드를 수동으로 추가해야 한다.

 

 

 

주의 : 현재까지는 오디오를 힌트 필드에 집어넣어 사용할 수 없다. 오디오를 힌트 필드에 넣으면 힌트 링크를 클릭했는지 여부와 상관없이 오디오가 재생된다.



Anki 매뉴얼 전체 개요 페이지 가기




+ Recent posts