🧐 Trace00 EOF(ctrl + d) 입력을 받으면 프로그램을 종료시켜야 합니다. 더보기 main문을 보면 다음과 같이 이미 구현되어 있는 것을 알 수 있습니다. while(1)을 통해 쉘을 계속 실행시키다가 ctrl + d가 입력되면 프로그램을 종료합니다. 🧐 Trace01 quit 명령어를 built-in command로 등록합니다. quit이 입력되면 프로그램이 종료되어야 합니다. 더보기 void eval(char *cmdline) { cahr * argv[MAXARGS]; parseline(cmdline, argv); builtin_cmd(argv); return; } int builtin_cmd(char **argv) { char * cmd = argv[0]; if (!strcmp(cmd,..
🧐 그라파나 (Grafana) 이전 글에서 간단히 언급했지만 다시 한 번 하도록 하겠습니다. 프로메테우스가 DB라고 한다면, 이 DB에 있는 데이터를 불러서 사용자가 보기 편하게 보여주는 대시보드가 필요합니다. 그라파나는 데이터를 그래프로 보여주는 툴입니다. 수 많은 그래프를 제공하고, 프로메테우스를 포함한 다양한 데이터소스를 지원합니다. 🧐 그라파나 설치 그라파나 설치 사이트(https://grafana.com/grafana/download)로 이동합니다. 여기서는 맥 OS 기준으로 설치를 진행하겠습니다. 위의 명령어를 복사합니다. 이후 그라파나를 설치할 (임의의)폴더로 이동한 뒤, 위의 명령어를 그대로 입력합니다. (설치하는데 시간이 좀 걸릴 수 있습니다) 그라파나를 설치할 폴더의 bin 폴더로 이동..
저는 지금까지 일반적으로 JPA를 사용하는 경우 @Id와 @GenerateValue, 그리고 Long 타입의 id를 사용하였습니다. 항상 id는 직접 할당하지 않았기에 save()시 id의 값은 항상 null이었습니다. 그러다 코틀린을 공부하고, 코틀린으로 JPA를 사용해보려던 중, 코틀린에서 id에 null을 허용하게끔 코드를 작성한다면 코드가 너무 더러워질 것 같아서, null을 사용하지 않는 방법을 찾아보았습니다. 생각보다 간단했는데 결론은 0으로 초기화 시켜주면 된다였습니다. 혹은 nullable 타입을 사용하는 것도 좋은 방법입니다. 이제부터 이러한 이유를 살펴보겠습니다. save()는 어떻게 작동할까? 저장하려는 엔티티가 새로운 엔티티인 경우 persist를, 그렇지 않은 경우 merge를 진..
로마자 Α / α (알파) Β / β (베타) Γ / γ (감마) Δ / δ (델타) Ε / ε (엡실론) Ζ / ζ (제타) Η / η (에타) Θ / θ (쎄타) Ι / ι (요타) Κ / κ (카파) Λ / λ (람다) Μ / μ (뮤) Ν / ν (뉴) Ξ / ξ (크시) Ο / ο (오미크론) Π / π (파이, 피) Ρ / ρ (로우) Σ / σ (시그마) Τ / τ (타우) Υ / υ (윕실론) Φ / φ (휘) Χ / χ (키 또는 카이) Ψ / ψ (프시) Ω / ω (오메가) 수학기호 ± (플러스마이너스) × (곱하기) ÷ (나누기) √ (루트) 적분기호 : ∫, ∬, ∮ 미분기호 : ∂(편미분) ∴ (따라서, 그러므로) ∵ (왜냐하면) ≠ (같지앉다) ≒ (약, 근사값) ≤ (왼쪽이 ..
🧐 Collectors.toMap이 뭔가요? Stream을 사용하는 경우, 최종 연산으로 collect()를 사용하는 경우, Stream의 요소들을 수집하여 특정한 자료구조로 변환할 수 있습니다. 이때 Map으로 변환하기 위해서는 Collectors.toMap을 사용합니다. 흔히 사용하는 toMap은 다음과 같습니다. List strings = Arrays.asList("apple", "banana", "pear"); Map map = strings.stream() .collect(Collectors.toMap(String::length, Function.identity())); System.out.println(map); // 결과: {4=pear, 5=apple, 6=banana} 그러나 위 코드에는..