각 트랙의 첫 번째 연습 문제는 아주 단순한 "Hello, World!" 연습 문제예요.
이 연습 문제의 목적은 모든 것이 제대로 연결되어 있는지 빠르게 확인하는 거예요. 이를 통해 사용자가 프로그래밍 환경을 올바르게 설치했는지, 테스트를 실행하는 방법을 알고 있고 통과시킬 수 있는지 확인할 수 있어요. 그뿐만 아니라 Exercism 명령줄 클라이언트(CLI)의 경우, CLI가 제대로 설치되고 설정되었는지, 그리고 사이트가 불필요한 산출물 없이 연습 문제에 필요한 올바른 파일을 전달하는지도 확인해 줘요. 마지막으로, CLI로 연습 문제를 내려받고, 로컬 개발 환경에서 문제를 풀고, 그 풀이를 다시 사이트에 제출하는 주기에 사용자가 익숙한지도 확인해 줘요.
다시 말해, 아직 언어 자체에 대해 무언가를 배우는 것이 목적은 아니에요. 아주 단순한 것을 목표로 하는 거예요.
또한 연습 문제를 구현하려면 신경 쓸 부분이 많기 때문에, 아마 트랙 저장소를 제대로 설정하는 과정에서 가장 어려운 부분이 될 거예요.
"Hello, World!" 연습 문제에는 몇 가지 특별한 규칙이 적용돼요:
prerequisites가 없어요practices가 없어요"Hello, World!" 연습 문제(그리고 실제로 Exercism의 모든 연습 문제)에는 특정한 파일들이 필요해요:
"Hello, World!" 연습 문제를 만들기 전에, 트랙마다 다른 파일 이름과 파일 경로(테스트 스위트, 스텁 구현, 예제 구현, 그리고 추가 파일)를 정해야 해요.
일반적인 원칙은 그 언어에서 자연스러운 이름을 사용하는 거예요.
특별히 선호하는 방식이 없다면, 디렉터리 구조는 더 얕은 쪽을 선호해요.
예제 구현은 CI 스크립트가 식별할 수 있어야 하므로, 모든 연습 문제가 함께 쓸 수 있는 일반적인 기본 이름을 고르는 게 좋아요. 예를 들어 example, sample, reference-solution 같은 이름이에요.
트랙에 맞는 파일 경로를 골랐다면, 루트 config.json 파일의 files 키에 설정해야 해요.
files 키는 모든 연습 문제의 템플릿 역할을 하므로, 어떤 도구든(잠시 뒤에 몇 가지를 사용할 거예요) 파일을 어디에서 찾아야 하는지 알 수 있어요.
다양한 자리 표시자를 사용하면 연습 문제의 슬러그(여기서는 hello-world)를 손쉽게 설정할 수 있어요.
트랙에서 파일 이름에 PascalCase를 사용한다면, files 키는 다음과 같이 생겼을 거예요:
"files": {
"solution": [
"%{pascal_slug}.cs"
],
"test": [
"%{pascal_slug}Tests.cs"
],
"example": [
".meta/Example.cs"
]
}
예제 파일은 .meta 디렉터리 안에 저장해야 해요.
더 자세한 내용은 files 키 문서를 확인해 봐요.
파일 경로 템플릿을 지정했다면, 트랙의 루트 디렉터리에서 다음 명령을 실행해 "Hello, World!" 연습 문제 파일을 빠르게 만들 수 있어요:
bin/fetch-configlet
bin/configlet create --practice-exercise hello-world
웹사이트에 자신을 연습 문제의 작성자로 표시하려면 다음 단계를 따라 해요:
연습 문제의 .meta/config.json 파일에서:
authors 키에 자신의 GitHub 사용자 이름을 추가해요이게 동작하려면 Exercism 계정을 GitHub에 연결해야 해요. 웹사이트의 설정 페이지의 연동 섹션에서 할 수 있어요.
연습 문제 작성자에게는 평판도 주어져요
최신 트랙 저장소에서는 bin/add-practice-exercise 스크립트(소스)를 사용해 새 연습 문제를 추가할 수 있어요:
bin/add-exercise -a <github_username> two-fer
이 파일이 없는 트랙 저장소에서 작업하고 있다면, 위 소스 링크를 이용해 저장소로 자유롭게 복사해 넣어도 돼요.
뼈대 파일이 만들어졌다면, 이제 다음을 해야 해요:
연습 문제를 추가할 때 핵심이 되는 부분은 테스트를 추가하는 거예요. 대략 말하자면, 위 연습 문제를 구현할 때는 두 가지 선택지가 있어요:
canonical-data.json에서 가져와 처음부터 테스트를 구현해요https://exercism.org/exercises/hello-world로 가면 어떤 트랙이 특정 연습 문제를 구현했는지 한눈에 볼 수 있어요)."Hello, World!" 연습 문제에는 테스트 케이스가 하나뿐이라, 어느 쪽이든 괜찮아요.
예제 구현 파일에는 테스트를 통과하는 데 필요한 코드가 들어 있어야 해요.
스텁 파일에는 테스트를 거의 통과하는 풀이가 들어 있어야 하지만, "Hello, World!" 텍스트가 "Goodbye, Mars!"로 바뀌어 있어야 해요. 팁: 예제 풀이를 복사해서 붙여 넣고 고치면 돼요.
연습 문제 작업을 마쳤다면, 연습 문제의 .meta/config.json 파일에 있는 "authors" 배열에 자신의 GitHub 사용자 이름을 추가해 주세요.
그래야 연습 문제를 만든 사람으로 정확히 표시할 수 있어요.
연습 문제가 제대로 설정되었는지 확인하려면, configlet 도구에 내장된 린트 기능을 사용할 수 있어요.
첫 단계는 configlet 도구를 내려받는 것이고, 이를 위해 두 가지 스크립트를 만들어 두었어요:
bin/fetch-configlet: *nix나 macOS를 사용할 때 실행해요bin/fetch-configlet.ps1: Windows를 사용할 때 실행해요트랙 저장소의 루트 디렉터리에서 이 스크립트 중 하나를 실행하면 bin/configlet 또는 bin/configlet.exe 바이너리를 내려받아요.
그다음 bin/configlet lint를 실행해 연습 문제가 올바른지 확인할 수 있어요.
configlet이 다음과 같은 오류를 보고할 가능성이 높아요:
The `tags` array is empty:
/path/to/track/config.json
이 오류는 출시 준비 단계에서 고쳐질 예정이니, 다음 중 하나를 하면 돼요:
configlet 워크플로는 main이나 풀 리퀘스트에 뭔가 푸시될 때마다 자동으로 configlet lint를 실행해요.