spring 11

[Spring] Logback 로그 관리

실무에서 자주 사용하는 플로우1. Logback으로 일정 기간/용량 단위로 로그 롤링 및 압축 (.gz)2. 하루 1회, 백업 로그를 S3로 업로드3. 업로드가 성공한 파일만 로컬에서 삭제4. S3는 장기 보관 및 분석 용도로 사용 S3로 백업 후 로컬에서 삭제하는 이유- 디스크 공간 확보: 로그는 쌓이기만 하므로 디스크를 가득 채움- 로그 분석 분리: 실시간 운영 서버는 빠르게 돌아가야 하므로, 분석/보관은 S3에서 따로- 보안 & 감사: S3에 백업되면 안전하고, 복구도 쉬움 구현 예시 (쉘 스크립트)#!/bin/bashTODAY=$(date +%Y-%m-%d)FILES="logs/app.log.$TODAY*"for FILE in $FILES; do # S3로 업로드 if aws s3 cp "$F..

Spring 2025.06.10

[DB] DB 커넥션 풀 (DB Connection Pool) 개념

DBCP(DataBase Connection Pooling) 개념DBCP(DataBase Connection Pooling)는 데이터베이스와 애플리케이션 간의 연결을 효율적으로 관리하기 위한 기술입니다. 데이터베이스 연결은 생성과 종료에 상당한 리소스와 시간이 소요되기 때문에, 연결을 재사용하는 풀(pool)을 만들어 성능을 개선하는 방식입니다. 기존의 DB 연결 방식기존 방식에서는 애플리케이션이 데이터베이스 작업을 수행할 때마다 새로운 연결을 생성하고 작업이 끝난 후 연결을 종료합니다.* 동작 방식1. 데이터베이스 연결 생성 (Connection 객체 생성)2. SQL 실행3. 연결 종료 (Connection 객체 닫기)* 특징매 요청마다 연결 생성: 데이터베이스와 통신할 때마다 새로운 연결(TCP/I..

DB 2025.01.10

[Spring] 소나큐브(SonarQube) CI 파이프라인 구축 (with Gitea)

OverviewSpring Boot (3 버전)에서 소나큐브(SonarQube) CI 파이프라인 구축 (with Gitea) Prerequisite* Spring Boot 3.2.7* Java 17* Gradle 8.1* Sonarqube 5.0.0.4638* Jacoco 0.8.11* Gitea 설치 - [Git] Docker를 통한 Gitea 구축하기(GitLab과 차이)* 소나큐브(SonarQube) 설치 및 Spring Boot 3 설정 - [Spring Boot 3] 소나큐브(SonarQube), JaCoCo 연동하여 정적 분석* 설치 확인Demo 애플리케이션(Spring Boot 3)에는 Sonarqube, JaCoCo가 연동되어 있어야하고, Gitea에 코드가 Push된 상태여야 합니다. 이..

Git 2024.07.05

[Spring Boot 2] 소나큐브(SonarQube), JaCoCo 연동하여 정적 분석

OverviewSpring Boot (2 버전)에서 소나큐브(SonarQube), JaCoCo 연동하여 정적 분석[Spring Boot 3] 소나큐브(SonarQube), JaCoCo 연동하여 정적 분석[Spring] JaCoCo를 통한 Code Coverage 측정 Prerequisite* Spring Boot 2.7.16* Java 11* Gradle 7.1.1* Sonarqube 3.5.0.2730* Jacoco 0.8.11* Docker 테스트 애플리케이션// 테스트할 간단한 Spring Boot 2버전 코드$ git clone https://github.com/hyunkwanko/spring-boot-2.x-demo.git 소나큐브(SonarQube) 설치$ sudo su -$ mkdir son..

Spring 2024.07.05

[Spring Boot 3] 소나큐브(SonarQube), JaCoCo 연동하여 정적 분석

OverviewSpring Boot (3 버전)에서 소나큐브(SonarQube), JaCoCo 연동하여 정적 분석[Spring Boot 2] 소나큐브(SonarQube), JaCoCo 연동하여 정적 분석[Spring] JaCoCo를 통한 Code Coverage 측정 Prerequisite* Spring Boot 3.2.7* Java 17* Gradle 8.1* Sonarqube 5.0.0.4638* Jacoco 0.8.11* Docker 테스트 애플리케이션// 테스트할 간단한 Spring Boot 3버전 코드$ git clone https://github.com/hyunkwanko/spring-boot-3.x-demo.git 소나큐브(SonarQube) 설치$ sudo su -$ mkdir sonarq..

Spring 2024.07.05

[Spring] JaCoCo를 통한 Code Coverage 측정

OverviewSpring Boot에서 JaCoCo를 통한 Code Coverage 측정 Prerequisite* Spring Boot 3.2.7 (Spring Boot 2 버전도 동일하게 적용 가능합니다.)* Java 17* Gradle 8.1* Jacoco 0.8.11 JaCoCo 개념JaCoCo(Java Code Coverage)는 Java 언어로 작성된 프로그램의 코드 커버리지를 측정하는 도구입니다. 코드 커버리지는 소프트웨어 테스트의 품질을 측정하는 데 사용되며, 특히 자동화된 테스트 스위트에서 테스트가 코드베이스의 얼마나 많은 부분을 실행했는지를 보여줍니다.JaCoCo는 다음과 같은 주요 기능을 제공합니다.1. 라인 커버리지(Line Coverage): 소스 코드의 각 라인이 실행된 횟수를 기..

Spring 2024.07.03

[Spring] JUnit5 테스트 코드 작성

테스트 코드를 작성해야 하는 이유 코드 테스트는 소프트웨어 개발 과정에서 매우 중요한 부분입니다. 아래는 코드 테스트를 실시해야하는 이유 몇 가지입니다. 1. 버그 발견: 코드 테스트를 통해 프로그램 내의 버그와 오류를 식별할 수 있습니다. 이렇게 발견된 버그를 수정하면 소프트웨어의 안정성과 신뢰성을 높일 수 있습니다. 2. 기능 검증: 코드 테스트는 소프트웨어의 기능을 확인하는 데 사용됩니다. 시스템이 기대대로 작동하는지 확인하고, 모든 기능이 올바르게 구현되었는지 확인할 수 있습니다. 3. 코드 변경 관리: 코드를 수정하거나 업데이트할 때, 테스트를 통해 변경된 코드가 이전 버전과 호환되는지 확인할 수 있습니다. 이를 통해 새로운 기능 추가나 버그 수정을 안정적으로 수행할 수 있습니다. 4. 코드 문..

Spring 2023.10.06

[Java] 가비지 컬렉션(Garbage Collection)의 개념

가비지 컬렉션(Garbage Collection) 개념 가비지 컬렉션(Garbage Collection)은 프로그래밍 언어에서 메모리 관리를 위한 중요한 개념 중 하나입니다. 프로그램이 동적으로 메모리를 할당하고 사용할 때, 할당된 메모리 중에서 더 이상 사용되지 않는 부분을 찾아내고 해제하는 작업을 의미합니다. 이를 통해 메모리 누수(memory leaks)와 같은 문제를 방지하고, 프로그램의 안정성과 성능을 향상시킬 수 있습니다. 가비지 컬렉션은 주로 자바(Java), C#, Python, JavaScript와 같은 고급 프로그래밍 언어에서 사용되며, 다양한 방법으로 구현될 수 있습니다. 가장 일반적으로 사용되는 가비지 컬렉션 알고리즘에는 다음과 같은 것들이 있습니다. 1. 참조 카운팅(Referen..

Java 2023.08.21

[Spring] HATEOAS 개념 및 장단점

Spring HATEOAS 개념 Spring HATEOAS는 Spring Framework를 기반으로 한 Hypermedia as the Engine of Application State (HATEOAS)의 구현체입니다. HATEOAS는 RESTful 웹 서비스에서 리소스 간의 관계와 상태를 표현하고 클라이언트가 리소스 간의 상호 작용을 위한 정보를 동적으로 얻을 수 있도록 돕는 개념입니다. HATEOAS의 핵심 개념은 "하이퍼미디어 링크"입니다. 이는 리소스와 관련된 다른 리소스로의 링크를 포함하는 것을 의미합니다. 클라이언트는 이러한 링크를 따라가며 API에서 제공되는 다른 리소스와 상호 작용할 수 있습니다. Spring HATEOAS는 이러한 하이퍼미디어 링크를 생성하고 관리하기 위한 도구와 클래스..

Spring 2023.08.14