본문 바로가기

분류 전체보기74

[Project Coin] 단위 테스트(1) _ Unit Test란? & Table Test 시작 나는 Unit Test를 내 프로젝트에 적용해본 경험은 없다. 하지만 인턴을 경험하며 이에 대한 필요성을 절실히 느낀 경험이 있다. 코드에 조금만 손을 데도 새로 배포하고 웹을 통해 데이터가 원하는 형태로 출력되는지 확인하고.. 아니면 다시 반복..... 만약 내가 Unit Test를 작성하기 위한 준비가 돼 있는 상태였다면 프로젝트의 완성도는 훨씬 높아졌을 것이라 확신한다. 앞으로 이런 아쉬움을 남기지 않기 위해 Unit Test에 대해 공부하고 전략들을 잊지않게 추가해 나가려 한다. Unit Test란? 유닛 테스트(unit test)는 컴퓨터 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차다. 즉, 모든 함수와 메소드에 대한 테스트 케이스(Test case).. 2022. 8. 10.
[Linux] 가상화 가상화 개요 1) 가상화 배경 1960년대에 가상화 개념이 처음 등장하였지만 하드웨어의 성장으로 2000년대에 이르러서야 주목받음 2) 가상화 종류 서버 가상화 가장 일반적인 가상화 기술 서버를 가상의 머신으로 만들어 사용 CPU나 메모리 등을 논리적으로 나누어 사용하여 리소스 활용률을 높이는 기술 소프트웨어가 필요 네트워크 가상화 네트워크 방화벽과 보안 장비들을 모두 가상머신으로 구현 가능 하나의 통합된 여러 개의 물리적 환경의 장치들을 가상으로 쪼개어 사용 가능 네트워크를 더욱 유연하고 빠르게 제공가능 NFV(Network Function Virtualization), SDN(Software Defined Network)가 있음 스토리지 가상화 디스크 RAID처럼 여러 개의 물리적인 드라이브를 하나의.. 2022. 8. 9.
[Go] GC(Garbage Collection) 심화 GC 내가 참조하고 있는 글은 2019년에 Go 1.12v 때, 포스팅 된 글 이므로 최근의 Go와 다를 수 있다. 내가 알기론 STW도 제거하기 위해 시도하고 있다고 들었는데.. 이또한 찾아보아야겠다. GC 과정 GC가 실행될 때, 세가지의 페이즈가 존재한다. 두가지는 STW 방식이고 한가지는 어플리케이션에 지연을 유발하는 동시성 방식이다. 세가지 페이즈는 순서대로 Mark Setup - STW(Stop The World) Marking - Concurrent Mark Termination - STW 이다. 하나씩 살펴보자. Mark Setup - STW 처음 GC가 실행되면 쓰기를 제한하는 튜닝을 하게되는데 이는 GC 고루틴과 어플리케이션 고루틴의 무결성을 위해서이다. 쓰기를 제한하기 위해 모든 고루.. 2022. 8. 5.
[자료구조] 해쉬 테이블(Hash table) 자료구조 HashTable Key 값에 해싱된 Value를 저장하는 데이터 구조. Hash Hash는 일방향 함수이다. 어떤 동일한 값을 함수에 매개변수로 넘긴다면 정해진 하나의 해쉬 값을 도출한다. 하지만 그 역은 구할 수 없다. Hash 충돌 만약 해쉬 값을 Boolean 자료형으로 한다면 해쉬 값은 50%의 확률로 겹칠 것이다. 이러한 상황을 해쉬 충돌이라 한다. 완전한 해시 함수 어떤 hash 함수가 충돌없이 1:1대응을 할 수 있다면 이를 완전한 해시 함수라 한다. 충돌 극복 방법 1.Open Address 이 방법은 만일 해쉬 충돌이 생긴다면 그 다음 주소에 해당 값을 저장하는 방식으로 사용된다. 하지만 remove 기능을 효율적으로 구현하기 어려운 문제가 생긴다. 2.Separate Chai.. 2022. 7. 28.
[Server] DDD(Domain-Driven Design) 도메인 주도 설계 정의 유사한 업무들을 묶어 중심에 놓고 설계하는 방식 프로젝트 단위의 바운디드 컨텍스트가 생긴다. 장점 명시적인 강제 언어 경계가 생긴다. 컨텍스트 별 독립적인 발전이 가능해진다. 인터페이스에 기반한 컨텍스트 간 통신이 이뤄진다. 언어가 중요한 요소! 언어의 경계를 얼마나 잘 나누느냐가 DDD의 성패 결정 Conway's Law 우리가 만드는 시스템은 조직의 모양에 따라간다. 비지니스 도메인 별 팀을 꾸리게 된다면 자연스럽게 그에 맞는 바운디드 컨텍스트를 가진 프로세스가 제작될 가능성이 높다. 분산화된 데이터 관리 통일화된 DB를 가진다면 join의 유혹에 빠지기 쉽다. 서비스별 물리적 논리적 DB를 가지게 된다면 경계를 치기가 더욱 유리하다. 진화하는 설계 각각의 프로세스가 개별로써 진화하고 발.. 2022. 7. 15.
[CS] 객체 지향 객체 지향 객체 지향의 발생 객체를 지향하는 대표적인 언어인 C++, JAVA, C# 등이 발생하기 전엔 C와 같은 절차지향적 언어가 주로 사용됐다. 이러한 언어는 제공하고자 하는 서비스의 목표를 이뤄가기 위해 구문이라는 연산을 흐름에 맞게 제작하여 이어 붙인 코드를 제작한다. 제공하고자 하는 서비스의 크기가 점점 커지고 복잡해 지면서 코드상에서도 확인할 수 있는 반복되는 구문을 쉽게 발견할 수 있었고 절차 지향 언어에서는 이러한 반복을 막고 관리하기 위해 우리가 아는 함수라는 개념을 만들어 사용하였다. 여기서 함수라는 연산을 진행하기 위해서는 연산의 주체인 CPU와 연산에 사용되는 자료구조를 관리하는 Memory의 관리가 필요한데 이를 한 묶음으로 엮어 모듈화 하여 한 파일로 만들어 관리하기 시작했다... 2022. 7. 2.