들어가기에 앞서 gin-gonic 프레임워크로 공부하던 중 Spring Boot는 MVC패턴으로 코드를 구현하는데 Go에서도 편한 아케텍쳐가 있지 않을까해서 찾아보았고 그중에서 가장 눈에 띄었던 글을 번역한 것입니다. 링크 -> (https://amitshekhar.me/blog/go-backend-clean-architecture) Clean Architecture를 구현했기 때문에 프로젝트에서 생성된 레이어는 다음과 같습니다. 라우터 제어 장치 유스케이스 저장소 도메인 다음은 Go 언어로 작성된 백엔드 프로젝트의 전체 아키텍처입니다. 프로젝트에서 Clean-Architecture를 쓰는 이유는 무엇일까? - 프레임워크 독립적 : 모든 것이 분리되어 있어 필요한 경우 다른패키지로 교체하기가 더 쉽다 e..
들어가기에 앞서 이 글은 gin-gonice의 Docs를 참고해서 쓴 글입니다 당연하게도 Gin은 Go(Golang)로 작성된 웹 프레임워크입니다. 특징은 무엇이 있을까요? 빠르다 , 기수 트리 기반 라우팅, 작은 메모리공간, 예측 가능한 API 성능등의 특징이있습니다 미들웨어 지원 들어오는 HTTP 요청은 일련의 미들웨어와 최종 작업에 의해 처리될 수 있습니다. 예: Logger, Authorization, GZIP 그리고 마지막으로 DB에 메시지를 게시합니다. 충돌 방지 Gin은 Http 요청 중에 발생한 에러를 포착하고 복구할 수 있습니다. 이렇게 하면 서버를 항상 사용가능합니다 JSON 유효성 검사 Gin은 요청에 JSON을 분석하고 검증할 수 있습니다 경로 그룹화 우리가 보내는 url들(Pat..
들어가기에 앞서 처음 백엔드를 공부해보고자 마음 먹었을 때는 근처에 Spring Boot를 공부하는 사람들이 많아서 Spring Boot를 공부했다. 하지만 막상 Spring의 장점을 생각하면 Spring Boot는 대용량 데이터 처리에 용이하다는 것이다. 나는 이것을 잘 써먹지 못했다 대용량 데이터를 겪어본적이 없었기 때문이다. 그래서 이번에 배울 언어와 프레임워크는 많은 데이터 처리양보다는 개발속도가 빠른 것에 치중해서 배워보기로 결정했다. 그래서 일단 내가 배우고 싶은 언어들과 프레임워크 Go vs Node.js를 비교해보고 마지막으로 하나를 선택하고자한다. 많은 백엔드 프레임워크들이 현재 나와있고 각각의 장점이 있다 그렇다면 Node.js에 장단점은 뭘까? Node.js 장점 Node.js는 웹 ..
프로세스란? 쉽게 말하면 프로세스는 코드로 작성된 프로그램이 메모리에 올라가서 사용가능한 상태가 된 것 스레드란? 스레드란 프로세스내에서 실제로 작업을 수행하는 것 모든 프로세스에서는 한 개 이상의 스레드가 존재하고 작업을 수행한다 두 개 이상의 스레드를 가지는 프로세스 -> 멀티스레드 프로세스 그렇다면 과연 멀티 프로세스와 멀티 스레드의 차이는 뭘까 사진을 보면서 이해해보자 멀티 프로세스란? - 여러개의 프로세스가 서로 협려해서 일을 처리한다 - 여러개의 프로세스가 작업을 병렬적으로 처리한다 - 각 프로세스간 메모리 구분 또는 독립된 주소 공간을 가져야 할 때 사용한다 장점 - 독립된 구조이기 때문에 안정성이 높다 (다른 프로세스랑 충돌이 발생하기 어렵다) - 하나의 프로세스가 죽는다고 해도 문제가 되..
데이터베이스의 탐색 성능을 좌우하는 인덱스. 인덱스를 사용하는 이유? 대부분의 속도 저하는 바로 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. 모든 테스트 케이스를 실행: 현재 개발된 코드에서 자동화 된 테스트 케이스를 실행합니다..