객체지향적으로 코드 리팩토링 하기 [Spring/Java]
·
Spring
1. 객체지향이란?JAVA는 알다시피 객체지향적인 언어다. 그렇다면 객체지향이라는 것이 무엇일까 한번 다들 고민해 봤을 거라고 생각한다.검색해서 나오는 내용들을 보면 객체지향은 OOP다, SOLID원칙을 지켜야 한다라고 단순히 설명하면서 알려주는데 대부분의 사람도 마찬가지로 나도 이런 식으로 그냥 외우고 있었다.또한 SOPT라는 동아리를 하고, 프리랜서로 외주를 맡아 일하면서 여러가지 프로젝트를 진행했는데 코드를 구성할 때 객체지향적으로 생각하면서 코드를 짜지는 않았던 것 같다.그래서 다음과 같은 책을 읽고 코드를 리팩토링하면서 블로그를 작성해보려고 한다.https://product.kyobobook.co.kr/detail/S000213447953 자바/스프링 개발자를 위한 실용주의 프로그래밍 | 김우근..
Spring Boot 서비스 환경 스트레스 테스트 3 [Spring/Java]
·
Spring
지금까지 진행된 내용은 JVM 환경을 모니터링하고 DB 커넥션을 빠르게 되돌려 줄 수 있게 쿼리 최적화와, 트랜잭션의 동작, QueryHints 어노테이션, DB의 접근하는 로직을 최소화할 수 있도록 구성했다.이제 스트레스 테스트를 실제로 진행해야 한다.1. 스트레스 테스트 with K6K6는 그라파나 Lab에서 개발된 오픈소스로 다른 스트레스 테스트 툴에 비해서 들어가는 리소스가 적다. 또한 Go언어로 만들어져 빠르고 실제 테스트 스크립트 작성은 Js로 구성할 수 있다.https://kiru-dev-study.tistory.com/26 Spring Boot 프로파일링 및 Stress Test [Spring]현재 진행하고 있는 프로젝트의 대한 최적화를 진행하기 위해 다음과 같은 기술 스택을 사용했고 어떻..
Spring Boot 서비스 환경 스트레스 테스트 2 [Spring/Java]
·
Spring
https://kiru-dev-study.tistory.com/27 Spring Boot 서비스 환경 스트레스 테스트 [Spring/Java]1. 구성하게 된 이유스타트업 프로젝트를 2주안에 서버 구축이 완료되어어야 한다는 소리에 다급하게 프로젝트를 시작하고 인프라 구축, API 개발까지 완료를 한 상황에서 물론 스스로 응답에kiru-dev-study.tistory.com1편에 이어서 어떻게 개선했는지 확인해 보도록 하겠다. 스트레스 테스트에서 가장 중요한 점은 어디서 병목이 생기는지, 왜 병목이 생기는지에 대한 부분이다.1. 병목 지점 - DB실제로 가장 큰 병목 지점은 DB/IO의 대한 부분이다. 왜 그런가 하면 DB의 구조를 생각하면 좋은데 DB는 디스크에 데이터가 저장되게 된다. 즉 DB를 조회한..
Spring Boot 서비스 환경 스트레스 테스트 [Spring/Java]
·
Spring
1. 구성하게 된 이유스타트업 프로젝트를 2주안에 서버 구축이 완료되어어야 한다는 소리에 다급하게 프로젝트를 시작하고 인프라 구축, API 개발까지 완료를 한 상황에서 물론 스스로 응답에 관련한 테스트는 진행했지만 내가 만든 서비스의 수용량, 즉 얼마나 많은 유저들이 접속해서 유지할수 있는지 파악이 되지 않았다. 그리고 만든 서비스는 MSA 구조로 나뉘어져 있는 구조였기 때문에 각 컴포넌트 끼리 통신을 주고 받는 경우가 많아 하나의 요청도 분산되어있는 서비스에서 추적이 가능해야 했다. 따라서 스트레스 테스트 과정중 Spring Boot의 Observability가 필요하다고 생각했고 그에 따라 구성해본 경험을 작성해보려고 한다. 2. 서비스 환경 버젼(2025.01.04 기준 최신 latest 이미지만 ..
Spring Boot 프로파일링 및 Stress Test [Spring]
·
Spring
현재 진행하고 있는 프로젝트의 대한 최적화를 진행하기 위해 다음과 같은 기술 스택을 사용했고 어떻게 진행했는지, 어떤 과정으로 나아갔는지 작성해보도록 하겠다.Spring Boot 3.3.2Java 21Docker각 서비스 환경 구성Grafana API 스트레스 테스트, Spring Boot , CPU 메모리등 리소스 시각화InfluxDBAPI 스트레스 결과용 DBK6스트레스 테스트 툴로 설정 : 리소스를 적게 잡아 먹어 같은 JVM을 사용하는 JMeter및 NGrinder보다 가벼운 장점Prometheus각 서비스 컴포넌트 데이터 수집지난 글에서 말했다시피 다음과 같이 코드레벨에서 멀티모듈로 코드를 작성했고 아키텍쳐는 다음과 같고 Docker에 할당된 리소스는 다음과 같이 구성했다.CPU: 8Memory..
멀티모듈 프로젝트 Docker 빌드 전략: Path 기반 접근법[Docker&Github Action]
·
Spring
0.1 멀티 모듈이란?자바에서 모듈(Module)은 독립적으로 배포될 수 있는 코드의 단위를 말합니다.멀티 모듈(Multi-Module)이란 이러한 코드 뭉치를 하나의 프로젝트 안에서 관리하는 것을 의미합니다.멀티 모듈 안에서 각각의 모듈은 서로를 향한 의존성을 가질 수 있습니다.여러개의 모듈을 생성할 때 반드시 멀티 모듈 프로젝트를 생성해야 하진 않지만 코드 중복 제거, 모듈 간 의존성을 위해 저장소에 배포하지 않아도 되는 점 등 장점이 있고 이를 각각 다른 컴포넌트로 구성해야 하는 경우에 하나의 프로젝트에서 어떻게 빌드를 수행해야 하는지 확인해 보겠습니다.예시를 들자면 다음과 같이 스프링 프로젝트를 멀티모듈로 하나의 프로젝트에서 구성했습니다. 그 후에 컨테이너화 하여 서버에 각각의 컴포넌트로 띄우고자..
가상 스레드 vs 반응형 프로그래밍 [Spring/Java]
·
Spring
Java 21에서 VirtualThread가 등장함에 따라서 기존의 스레드 풀로 스레드를 관리하던 것과 달리경량스레드를 활용해서 더많은 비동기 요청들을 처리할 수 있게 되었다.그렇다면 생각해볼 문제가 있다. 기존의 반응형 프로그래밍으로 구성되었던 Spring WebFlux같은 반응형 프로그래밍을 사용하지 않아도 될것인가? 에 대한 의문이 생겼고 그에 알아보던 와중 흥미로운 글을 발견해서 이를 보고 얘기해보려고 한다.https://inside.java/2024/10/28/javazone-virtual-threads/ Are Virtual Threads Going to Make Reactive Programming Irrelevant? – Inside.javaVirtual threads are cheap t..
[DB] JAVA 개발자라면 알아야 하는 SQL Best Practice
·
DB
https://www.baeldung.com/ 여기서 다음 글을 찾아서 좋은 내용이라고 생각해 한번 글을 작성해보려고 한다.https://foojay.io/today/sql-best-practices-every-java-engineer-must-know/ 여기서는 Java Engineer라면 모두 알아야 하는 SQL 모범사례에 대해서 얘기하고 있는데 대부분의 내용들은 좋지만 SubQuery에 대한 부분은 사람들이 인정하지 못하는지 댓글로 다양한 얘기들을 하고 있는 모습을 볼 수 있다.또한 이러한 내용은 RealMysql 2권에서도 1장에 쿼리최적화 부분과 상당히 일치하는 부분이 많은데 이 블로그에서 요약으로 정리해 보도록 하겠다.주로 이 글에서는 인덱스를 활용할때 어떻게 해야 하는지에서 다루고 있다. T..
[DB] Redis Cluster Docker Compose로 구축하기
·
DB
https://kiru-dev-study.tistory.com/20 [DB] Redis Cluster먼저 이글은 "실전 레디스" 라는 책을 읽고 나서 적은 글이다.24년 5월에 발행한 따끈따끈한 책이기도 했고 시중에 생각보다 redis에 대한 내용으로 책이 없었는데 마침 redis에 빠져서 공부를 하다kiru-dev-study.tistory.com먼저 Redis Cluster에 대한 이해도를 높이기 위해서 다음글을 먼저 보고 오는 것을 추천드린다.그리고 Redis cluster를 Docker compose로 구성하기 위해서는 다음의 내용을 조금 아는 것이 좋다고 생각한다.도커도커 네트워크의 구성도커로 실행할때 컨테이너 네임에 관한 DNS 방식도커 컴포즈Redis Cluster의 구조Redis cluste..
[Spring] 응? 이게 왜 롤백이 안되지? - 비동기와 @Transaction
·
Spring
https://www.baeldung.com 에서 블로그를 찾아보다가 Java 23에 대한 글을 보게되었다.https://foojay.io/today/java-23-has-arrived-and-it-brings-a-truckload-of-changes/ 이 글인데 Java23의 특징과 22의 대한 차이점 위주로 설명하는 포스팅이다.여기서 가장 흥미를 끌었던 내용은 비동기의 처리 부분이였는데JEP 480: Structured Concurrency (Third Preview) Java's take on concurrency has always been unstructured, meaning that tasks run independently of each other. There's no hierarchy, ..