데이터베이스의 탐색 성능을 좌우하는 인덱스. 인덱스를 사용하는 이유? 대부분의 속도 저하는 바로 Select문 특히 조건 검색 Where절에서 발생하는데 가장 먼저 생각해 볼 수 있는 대안으로 Index가 존재 그렇다면 왜 B-Tree자료구조를 사용할까? 먼저 자료구조에서 트리란 무엇인가에 대하여 알아보자. Tree는 평균적으로 시간 복잡도 O(logN)을 가진다. 하지만 최악의 경우 한 쪽으로 쏠려버린 트리다 최악의 탐색 시간 O(N)을 가지게 되어버린다. 이걸 방지하기 위해 밸런스 트리(Balanced Tree)를 이용하기도 한다. 밸런스 트리(Balanced Tree)란? 트리의 노드가 한 방향으로 쏠리지 않도록, 노드 삽입 및 삭제 시 특정 규칙에 맞게 재정렬되어 왼쪽과 오른쪽 자식 양쪽 수의 밸..
들어가기에 앞서 CI가 뭔지 모른다면 이해하고 옵시다! https://sleeg.tistory.com/entry/CICD-CICD-%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0 [CI/CD] CI/CD란 무엇인가? 들어가기에 앞서 Aws와 Spring Boot ,S3...등등으로 CI/CD 구축을 했지만 정확히 알고 있지 않으면 커스텀하기가 어렵다고 생각이 들었다 그래서 차근차근 시작부터 정리해보기로 한다 CI/CD란 무엇인가 sleeg.tistory.com Github Actions이란? Github Actions이란 개발 환경에서 Pull Request, push등 이벤트가 발생하면 설정해준 자동화 ..
들어가기에 앞서 Aws와 Spring Boot ,S3...등등으로 CI/CD 구축을 했지만 정확히 알고 있지 않으면 커스텀하기가 어렵다고 생각이 들었다 그래서 차근차근 시작부터 정리해보기로 한다 CI/CD란 무엇인가? 제일 큰 키워드는 자동화!라고 생각한다 CI는 Continuous Intergration의 약자로 지속적 통합을 의미한다 - 개발자들은 Branch들을 main -> develop -> feat~ 형식으로 여러가지로 쪼개서 작업을 한다 그러면 당연히 merge를 한다 그러한 이벤트가 발생할때 코드들을 자동으로 빌드 및 테스트해서 merge시킨다 일일히 테스트할 필요도 없고 이 코드가 틀렸나 생각할 필요 없다 CD는 Continuous Delivery/Deployment의 약자로 지속적 제공..
TestCode를 작성하는 이유와 그 습관을 가져보기전에 정리를 한 번 하고 넘어가려고 합니다 TDD(Test Driven Development)란? 소프트웨어 개발 방법론 중 하나입니다 TDD는 개발자가 작성할 코드에 대한 테스트를 먼저 작성하고 그 뒤에 구현할 코드를 작성하는 방식입니다. TDD를 구현하는 팀은 개발에서 더 많은 시간이 걸릴수도 있습니다 하지만 시간이 오래걸린만큼 결함이 거의없는 경향이 있습니다 이처럼 TDD를 사용하면 코드 품질이 형샹되며 재사용이 가능한 코드가 생성 되겠죠? TDD의 사이클은 6단계로 나뉩니다 1. 테스트 케이스 작성: 요구 사항에 따라 자동화 된 테스트 사례를 작성합니다. 2. 모든 테스트 케이스를 실행: 현재 개발된 코드에서 자동화 된 테스트 케이스를 실행합니다..
들어가기에 앞서 이 글은 "Go언어를 활용한 분산 서비스 개발"이라는 책을 보고 정리한 내용입니다 먼저 로그 패키지를 만들기 전에 용어를 머리에 집어넣고 가야 편합니다 레코드(Record) : 로그에 정리할 데이터 저장 파일(Store): 레코드를 저장하는 파일 인덱스 파일(Index): 인덱스를 저장하는 파일 세그먼트(Segnment): 저장 파일과 인덱스 파일을 묶어서 말하는 추상적 개념 로그(Log): 모든 세그먼트를 묶어서 말하는 추상적 개념 1. 스토어(Store) 만들기 로그 패키지를 위한 LetsGo/WriteALogPackage/internal/log/stroe.go package log import ( "bufio" "encoding/binary" "os" "sync" ) var ( en..
들어가기에 앞서 웹을 공부하면서 또는 프레임워크를 쓰면서 Log란 것을 듣기도하고 보기도하며 쓰기도 해보았다 하지만 정작 그렇게 중요하다는 생각까지는 하지 않았다 그냥 오류가 뜨면 Log를 뜨게하고 대충은 안다고 생각했기 때문이다 그래서 오늘은 분산 서비스를 구축하고자 하는 목적을 이루고자 로그란 무엇인에 대하여 짚고 넘어갈려고 한다 (본 글은 https://brunch.co.kr/@sangjinkang/22을 보고 정리한 내용입니다) 로그란 무엇인가? 쉽게 정리하자면 로그란 IT인프라에서 발생하는 모든 상황의 데이터이다 그렇다면 로그는 어떻게 생겼을까 로그는 정해진 규칙에 따라 Key-Value 형태 혹은 정해진 Key 순서에 맞게 Value값으로 보통 표현된다 ex) 로그의 찍힌 값의 순서 타임스탬..
들어가기에 앞서 protobuf에 대해 공부하면서 기존 백에서 작성하던Rest API(Get, Post) 대신 proto Request Proto Response를 쓰는 것을 보았다 근데 정작 나는 Rest란 무엇인가에 대해서도 잘 알지 못하는 거 같아 Rest에 대해 정리하기로 했다 해당 글은 밑에 블로그를 보고 작성한 글입니다 https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html REST란 “Representational State Transfer” 의 약자 - 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다. - 자원: 해당 소프트웨어가 관리하는 모든 것( 문서, 그림, 데이터) 상태(정보) 전..
오늘은 gRPC에 대해 공부하던중 Protobuf(프로토컬 버퍼)란 말이 많이 등장하는데 얕게나마 이해를 하고 넘어가고 싶어서 정리하게 되었습니다 Protobuf란 Protocol Buffers는 Google에서 개발한 데이터 직렬화 방식 줄여서 protobuf, 더 줄여서 pb라고도 불립니다 protobuf -> pb는 다른 IDL(XML, JSON...)에 비해 더 작은 용량(이진 형식)으로 데이터를 저장할 수 있기 때문에 네트워크 연결을 통해 더 빠르게 전송할 수 있습니다 인터페이스 정의 언어 (Interface Description Language 또는 Interface Definition Language, IDL) 는 소프트웨어 컴포넌트의 인터페이스 를 묘사하기 위한 명세 언어 이다. IDL은 ..