본문 바로가기

분류 전체보기113

Minikube 설치해보기 Minikube는 로컬 컴퓨터에서 Kubernetes 클러스터를 실행하는 도구로, 개발 및 테스트 목적에 유용합니다. 컴퓨터 내 가상 머신 안에 단일 노드 Kubernetes 클러스터를 설정하여 전체 규모의 클러스터나 클라우드 인프라 없이도 Kubernetes를 실험할 수 있게 해줍니다. 해당 포스팅에서는 Minikube를 로컬 PC에 설치하는 방법을 정리합니다. 먼저 저의 로컬 PC 환경은 아래와 같습니다. 사전에 도커가 받드시 설치되어 있어야합니다. MacOS Sonoma (칩: M2) Docker version 25.0.3 (Docker Desktop on Mac 사용 중) 1. 설치 MacOS에서는 Homebrew가 설치되어 있다면, 아래 명령어로 간단히 설치 가능합니다. 터미널을 열러 brew.. 2024. 3. 2.
[독서] 가상 면접 사례로 배우는 대규모 시스템 설계 1 이 책의 목차를 열었을때, 개발자라면 흥미로운 단어들이 많이 눈에 띌 것입니다. 웹크롤러, 분산시스템, 피드 시스템, 검색어 자동 완성, 유투브 설계 등 챕터 별로 다양한 종류의 시스템을 어떻게 설계하고 개발 할 것인가에 대한 내용이 포함되어 있습니다. 몇몇 기억에 남는 내용을 포스팅 해봅니다. 서버 확장 1장 사용자 수에 따른 규모 확장성에서는 실제 현업에서 많이 고민하게 되는 서버의 확장성에 대해서 이야기 하고 있습니다. 비관계형 데이터 저장소(NoSQL)을 고려해봄직 할 케이스를 기술 한 것이 기억에 남네요. 낮은 응답 지연(Latency) 비정형 데이터 데이터를 직렬화, 역직렬화 대규모 데이터 저장 위 같은 요구가 있다면 고려해봄직 하다고 합니다. 그리고 웹 계층의 무상태, 데이터 베이스의 수평.. 2024. 3. 1.
Multi-module에서 Domain 분리하기 Springboot로 API 서버 애플리케이션 등을 개발할 때 Multi-module을 채택 할 수 있습니다. (요즘 핫하다고는 못하겠네요. 주목 받은지 꽤 시간이 흐른듯합니다 ㅎㅎ) 아래와 같은 Multi-module로 된 프로젝트가 있습니다. Front API와 Backoffice API를 개발하다보면 같은 도메인(예: DB Entity 및 Repository)을 사용할 때가 생길 수 있습니다. 중복코드가 많아 질 수 있는 상황입니다. 아래와 같이 Domain 모듈로 분리해주면 좀 더 세련된 코딩을 할 수 있을 것 같습니다. 이번 포스팅에서는 Multi-module에서 Domain(DB 의존성) 모듈을 분리하여 세팅할 때 필요한 작업을 정리해봅니다. 1. 프로젝트 구조 Project의 각 Module.. 2024. 2. 21.
MongoDB, docker-compose로 띄워보기 1. MongoDB란? MongoDB는 유연한 JSON 형식으로 데이터를 저장하는 인기 있는 NoSQL 데이터베이스입니다. Document Base 데이터베이스로, 데이터를 Table과 Row가 아닌 Document로 저장합니다. MongoDB는 유연한 스키마, 확장성, 고가용성, 쿼리, Indexing 등으로 다양한 웹서비스에서 사용됩니다. 대부분의 프로덕션 환경에서는 MongoDB 인프라는 클러스터링 되어 구성됩니다. 클라우드를 사용한다면 AWS DocumentDB를 선택할 수 있습니다. 이는 MongoDB와 완전 호환됩니다. 이번 포스팅에서는 MongoDB를 docker-compose로 띄우고, 계정 생성까지 해보겠습니다. 2. docker-compose.yml 작성 아래와 같이 docker-com.. 2024. 2. 14.
Springboot Webflux에서 blocking 감지하기(with BlockHound) 1. BlockHound란? Webflux를 도입하고 로깅 관련 리서치를 하던 중 우연히 blocking을 감지하는 라이브러리가 있다는 것을 알게 되었습니다. 출처: https://stackoverflow.com/questions/63788067/spring-webflux-and-non-blocking-logging-with-log4j2 로깅 관련 Stackoverflow질문의 채택된 답변에서 처음 접하게 되었습니다. BlockHound란 리액티브 애플리케이션에서 Blocking 코드를 감지하고 식별하는 라이브러리입니다. Project Reactor와 호환되며, Blocking 코드를 감지하고 StackTrace를 통해 그 원인을 식별합니다. Project Reactor를 기반으로 하는 Webflux는 .. 2024. 2. 8.
Springboot에서 P6Spy 통해 쿼리 로깅 1. 문제 & 도입 배경 Springboot + JPA를 사용하여 피처를 개발하다보면 실제 DB에 어떤 쿼리가 실행되는지 표시하고 싶을 때가 있습니다. JPA 사용 시 아래와 같이 옵션을 주면 쿼리가 표시됩니다. ## application.yml spring: jpa: properties: hibernate: show_sql: true 아래와 같이 Hibernate: {SQL} 형식으로 표시됨을 확인 할 수 있습니다. 2024-02-03T10:11:16,918 INFO [http-nio-8080-exec-1] o.s.w.s.FrameworkServlet: Completed initialization in 1 ms Hibernate: select tblmember0_.id as id1_1_0_, tblme.. 2024. 2. 3.
Springboot에서 ArchUnit 사용해서 아키텍처 테스트 ArchUnit은 어플리케이션의 아키텍처를 테스트하고 검증하기 위한 라이브러리입니다. https://www.archunit.org/getting-started ArchUnit을 사용하면 코드에서 특정 패키지, 네이밍 규칙 등이 잘 지켜지는지 테스트 해볼 수 있습니다. 예를 들면 아래와 같은 것들 말입니다. 패키지 구조 클래스 의존성 네이밍 어노테이션 ... Spring 개발자라면 아래 그림이 어떤걸 뜻하는지 한 눈에 알아볼 수 있습니다. 마치 관성처럼 아래와 같이 개발을 할 것입니다. +-------------------------+ +-----------------+ +-----------------+ | Controller | ----> | Service | ----> | Repository | | .. 2024. 1. 27.
k6, 부하 테스트 도구 사용 해보기(with Docker) k6(https://k6.io/docs/)란 성능 테스트 및 부하 테스트를 위한 오픈 소스 도구입니다. 웹어플리케이션의 API 성능을 측정하는데에 사용됩니다.동시 접속, 가상의 유저, 반복 횟수 등을 설정해서 서버 응답 시간, 처리량 등을 확인 할 수 있습니다.또한 가장 큰 장점은 Javascript 코드를 통해 테스트 시나리오를 작성 할 수 있다는 것이고Grafana 진영에서 개발되어 Grafana와 연동이 수월합니다. 정리하자면 grafana에서 제공 javascript로 테스트 작성 가상유저, 반복, 서버 응답 시간, 처리량 등 확인 가능 저는 익숙한 Javascript를 사용한다는 점에서 너무 편하더군요. 해당 글에서는 Docker를 통해 부하테스트 도구인 k6를 찍먹해보겠습니다. 1. 설치 do.. 2024. 1. 27.
Springboot에서 AWS SQS 사용 (with Kotlin) Springboot 버전별로 AWS SDK 버전을 잘 선택해야 합니다. 아래 캡쳐에 따라 그에 맞는 버전을 사용합니다. - 참고: https://github.com/awspring/spring-cloud-aws 이번 포스팅에서는 AWS의 SQS(Simple Queue Service)를 Springboot에서 사용하는 방법을 기술합니다. 로컬 환경은 아래와 같습니다. JDK 17 Kotlin 1.8.22 Springboot 3.1.4 SpringCloudAws 3.0.4 1. 의존성 추가 dependencies { implementation("org.springframework.boot:spring-boot-starter-webflux:3.1.4") ...(중략) implementation(platform.. 2024. 1. 18.
Testcontainers로 테스트 코드 만들기 2(with Kotlin) 앞서 Java로 작성했던 Testcontainers로 테스트 코드 만들기를 Kotlin으로도 작성해봅시다. 이번에는 Mysql이 아닌 Redis를 사용한다고 가정합니다. 또한 Webflux 기반 테스트 환경 구축방법에 대해 포스팅합니다. 로컬환경은 아래와 같습니다. Windows 10 JDK 17 Kotlin 1.8 Springboot 3.1.4 Testcontainers 1.17.7 1. 의존성 추가 아래와 같이 build.gradle.kts에 의존성을 추가해줍니다. /* build.gradle.kts */ dependencies { ...(중략) testImplementation("io.mockk:mockk:1.10.4") testImplementation("org.junit.jupiter:junit.. 2024. 1. 18.
Mysql을 Docker compose로 띄우기 Docker가 이미 설치되었다고 가정하고 Docker Compose를 통해 Mysql를 띄우는 방법을 소개합니다. 1. mysql.conf 파일 # Mysql-specific config file. # Read by /etc/mysql/my.cnf [client] # Default is Latin1, if you need UTF-8 set this (also in server section) #default-character-set = utf8 default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] # # * Character sets # # Default is Latin1, if you need UTF-8 set .. 2024. 1. 7.
Testcontainers로 테스트 코드 만들기 좋은 테스트 코드는 제품을 더욱 신뢰성 있고 견고하게 만듭니다. 주목할 점은 '좋은' 테스트 코드일 것입니다. 잘못 작성 된 테스트 코드는 되려 해로울 수 있습니다. '좋은' 테스트 코드는 일반적으로 아래와 같은 특징을 가집니다. 리팩터링 시, 테스트 코드는 수정되지 않음 버그 수정 시, 테스트 코드는 수정되지 않음 테스트 코드 내에 조건문, 순환문은 없음 메서드 보다는 행위를 테스트 딱히 실행할수 없는 상황이 아니라면 실제 의존성을 끊지 않도록 함 여기서 "딱히 실행할수 없는 상황이 아니라면 실제 의존성을 끊지 않도록 함"에 주목 해봅니다. 대부분 Springboot를 통해 Web Application 만들 때에는 데이터를 보관할 DB를 사용하게 될 것입니다. DB는 Web Application 입장에.. 2024. 1. 7.