내가 만든 모듈을 Maven Central 라이브러리로 등록하기
Maven Central Repository에 가입 https://central.sonatype.com Maven Central 네임스페이스 구성하기 네임스페이스 생성 네임스페이스는 인증 과정이 필요하기 때문에 소유를 증명할 수 있는 도메인에 대해서 입력해야한다. 하지만, Github를 이용하면 사용 계정의 유무만 확인되면 이용 가능하...
Maven Central Repository에 가입 https://central.sonatype.com Maven Central 네임스페이스 구성하기 네임스페이스 생성 네임스페이스는 인증 과정이 필요하기 때문에 소유를 증명할 수 있는 도메인에 대해서 입력해야한다. 하지만, Github를 이용하면 사용 계정의 유무만 확인되면 이용 가능하...
대용량 데이터 엑셀 다운로드 메모리 이슈 해소를 위해 공통 모듈을 개발했던적이 있다. 당시에는 해당 시스템의 요구사항을 최소한 만족할 수 있게 구현했었다. 모듈을 다시 보면서 모듈 사용자 기준에서 어떠한 불편함과 구조적인 문제가 있는지 확인해보았고, 기존의 목적에 맞게 모듈을 재구성하여 해보고자 한다. 엑셀 다운로드 모듈 개발 목표 스타일과 ...
대용량 트래픽 개인 프로젝트를 진행하면서 부하 테스트 과정에서 성능 향상을 위한 코드 개선과 부가적으로 테스트했던 내용을 정리해보았다. 코드 및 성능 개선 Mapping Sort Pagination Spring Data JPA & Querydsl Auto Commit 설정 Mapping (List) API 개발 시 ...
KinD를 이용해 로컬에 K8S 클러스터 구축을 진행해보았다. KinD의 경우 로컬에서 개발 및 테스트용으로 적합한 방법이다. KinD(Kubernetes in Docker)를 이용한 K8S 클러스터 구축 운영 환경에 AWS에 K8S를 구축하려한다. AWS에서 K8S를 이용하는 방법으로는 AWS EKS(Elastic Kubernetes Se...
Jira란? Jira는 Atlassian에서 개발한 프로젝트 관리 및 이슈 추적 도구이다. 소프트웨어 개발은 물론이며 팀 협업이나 업무 관리에서도 폭넓게 이용할 수 있다. 특히, Agile(애자일) 개발 방법론을 지원하며 다양한 템플릿을 지원한다. Jira의 구성 요소 이슈(Issue): Jira에서 작업 항목을 나타내는 기본 단위입니다. ...
K8S를 실제 운영서버에 설정해보기 전에 K8S가 어떤 것인지 알아보며 로컬 환경에서 K8S를 구축해보려 한다. 로컬 환경에서 구축하는 방법 중 Minikube, KinD(Kubernetes in Docker), Docker Desktop 등을 이용해 로컬 환경에서 Kubernetes를 실행하는 방법이 있으며, 이 중 KinD를 이용해 K8S 클러스터...
이전 여행 플래너 서비스는 인프라 구축 및 부하에 대한 대응 구성을 통해 대용량 트래픽 처리를 진행했다. 초기 구조는 모놀로식 아크텍처를 목적으로 벡엔드 개발을 진행하면서 앞으로 서비스의 구조를 마이크로 서비스 아키텍처를 기반으로 진행해보려한다. DDD(Domain-Driven Design : 도메인 주도 설계) MSA 설계 방법론으로 도메인 주...
스트레스 테스트 전 설정해야할 것으로 과도한 트래픽이 발생하고 다시 낮아지게 될 경우 서버에 대한 Scale Down/Up 혹은 Scale In/Out이다. Scale Down/Up : 수직적 확장을 뜻하며 운영중인 서버 컴퓨팅을 축소(Down)하거나 확장(Up)을 의미한다. Scale In/Out : 수평적 확장을 뜻하며 운영중인 서버를 ...
지난 글에서 부하 테스트를 진행하였다. 이번 글에서는 4시간의 테스트 동안 서버가 어느정도의 트래픽을 버티며 어느 시점부터 목표 수치를 넘어가거나 성능이 저하되는 지점을 찾아서 확인해보려한다. 인프라 사양 구분 EC2 RDS ElastiCache(Redis) ...
시나리오별 RPS 및 VUser 계산 DAU : 25,000 (주제 및 분석 참고) RPS : DAU x 1명당 1일 평균 요청 수 / 86400(초) VUser : 목표 RPS * T / R T : 한번의 시나리오를 완료하는데 걸리는 시간(s) R : RPS 목표 Response Time...
Jenkins Jenkins란 오픈 소스 자동화 서버로, 주로 지속적 통합(Continuous Integration, CI) 및 지속적 배포(Continuous Delivery, CD)를 지원하는 도구이다. 자동화 프로세스를 설정하고, 빌드, 테스트, 배포 등을 자동으로 수행하여 개발 주기를 단축시키고 품질을 향상시킬 수 있다. 주요특징 자...
시나리오 테스트 전 게별 API를 테스트하면서 사용한 모니터링 도구로 Spring Boot Admin, Visual VM을 이용했다. Spring Boot Admin Spring Boot Admin을 Spring Boot 기반 애플리케이션을 모니터링하고 관리하기 위한 웹 기반 UI 애플리케이션이다. Spring Boot 애플리케이션의 상태를...
시나리오 테스트를 진행하기 전에 이슈가 발생할 수 있는 경우가 어떤게 있을까 해서 비즈니스 로직 중 DB 엑세스가 어느정도 있으며 다수의 데이터를 조회해야하는 API에 대해서 테스트를 진행해보았다. 사전 테스트 - 여행정보 현황 조회 VUser : 30 Test Time : 10m 시나리오 테스트 전이기에 TPS와 Mean Test...
nGrinder 부하 테스트 도구 종류는 여러가지가 있다. 그 중 nGrinder를 사용해보려 한다. nGrinder는 네이버에서 개발한 오픈소스 부하 테스트 도구로 스크립트 생성과 테스트 진행 과정을 모니터링 할 수 있으며, 테스트가 종료되면 UI를 통해 최종 결과 보고서를 확인할 수 있다. 단순히 부하만을 발생시키는 것이 아니라 스크립트를 작...
테스트 데이터 분석 전체 인구에 대한 통계 조사는 아니지만, 2023년 12월 기준으로 최근 1년이내 국내 여행 평균 횟수는 8.23이다. https://www.fnnews.com/news/202312150702402891 유사 서비스 분석을 통해 확인한 2023년 평균 국내여행 고유 방문자(752,703명)을 기준으로 데이터를 측정했으며...
AWS 서버 환경 구축 초기 인프라 구축의 경우 AWS의 EC2, ElastiCache, RDS 서비스를 이용해 인프라를 구축했다. API 서버의 경우 컨테이너 기반의 환경을 구성하기 위해 Docker, docker-compose를 이용했으며 토큰 관리를 위해 ElastiCache의 Redis를 이용했다. RDS는 프리티어에서 사용할 수 있으며 가...
여행일정 테스트 케이스 기능 구분 테스트 구분 세부 테스트 구분 1. 홈 > 여행 정보 1.1 여행정보 현황 테스트 - 여행 정보 현황 회원정보 NULL 테스트 ...
개발 전 시행해야할 부분으로 회원 및 토큰 발급에 대해서 테스트에 필요한 작업들을 TDD 기반으로 진행했으며, 동작에 대해서는 Mockito 프레임워크를 통해 테스트를 진행했다. 기능 구분 테스트 구분 세부 테스트 구분 1. ...
대용량 트래픽에 대한 처리 경험이 없었다. 트래픽이 변화하면서 발생하는 이슈에 대해서 처리할 수 있는 경험이 필요했다. 실제 운영할 서비스는 아니지만, 만들고 싶었던 서비스를 설계부터 배포까지 대용량 트래픽에 대한 처리 과정을 테스트와 모니터링 등 다양한 도구들을 통해서 어떠한 과정을 통해서 트러블 슈팅을 했느지를 적어보려한다. 대용량 트래픽 사실...
[Spring Boot + JPA] JPA 트랜잭션 위 글에서 JPA 트랜잭션에 대해 간단하게 정리했었다. 이번에는 세부적인 내용을 이해하기 위해 락(Lock), 트랜잭션 격리 수준(Transaction Isolatin Level), JPA에서의 낙관적 락(Optimistic Lock), 비관적 락(Pessimistic Lock)에 대한 내용...
클래스 다이어그램 접근제어자 표기법 - : private + : public # : protected 클래스 간의 관계 일반화 관계 (Generalization) 실체화 관계 (Realization) 의존 관계 (Dependency) 연관 관계 & 직접 연관 관계 (Association & Direct...
최근 MSA에서의 주요 기술 중 메시지 지향 미들웨어(Message-Oriendted Middleware, MOM)에 대해 공부하면서 Spring Boot에서 Kafka를 이용해 데이터를 처리한 내용을 적어봅니다. 메시지 지향 미들웨어(Message-Oriented Middleware, MOM) MOM이란 분산 시스템에서 메시지를 안전하고 신뢰성 ...
2022년에 지인과 함께 재고관리 시스템을 만들었을 때 수동으로 API 문서를 작성했습니다. 지금 생각해보면 API 문서를 자동화할 수 있는 기술에 대해 찾아보자는 생각도 없이 예전 경험만 생각해서 작업했네요. Spring Boot에 대해서 공부하면서 Swagger에 대해 알게되었고 재고관리 시스템의 일부 API에 적용한 내용을 정리해보고자 합니다....
이전 게시물에서 Docker를 이용한 Redis Master/Replica(Slave), Sentinel 환경 구축 및 AOF 매커니즘을 이용한 백업에 대해 보았습니다. 구축한 환경을 기반으로 이번 게시물에서는 Spring Boot에서 Redis 캐싱 설정 및 처리를 해보겠습니다. Redis Master / Replica(Slave), Sent...
작년에 재고 관리 시스템 버전을 업그레이드하면서 Redis를 사용했습니다. 당시에는 단순히 토큰관리 용도로만 사용했지만, 인메모리 DB Redis를 이용해 서비스를 운영할 때 어떠한 기술을 이용할 수 있는지 그리고 AOF 매커니즘으로 어떻게 백업을 해야하는지에 대한 공부를 하면서 내용을 정리해보았습니다. Redis란? Redis란 오픈 소스 인메모...
JPA + Spring Data JPA 사용해보기(Dynamic Query, Paging, Sort)에서 Spring Data JPA에서의 동적 쿼리, 페이징, 정렬에 대한 내용을 포스팅했습니다. 이번에는 Spring Data JPA의 Join에 대해 적어보겠습니다. JPA + Spring Data JPA 사용해보기(Dynamic Query, ...
JPA + Spring Data JPA 사용해보기(1)에서 기본적인 CRUD에 대한 내용을 포스팅했습니다. 이번에는 Spring Data JPA Query Method의 조건절 및 동적 쿼리, 페이징 및 정렬에 대해 적어보겠습니다. JPA + Spring Data JPA 사용해보기(CRUD) Query Method Spring Data J...
이전 글에서 Github Actions CI/CD 환경을 구축하고 배포를 해보았습니다. 이번 글에서는 이전 글에서 구축한 CI/CD 파이프라인을 이용해 Nginx를 이용한 무중단 배포를 적용한 경험을 적어봅니다. Spring Boot + Docker + Github Actions를 활용한 CI/CD 환경 구축 먼저, 무중단 배포란 무엇이고 ...
재고관리 시스템을 운영할 때 초기에는 개발 기간이 짧아 급한대로 수동배포를 했으나, 빌드/테스트 과정에서 체크해야하며 배포 과정에서 불필요한 설정도 같이 배포되어 재작업으로 인한 많은 시간소요와 불편함이 있어 당시에 구축한 CI/CD 환경을 정리해보고자 합니다. 환경 구축 전 CI/CD에 대한 정의를 보겠습니다. CI/CD CI란? CI는 간단...
이전 게시물에서 Querydsl이 무엇이고 사용방법에 대해 내용을 정리해보았습니다. 이번에는 Querydsl에서 Paging, Dynamic Query, MySQLDialect를 통한 Full-text Index를 이용한 검색에 대해 정리해보고자 합니다. 프로젝트는 Spring Data JPA + Querydsl 사용해보기(1)와 동일한 환경으로 ...
Querydsl란? Querydsl는 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해 주는 프레임워크다. SQL을 직접 작성하거나 XML 파일에 쿼리를 작성하는 대신, Querydsl이 제공하는 플루언트(Fluent) API를 이용해서 쿼리를 생성할 수 있다. 단순 문자열과 비교해서 Fluent API를 사용할 때의 장점은 다음과 ...
개발환경 및 프로젝트 세팅 개발 환경 및 프로젝트 세팅은 JPA + Hibernate와 동일하게 이용하겠습니다. JPA + Hibernate 사용해보기 신규 테스트 클래스 생성 JpaSpringDataJpaApplicationTests.java 테스트용 설정 파일(application-test.yml)을 따로 생성하여 설정해주는 것이 ...
개발 환경 IDE : IntelliJ IDEA (Community Edition) JDK : Java 17 Framework : Spring Boot 3 DB : MySQL 8.0 DBCP : HikariCP Spring Project 생성 Spring Initializr 웹 도구 사이트(https://spring.io)에서...
JPA를 보기전에 ORM Object Relational Mapping의 약자로 말 그대로 객체와 데이터베이스의 관계를 매핑하는 것이다. 비교하자면 SQL Mapper 예로 MyBatis를 사용할 때 SQL을 직접 작성하여 데이터를 조작하면 단순히 필드에만 매핑된다. 반면에, ORM은 RDB 관계를 Object에 매핑을 목적으로 객체와 테이블을 ...
Github Page Repository 생성 아래 링크에서 파일을 다운로드 받거나 Web URL을 복제하여 로컬 리포지토리를 만들어준다. fork 후 Repository를 Clone해도 됩니다. Theme : http://jekyllthemes.org/themes/jekyll-theme-chirpy Github : https://gith...
개발 환경 IDE : IntelliJ IDEA (Community Edition) JDK : Java 17 Framework : Spring Boot 3 DB : MySQL 8.0 DBCP : HikariCP Spring Project 생성 Spring Initializr 웹 도구 사이트(https://spring.io)에서...
Intro 회사 생활 초반에 자주 발생한 문제였던 Transaction에 대해서 다루고자 한다. 당시에는 JavaBean 기반의 프로젝트에서 Spring으로 넘어간지 오래되지 않았을 때이다. 트랜잭션는 처리가 되어있었으나, 시간이 지날수록 DB Pool 이슈와 롤백 이슈가 있는 시스템이 있어 확인했을 때 잘못된 사용으로 개선하기도 했었다. Spri...
Intro 개발자로서 벌써 5년의 시간이 지나고 퇴사한 지 2달이 지났습니다. 저는 2018년 8월에 첫 회사에 입사하여 10개월간 연구개발팀 그리고 이직하여 2019년 6월을 시작으로 4년 6개월 동안 개발팀으로 근무하고 2023년 11월 20일에 퇴사하게 되었습니다. 이번 기회를 통해 5년 동안 회사 생활을 회고하면서 저 자신을 다시 돌아볼 ...