본문 바로가기

분류 전체보기49

테스트 코드는 왜 작성하기 어려울까? 주제에 대해 학습한 이유구름 단기 KDT, 프로펙트 과정을 참여하며 이제 고도화를 해야 할 기간이 다가왔다.고도화를 위해 자동화 테스트를 이제 도입해야 한다.시작은 물론 단위 테스트(유닛 테스트)이다.단위 테스트(유닛 테스트)를 작성하는 데 있어서 어려움이 있어서 어떻게 해야 좋은 테스트를 작성할 수 있을지, 코드를 어떻게 리팩토링해야 할 지 고민했다.위의 과정을 여러 글과 강의, 책을 통해 조금이나마 배운 것 같다.문제 정의테스트를 어떻게 할 수 있는가?그래서 단위 테스트로 어디까지 검증해야 하나?현재 테스트 코드를 짜기 어려운 이유가 무엇일까?문제 분석 먼저 나에게는 Junit, Mockito, Spring Test 등을 사용해 본 경험이 없다.(하지만 대충 보니 Jest와 크게 차이가 없어 보여서.. 2025. 5. 31.
검색 구현을 위한 기초 공부 검색과 검색어 자동완성 공부하기주제에 대해 학습한 이유이번에 구름에서 제공하는 단기 KDT, 프로펙트 풀스택 과정에 참여했다.협업 경험이 부족한 것도 있고 개발자로서 성장하는 방법을 네이버 부스트캠프에서 배웠으니,직접 실천하며 내 것으로 만드는 과정이 필요하다 생각되어 지원했다.어찌됐든 구름 프로젝트팀에서 검색과 검색어 자동완성에 대해 기능 구현과 고도화를 맡았다.이전 프로젝트인 데나무에서의 경험으로 대충 풀텍스트 인덱스로 검색을 한다 정도로만 알고 있다. 다행히도 가상 면접 사례로 배우는 대규모 시스템 설계 기초에서 검색 자동 완성편도 있었다.우선은 검색이 어떻게 MySQL에서 이루어질 수 있는지 살펴보고 (학습하기) 자동완성이 어떤 식으로 설계되는지 한 번 읽어보는 방식으로 학습하려고 한다.(설계하기.. 2025. 5. 5.
[밑바닥부터] 8일차 - 2장 불 연산: ALU 구현 및 테스트 ALU 구현 및 테스트ALU구현6개의 제어 비트를 사용해야 한다. (zx, nx, zy, ny, f, no)책에 나와 있는 힌트로는, 16비트 값을 0으로 만들거나 반전하는 논리 설계를 먼저 하라고 한다. ⇒ zx, zy, nx, ny, no가 우선적으로 설정되어야 한다.zx, zy 등을 만들기 위해서는 고급 프로그래밍 언어의 if와 같이 조건을 설정해야 한다.하드웨어에서 조건을 만들려면 멀티플렉서를 사용한다.예를 들어, zx 비트가 1이면 x입력을 0으로 만들고, 0이면 원래 x값을 사용할 수 있도록 한다.그 다음으로는 f에 따라 + 연산과 And 연산을 선택하도록 하면 된다.이 주요 6기능이 제대로 동작하는지 확인 후 zr과 ng 출력에 필요한 기능을 이어서 구현한다.진리표zxnxzynyfnoout(.. 2025. 4. 13.
[밑바닥부터] 7일차 - 2장 불 연산: 가산기와 증분기 구현 가산기와 증분기 구현가산기구현코드를 작성해보기 전에 가산기의 동작을 생각해보자.LSB는 반가산기를 통해서 더해주고, 나머지는 carry 비트가 추가적으로 필요하니 전가산기를 써주면 될 것 같다.HDL CHIP Add16 { IN a[16], b[16]; OUT out[16]; PARTS: HalfAdder(a= a[0], b= b[0], sum= out[0], carry= carry0); FullAdder(a= a[1], b= b[1], c= carry0, sum= out[1], carry= carry1); FullAdder(a= a[2], b= b[2], c= carry1, sum= out[2], carry= carry2); FullAdder(a= a[.. 2025. 4. 13.
[밑바닥부터] 6일차 - 2장 불 연산: 반가산기, 전가산기 구현 반가산기, 전가산기 구현반가산기진리표abcarrysum0000100101011110진리표를 확인했을 때, carry는 and 연산이고 sum은 xor 연산임을 확인할 수 있다.HDL CHIP HalfAdder { IN a, b; // 1-bit inputs OUT sum, // Right bit of a + b carry; // Left bit of a + b PARTS: And(a = a, b = b, out = carry); Xor(a = a, b = b, out = sum); }전가산기진리표abccarrysum0000000101010010111010001101101101011111반가산기를 사용해서 구현해보자. a + b + c의 결.. 2025. 4. 13.
[밑바닥부터] 5일차 - 2장 불 연산: 가산기 아키텍처, ALU 설계 가산기 아키텍처, ALU 설계명세가산기(adder)부터 산술 논리 장치(ALU)까지 칩들을 계층적으로 정의한다.칩이 무엇을 위해 설계되는지 추상화 레벨부터 살펴보고 칩을 어떻게 만드는지 자세한 구현을 학습한다.이번 장에서 학습 하는 내용은 음수, 0이상의 수, 부호가 섞인 수 모두 정상적으로 연산할 수 있다.가산기가산기는 간단하게 설명하면 다음과 같다.반가산기(half-adder)두 비트를 더한다.전가산기(full-adder)세 비트를 더한다.가산기(adder)두 개의 n비트 숫자를 더한다.증분기(incrementer)특수 목적용 가산기주어진 숫자에 1을 더한다.반가산기2진수 덧셈의 첫 단계로 두 비트를 더한다.입력(a, b)과 출력(carry, sum)에 대한 진리표abcarrysum0000100101.. 2025. 4. 10.