본문 바로가기

분류 전체보기85

JIB을 이용한 컨테이너 배포 JIB 이란? 애플리케이션을 컨테이너화할 경우 보통 Dockerfile에 애플리케이션을 실행시킬 수 있는 내용을 정의하고 docker build를 통해 도커 이미지로 생성합니다. 자바 애플리케이션의 경우 애플리케이션을 빌드해서 jar 혹은 war 형태로 만든 후 Dockerfile을 작성해서 빌드된 결과물을 실행시키는 동작을 하도록 할 것입니다. 즉, 자바 빌드와 도커파일 빌드의 두번의 과정이 일어난다고 할 수 있습니다. 다음 그림의 첫번째는 자바 빌드와 도커파일 빌드를 두번하는 형태고 두번째는 Jib을 사용하는 빌드 흐름입니다. 위와 같이 Jib을 사용하면 프로젝트를 빌드함과 동시에 컨테이너 이미지까지 만들어서 원하는 레포에 푸시해 줄 수 있습니다. ./gradlew jib Jib 설정하기 jib을 사.. 2022. 8. 2.
데이터베이스 첫걸음 정리 - 1장 데이터베이스 데이터란? 컴퓨터안에 기록되어 있는 숫자를 의미합니다. 데이터 베이스란? 이러한 데이터의 집합을 데이터 베이스라고 부릅니다. 넓은 의미에서는 “컴퓨터 안에 기록된 모든 것”을 데이터베이스라고 할 수 있습니다. 단, 일반적으로 데이터베이스는 특정 데이터를 확인하고 싶을 때 간단하게 찾아낼 수 있도록 정리된 형태를 의미합니다. 데이터베이스가 데이터를 저장하는 장치 데이터베이스 내의 데이터는 영구적을 보존되어야 합니다. 주기억장치(RAM 같은)에만 데이터를 저장된다면 전원을 끄는 순간 데이터는 전부 사라지기 때문에 하드디스크나 플래시 메모리(SSD) 등 비휘발성 저장장치에 저장합니다. 데이터 베이스 사용예시 인터넷에서 웹 애플리케이션을 통해 물건을 쇼핑할 때 DB에 접근하게 됨 편의점에서 물건을 사면 계산대(.. 2022. 7. 31.
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.