⚾️ jest.config.ts
: ts-jest를 이용해 jest를 설정하였다.
🏓 yarn test
를 실행하면 설정해놓은 test가 실행된다.
<예시 화면>
__test__> 🎱 parser.test.ts
data> ⛳️ example.ts
<예시 data_exampleLog02>
콘솔에서 직접 git log를 쳐서 나오는 출력값들을 가져오는 것까지, node에서 실행할 수 있도록 코드로 작성하였다.
키워드는 node.child_process
해당 코드의 존재를 알고 있었다면 쉽게 구현가능한 부분이다.
<실행 코드>
🥏 spawnLog.ts
import { spawn, exec } from "child_process";
// git log 실행할 option 설정
let git = spawn("git", [
"--no-pager",
"log",
"--all",
"--parents",
"--numstat",
"--date-order",
"--pretty=fuller",
"-c",
]);
export function getGitLog(): Promise<string> {
return new Promise((resolve, reject) => {
// Log로 받을 문자열 모음
let gitLog = "";
// 명령어 실행 뒤 하나씩 담아주기
git.stdout.on("data", (data) => {
gitLog += data.toString();
});
// 에러 발생 시 Promise.reject로 반환
git.stderr.on("data", (data) => {
console.error(`stderr: ${data}`);
reject(data);
});
// 코드 실행 및 출력이 완료되면 모아둔 gitLog를 Promise.resolve로 반환
git.on("close", () => {
resolve(gitLog);
});
});
}
🏸 logToJson.ts
logInfo
세팅<예시 console>
<예시 console>
자세한 구현 코드가 궁금하다면 여기
jest test
현재는 간단하게 mock data로만 test해봤지만, 추후 복잡한 로직에 대해서도 test case를 추가해보고 싶다.
TypeScript interface, type check
간단한 로직 구현인데도, object의 key 타입 설정 등 오류나는 부분이 정말 많았다. 이 부분에서 가장 시간을 많이 잡아먹은 것 같다. TypeScript 기초 공부가 절실히 필요하다고 느꼈다.
나는 정말 아는 게 없다...
그래도 React가 아닌 TypeScript를 쓰는 건 처음이라 새롭고, 재밌었다. 특히나 jest 설정하는 부분과 명령어를 실행시키는 코드를 작성하는 부분이 정말 흥미로웠다. 이 부분은 Githru.v가 아니더라도 추후 웹 프로젝트에서도 쓸 수 있을지 고민해봐야겠다.
(하지만 사용자가 git log 또는 ls 등의 linux 명령어를 쓸 일이 있을까...?)
또한 고수분들께서 라이브 코딩 및 PR 코드리뷰로 많은 의견 및 조언을 주셔서 감사할 따름이다. 이 조언들을 하나하나 곱씹어보고 깊이 있게 공부해야겠다. 시간을 가지고 하나씩 기초를 다져봐야지.