(전 순정 백엔드 개발자기 때문에 React는 못합니다. React 코드는 Chat GPT 시켜서 구현하였고, 대신 백엔드에 온 진심을 담하서 구현하였으니, 프론트 코드는 정말 그냥 테스트용으로만 참고해 주시면 감사하겠습니다.) OAuth의 개념에 대해서는 이미 많은 블로그들에서 다루고 있으므로 저는 이에 대해서는 따로 다루지 않겠습니다. 이 글에서는 (적어도 제가 살펴보았던) 대부분의 블로그에서 애매하게 설명되어있는 프론트엔드와 백엔드의 역할과, 실제로 어떻게 구현하는지를 집중적으로 다뤄보도록 하겠습니다. 또한 이 과정에서 단순히 구현하고 끝내는 것이 아니라 새로운 타사 플랫폼을 추가하는 과정도 간단하게 처리할 수 있도록 유연하고 확장 가능한 구조를 가져가는 코드를 작성해보도록 하겠습니다. 소스 코드는..
· 모니터링
🧐 그라파나 (Grafana) 이전 글에서 간단히 언급했지만 다시 한 번 하도록 하겠습니다. 프로메테우스가 DB라고 한다면, 이 DB에 있는 데이터를 불러서 사용자가 보기 편하게 보여주는 대시보드가 필요합니다. 그라파나는 데이터를 그래프로 보여주는 툴입니다. 수 많은 그래프를 제공하고, 프로메테우스를 포함한 다양한 데이터소스를 지원합니다. 🧐 그라파나 설치 그라파나 설치 사이트(https://grafana.com/grafana/download)로 이동합니다. 여기서는 맥 OS 기준으로 설치를 진행하겠습니다. 위의 명령어를 복사합니다. 이후 그라파나를 설치할 (임의의)폴더로 이동한 뒤, 위의 명령어를 그대로 입력합니다. (설치하는데 시간이 좀 걸릴 수 있습니다) 그라파나를 설치할 폴더의 bin 폴더로 이동..
· 논리회로
이번 글에서는 필요한 회로의 기능에 대한 설명 문장을 통한 조합논리회로의 설계를 다뤄보겠습니다. 첫 단계에서는 보통 회로에 기능에 대한 설명을 진리표 혹은 대수 표현식으로 변환하게 됩니다. 부울함수에 대한 진리표가 주어지면, 표준 논리곱의 합(최소항 전개)과 표준 논리합의 곱(최대항 전개)의 두 가지 함수의 표준 대수식을 얻을 수 있습니다. 이들을 간략화하여 AND와 OR 게이트로 이루어진 회로를 구성할 수 있게 됩니다. 🧐 문제 서술부의 부울식 변환 논리설계 문제는 종종 한 문장 혹은 여러 문장을 사용하여 서술되기도 합니다. 논리회로 설계의 첫 단계는 이들 문장을 부울식으로 변환하는 것입니다. 이렇게 하기 위해서는 각 문장을 구로 나누고 각 구를 부울변수와 연관시켜야 합니다. 어떤 한 구가 "참(tru..
· 기타
로마자 Α / α (알파) Β / β (베타) Γ / γ (감마) Δ / δ (델타) Ε / ε (엡실론) Ζ / ζ (제타) Η / η (에타) Θ / θ (쎄타) Ι / ι (요타) Κ / κ (카파) Λ / λ (람다) Μ / μ (뮤) Ν / ν (뉴) Ξ / ξ (크시) Ο / ο (오미크론) Π / π (파이, 피) Ρ / ρ (로우) Σ / σ (시그마) Τ / τ (타우) Υ / υ (윕실론) Φ / φ (휘) Χ / χ (키 또는 카이) Ψ / ψ (프시) Ω / ω (오메가) 수학기호 ± (플러스마이너스) × (곱하기) ÷ (나누기) √ (루트) 적분기호 : ∫, ∬, ∮ 미분기호 : ∂(편미분) ∴ (따라서, 그러므로) ∵ (왜냐하면) ≠ (같지앉다) ≒ (약, 근사값) ≤ (왼쪽이 ..
· 기본
🧐 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} 그러나 위 코드에는..
말 랑
Shin._.Mallang