전체 글 208

[KB IT's Your Life] 부하 테스트 및 성능 최적화 (K6, APM [Scouter], 인덱싱, 쿼리 최적화)

Dolfin 프로젝트KB It's your life 과정에서 프로젝트를 진행하며, 마지막 주간에 성능 최적화 과정을 진행중이다. 우선 성능 최적화의 목표를 정해보겠다. 성능 최적화 목표치우리 프로젝트의 1년 이내 목표 시장은 7만명이다. 7만명을 반올림하여 10만명의 유저를 수용한다고 가정하자. 물론 DAU(일일 활성 사용자)를 전체 유저로 잡진 않지만 우리는 최대한 보수적으로 잡고 테스트를 진행하기로 했다. DAU를 10만명으로 잡고, 보통 10% 정도의 유저의 동시 접속을 최대 부하로 잡는다. 하지만 우리는 10만명의 동시접속을 목표치로 잡았고, 서비스의 메인 시나리오에 대해 성능 최적화를 진행하기로 했다. 서비스 메인 시나리오우리 서비스의 주된 유저 시나리오는 다음과 같다.로그인메인페이지 접속(총 ..

KB IT's Your Life 2025.08.23

[KB IT's Your Life] 파이널 프로젝트 - 시스템 아키텍쳐 설계 (Auto Scalilng, 무중단 배포, private subnet, nat gateway)

kb 부트캠프 마지막 프로젝트가 시작했다. 배포를 시작부터 전부 하고 가고 싶어 cicd랑 배포를 전부 마무리하고 시작했다. 은행권 프로젝트이다보니, 보안을 최대한 신경써서 아키텍쳐를 구성했다. 아키텍쳐의 간단한 설명을 진행하도록 하겠다. 아키텍쳐 설명우선 우리가 돌리는 서버는 총 5개다. 메인 서버 2개카프카 서버 1개로그 전송 서버 1개터널링용 서버 1개 보안을 위해서 메인서버, 카프카 서버, 로그 전송 서버, RDS, elastic cahce는 모두 private 서브넷에 배포했다. private 서브넷은 인터넷에 연결되어 있지 않기 때문에, 외부에서 접속할 수도, 내부 트래픽을 외부로 내보낼 수도 없다.보안에 굉장히 강력한 옵션이 될 수 있다. 하지만 우리가 로컬에서 테스트할 때 RDS나 메인서버..

KB IT's Your Life 2025.07.21

[KB IT's Your Life] AWS ec2, 도커 이미지를 이용한 간단한 CI-CD 구축 (Spring Legacy)

ㅎㅇ안녕하세요, 스프링 레거시 환경에서 war 파일 was에 붙여 배포 어떻게 하냐는 문의가 많아 그냥 간단하게 정리해봅니다. 목표아주 기본적인 ci-cd를 구축해보겠습니다.vpc public subnet에 ec2를 올리고 ci-cd 작업까지 완료하는 걸 목표로 해보겠습니다. (public subnet은 아무나 접근 가능하기 때문에 보안상 좋지 않으니 추후 private으로 옮기는 것도 고려해보세요) build.gradle 파일우선 build.gradle 파일에 war 파일을 만드는 코드를 추가해줍시다. plugins { id 'java' id 'war'} 그냥 플러그인에 war 넣으면 돼요 간단하죠? 이제 도커 파일을 만들어봅시다FROM tomcat:9.0.107-jdk17-temurin#..

KB IT's Your Life 2025.07.19

[개발일지] spring batch를 통한 대량 이메일 발송 기능 개발 - 3 (redis Shed lock, @Scheduled, 분산락)

이전 포스트https://2junbeom.tistory.com/205 [개발일지] spring batch를 통한 대량 이메일 발송 기능 개발 - 2 (AWS SES로의 마이그레이션, 적절한 스https://2junbeom.tistory.com/204이전 포스트 [개발일지] spring batch를 통한 대량 이메일 발송 기능 개발 - 1 (멀티 스레딩 동시성 문제)spring batch 도입현재 진행 중인 프로젝트에서 이메일을 대량으로 발송2junbeom.tistory.com 분산락 도입 과정우리 서비스는 여러 대의 서버가 작동하는 상황이다. 새벽 3시에 자동으로 이메일 전송을 하게 만드려면 @Scheduled 어노테이션을 활용해야 한다. 그러나 서버 여러 대에 모두 @Scheduled 어노테이션이 걸려..

[개발일지] spring batch를 통한 대량 이메일 발송 기능 개발 - 2 (AWS SES로의 마이그레이션, 적절한 스레드 개수와 청크 사이즈 계산, 쿼리 최적화, 스레드 동적 생성)

https://2junbeom.tistory.com/204이전 포스트 [개발일지] spring batch를 통한 대량 이메일 발송 기능 개발 - 1 (멀티 스레딩 동시성 문제)spring batch 도입현재 진행 중인 프로젝트에서 이메일을 대량으로 발송하는 기능을 개발해야했다. 대량 메일 발송 기능을 위해 spring batch 기능을 도입했다. spring batch 도입 이유는 다음과 같다.메모2junbeom.tistory.com SES 선택 이유대량 메일 발송 서비스에서 가장 유명한 서비스는 두 개가 있었다. 1. AWS SES2. SendGrid 두 개의 장단점을 비교해보자 SES장점비용 저렴 : 1000건 당 $0.1기존 배포 및 서비스를 모두 AWS에서 사용하고 있었기에 통합이 쉽고로그 관리에..

[개발일지] spring batch를 통한 대량 이메일 발송 기능 개발 - 1 (멀티 스레딩 동시성 문제)

spring batch 도입현재 진행 중인 프로젝트에서 이메일을 대량으로 발송하는 기능을 개발해야했다. 대량 메일 발송 기능을 위해 spring batch 기능을 도입했다. spring batch 도입 이유는 다음과 같다.메모리 최적화한 번에 모든 객체를 메모리에 올려서 처리하는 게 아니라 chunk 단위로 메모리에 올려 처리하기 때문에,메모리 최적화에 용이하다.쉬운 재시도이메일 발송의 경우 초당 전송량이 제한돼 있기 때문에, 이메일 전송에 실패할 가능성이 높다.모든 회원에게 이메일을 실패없이 보내는 것을 목표로 하기 때문에, 재시도는 필수이고이러한 재시도는 spring batch에서 쉽게 구성할 수 있다.병렬 처리 기능멀티 스레딩, 파티셔닝 등의 기능을 지원하여 이를 기반으로 원할한 병렬 처리가 가능하..

백준 2800번 괄호 제거 (java)

[Gold IV] 괄호 제거 - 2800문제 링크성능 요약메모리: 19808 KB, 시간: 240 ms분류자료 구조, 문자열, 브루트포스 알고리즘, 스택제출 일자2025년 5월 9일 09:44:20문제 설명어떤 수식이 주어졌을 때, 괄호를 제거해서 나올 수 있는 서로 다른 식의 개수를 계산하는 프로그램을 작성하시오.이 수식은 괄호가 올바르게 쳐져 있다. 예를 들면, 1+2, (3+4), (3+4*(5+6))와 같은 식은 괄호가 서로 쌍이 맞으므로 올바른 식이다.하지만, 1+(2*3, ((2+3)*4 와 같은 식은 쌍이 맞지 않는 괄호가 있으므로 올바른 식이 아니다.괄호를 제거할 때는, 항상 쌍이 되는 괄호끼리 제거해야 한다.예를들어 (2+(2*2)+2)에서 괄호를 제거하면, (2+2*2+2), 2+(2*..

백준 15831번 준표의 조약돌 (java)

[Gold IV] 준표의 조약돌 - 15831문제 링크성능 요약메모리: 28852 KB, 시간: 256 ms분류두 포인터제출 일자2025년 4월 30일 09:46:20문제 설명그림1. 준표가 좋아하는 하얀색의 미미준표는 오랜만에 미미와 함께 산책을 나왔다. 산책로에는 일렬로 검은색과 흰색 조약돌이 놓여 있다. 총 N개의 조약돌은 1번부터 N번까지 차례로 번호가 붙여져 있다. 준표는 이 조약돌을 주워 집에 장식하려고 한다.준표는 임의의 지점에서 산책을 시작하고, 원하는 지점에서 산책로를 빠져나와 집으로 돌아간다. 이때 준표는 산책한 구간에 있는 모든 조약돌을 줍는다. 미미의 건강을 위해 준표는 조금이라도 더 긴 구간을 산책하고 싶다. 하지만 준표에게는 확고한 취향이 있어, 아래 조건을 만족하는 구간만을 산..

[정보처리기사] 2025년 1회차(4월 20일) 실기 시험 후기

공부 기간코딩 문제랑 sql 문제만 다 맞추면 60점은 나오기에 별 다른 공부를 하지는 않았다.워낙에 암기를 싫어하는 성격이기도 하고, 운영체제랑 컴퓨터 네트워크, 알고리즘 등 수업은 다 1등을 할 정도로 열심히 공부했었기에내 대학 시절 기억을 믿기로 했다. 실기 기출만 5일 정도 돌려보고 시험을 보러 갔다. 내 전략은 알고리즘, sql 문제 다 맞추고 개념 문제 1,2개 더 맞추기! 실기 시험 준비물볼펜, 화이트, 계산기, 신분증 이 정도만 챙겨가면 된다. 시험지 아래 부분에 계산식을 적을 공간이 존재하기 때문에, 연습장을 챙겨가지 않아도 된다. 시험 후기알고리즘 문제가 좀 더럽게 나왔다.재귀가 굉장히 많고 (출제자 중 재귀 변태가 있는 것이 분명) 비트 연산문제도 나왔다. 짜증나긴 했으나 못 풀 정도..

[정보처리기사] 실기 문제 정리 - 3 (2023년 1회, 2022년 3회)

insert into 학생(학번, 이름, 학년,전공, 전화번호) values 9830287, '뉴진스', 3, '경영학개론', '010-1234-1234' 열 이름을 적어줄 때 따옴표는 필요없다. 5. 다음은 C언어의 문제이다. 알맞은 출력값을 작성하시오. 12345678910111213141516171819#include stdio.h> void main(){ int n[3] = {73, 95, 82}; int sum = 0; for(int i=0;i3;i++){ sum += n[i]; } switch(sum/30){ case 10: case 9: printf("A"); case 8: printf("B"); c..