전체 글83 sonarQube를 이용한 CI 코드 정적 분석 기능 추가 정적 코드 분석 정적 코드 분석은 소스 코드에서 수행되는 일련의 자동 검사로 구성됩니다. 정적 분석 도구는 코드를 검사하여 메모리 누수 또는 버퍼 오버플로우 등 알려진 오류 및 취약점을 파악합니다. 또한 정적 분석을 활용하면 코딩 표준 적용이 가능합니다. 정적 분석은 소스 코드에서 실행되기 때문에 프로그램을 실행할 필요가 없으므로 CI/CD 파이프라인의 첫 단계에서 수행하거나 변경 사항 커밋 전 IDE에서 직접 수행하는 경우가 많습니다. 하지만 정적 분석은 프로그래밍 된 규칙 위반이 발생한 사례만을 식별하며, 소스를 읽는 것만으로는 모든 결함을 발견할 수는 없습니다. 그렇기 때문에 테스트 코드와 같은 동적 분석이 가능한 방법과 같이 사용하는 것이 좋습니다. SonarQube란? SonarQube는 정적 .. 2022. 7. 30. Github actions에서 jacoco를 통해 테스트 커버리지 확인하기 ♻️ Jacoco란? Jacoco는 Java Code Coverage의 약자로 자바 테스트 코드를 실행한 결과를 바탕으로 커버리지를 측정하는 오픈소스 라이브러리 입니다. Jacoco를 사용하여 테스트 코드 커버리지 결과를 눈으로 보기 좋도록 html이나 xml, csv 같은 리포트로 생성합니다. 그리고 테스트 결과가 내가 설정한 커버리지를 기준을 만족하는지 테스트 하는 기능도 제공합니다. 🐘 Gradle에서 Jacoco를 통하여 테스트 커버리지 확인하기 적용하기 전에 테스트한 환경은 다음과 같습니다. 🚀 Spring boot 2.7.1 Java 17 Gradle 먼저 Jacoco를 사용하기 위해 build.gradle에 jacoco 플러그인을 추가합니다. plugins { ... ... id 'jacoc.. 2022. 7. 29. OpenApi Spec을 이용한 RestDocs to Swagger 변환 자동화 🤨 RestDocs와 Swagger의 장점과 단점 데브코스 최종 프로젝트를 준비하면서 이번 프로젝트 진행중에 API 문서화를 RestDocs로 진행할지 Swagger로 진행할지 고민중인 상태였습니다. 이전에 Spring RestDocs는 사용해보았지만 Swagger는 사용해본적이 없었고 Swagger에 대해서 대강 알기로는 페이지에서 테스트할 수 있는 기능을 제공해 프론트엔드에 좀 더 친화적이라는 이야기를 들었습니다. 이에 API 문서화를 하기 이전에 이들의 장점과 단점에 대해서 다음과 같이 정리했습니다. Spring RestDocs 장점 단점 테스트 기반으로 실행되기 때문에 신뢰성이 높음 추가적으로 작성해야 하는 테스트 코드가 많음 프로덕션 코드에 영향을 주지 않아 깔끔함 API 테스트 기능이 없음 S.. 2022. 7. 28. [gRPC] gRPC의 등장배경과 gRPC 이전의 통신 마이크로서비스 아키텍처와 클라우드 네이티브 아키텍처의 출현으로 기능이 세분화되고 의존성이 낮은 마이크로서비스로 분리되었습니다. 여러개의 마이크로서비스로 분리되면서 각각의 프로세스(서비스)들은 어떠한 통신기술(RESTful, IPC 등등..)을 사용해 네트워크로 통신을하게 되었습니다. 예를 들어 위와 같이 온라인 판매 시스템을 마이크로서비스 아키텍처 기반으로 구현한다면 각각의 웹 UI, 상품 검색, 주문 관리, 결제, 배송 관리 같은 서비스들이 네트워크 상으로 연결되어 데이터를 주고 받게 되었습니다. 그래서 프로세스 간 통신을 하면서 네트워크의 트래픽이 많아지게 되어 효율적인 통신 방식이 중요한 부분으로 떠오르게 되었습니다. 프로세스 간 통신(IPC) 프로세스간의 서로 데이터를 주고받는 방법을 IPC(In.. 2021. 12. 22. WSL2 에서 데이터 베이스를 MySQL로 사용하여 로컬에서 연결시도시 dial tcp 127.0.0.1:3306: connect: connection refused 문제 해결방법 Golang(Gin 프레임워크 사용)으로 백엔드를 사용하던중 WSL2에 올려놓은 MySQL에 연결을 하려고하니 계속 다음과 같은 에러가 발생했습니다. 로컬에서는 mysql이 잘 접속되는 상황이 었습니다. 하지만 -h로 호스트 주소를 지정할 경우에는 똑같이 에러메시지가 발생하는 것을 볼 수 있었습니다. 그런데 -h 옵션을 주었을때 127.0.0.1이 아닌 localhost를 주었을 때는 접속이 되는 상황이었습니다. 그래서 localhost와 127.0.0.1로 접속시도시 차이점에 대해 찾아보았더니 localhost로 접속 시도시 유닉스 소켓을 통해 mysql에 연결하고 127.0.0.1로 연결시도시 TCP/IP로 연결하게 됩니다. 그래서 Go 코드에서 TCP연결이 아닌 Socket 연결을 하도록 다음과 같.. 2021. 12. 16. [자료구조] 트리 트리란? 트리는 1개 이상의 노드를 갖는 노드의 집합으로 각 항목들을 계층적으로 연관되도록 구조화 시키고자 할 때 사용하는 비선형 자료구조입니다. 트리는 디렉터리 구조등 계층적인 구조를 갖는 데이터일때 사용됩니다. 트리는 다음과 같은 조건을 만족합니다. 트리에 최상위에 루트노트라는 노드가 존재합니다. 한 노드는 하나의 노드만 가르키고 있습니다. (1 : n 관계) 트리는 사이클을 그리지 않으며, 계층적인 구조를 가집니다. 다음과 같은 구조는 트리가 아닙니다. 위의 경우는 C 노드를 A와 F가 가르키고 있기 때문에 트리가 아닙니다. 위의 경우에는 노드들이 사이클을 그리고 있기 때문에 트리가 아닙니다. 트리 용어 트리는 다음과 같은 용어를 사용합니다. 루트 노드(root node) : 부모가 없는 노드를 의.. 2021. 12. 13. [자료구조] Deque Deque? Deque(덱)은 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료구조 입니다. 두 개의 포인터를 사용하여, 양쪽에서 삭제와 삽입을 발생시킬 수 있으며, 큐와 스택을 합친 형태로 생각할 수 있습니다. deque는 양방향으로 삽입삭제를 할 수 있기 때문에 단방향으로만 삽입 삭제가 이루어지는 queue와 stack에 비해 삽입 삭제를 좀 더 간편하게 할 수 있습니다. 삽입과 삭제시 O(1)로 굉장히 빠르지만 deque 중간에 있는 데이터에는 접근하기 어렵다는 단점이 있습니다. Deque의 구현 Deque는 최소한 다음과 기능을 수행할 수 있도록 구현했습니다. create : deque를 생성 insertFront : deque의 맨앞에 원소를 추가 deleteFront : deque의 맨앞의 원소를 .. 2021. 12. 11. [자료구조] Queue Queue란? Queue는 선형구조를 가진 자료구조로, 먼저 집어 넣은 데이터가 먼저 나오는 FIFO(First In First Out)구조로 저장하는 형식을 말합니다. 나중에 집어 넣은 데이터가 먼저 나오는 stack과는 반대되는 개념입니다. 보통 프린터의 출력 처리나, 프로세스 관리 등 데이터가 입력된 시간 순서대로 처리해야할 필요가 있는 상황에 사용됩니다. Queue의 구현 Queue의 구현해야할 기능은 다음과 같습니다. create : Queue를 생성하는 함수입니다. front로 가장 앞의 인덱스를 가르키고 rear로 가장 끝의 인덱스를 가르킵니다. enQueue : 큐에 Element(요소)를 추가합니다. deQueue : 큐에서 맨앞의 요소를 빼냅니다. peek : 큐에서 맨앞의 요소를 가져.. 2021. 12. 11. 이전 1 ··· 6 7 8 9 10 11 다음