경험/기술

nGrinder 간단하게 사용해보기

nGrinder 네이버에서 개발한 서버 부하 테스트를 위한 오픈 소스 프로젝트다. 애플리케이션을 개발하고 nGrinder에서 여러 가지 가상 시나리오를 만들어 트래픽이 몰렸을 때 성능을 측정할 수 있도록 도와준다. 부하 테스트 nGrinder nGrinder는 웹 애플리케이션 Controller와 자바 애플리케이션 Agent로 구성되어 있다. nGrinder 설치 https://github.com/naver/ngrinder/releases Releases · naver/ngrinder enterprise level performance testing solution. Contribute to naver/ngrinder development by creating an account on GitHub. gi..

경험/기술

[APM] 모니터링 도구 Scouter 도입

애플리케이션의 성능 모니터링을 위해 다양한 도구를 사용하고 있다. 이번에 도입해 본 Scouter는 LG CNS에서 개발한 APM(Application Performance Monitoring) 도구로, 애플리케이션의 성능을 실시간으로 모니터링하고, 문제를 식별하여 해결하는 데 필수적인 인사이트를 제공한다. Spring Boot: 3.0.11 Java: 17 WAS EC2: t4g.small (vCPU: 2, RAM: 2GB) (AMI: Amazon Linux 2 AMI (HVM)) APM EC2: t2.micro (vCPU: 1, RAM: 1GB) (AMI: Amazon Linux 2 AMI (HVM)) APM EC2 구성 ec2 생성은 다른 글에서도 너무 많이 다뤄서 넘어가겠다. JAVA 8 설치 s..

경험/기술

[APM] 모니터링 도구 Pinpoint 도입

기존에 CI/CD를 구성하며 올려줬던 WAS에 분산 환경 APM 도구이며 네이버에서 만든 pinpoint를 도입하며 겪었던 경험을 공유하고자 한다. Spring Boot: 3.0.11 java: 17 WAS EC2: t4g.small (vCPU: 2, RAM: 2) (AMI: Amazon Linux 2 AMI (HVM)) APM EC2: t4g.small (vCPU:2, RAM: 2) (AMI: Amazon Linux 2 AMI (HVM)) 더보기 처음에는 APM EC2는 t2.micro로 구성했는데 RAM 1기가 이상을 사용해서 바로 터져버려서 t4g.small로 업그레이드.. 😅 (2기가도 부족한 것 같다, 매우 불안정..) APM EC2 구성 AMI: Amazon Linux 2 AMI (HVM)를 ..

경험/기술

[CI/CD] [Github Actions] 배포 자동화 구성

우선 배포과정을 설명하기 전에 전체적인 구조부터 보자. 조금은 추상적일 수도 있는 배포과정을 전체적으로 정리해보려고 한다. 1. GitHub Actions Workflow 트리거: Merge가 완료되면, `.github/workflows/cicd-deploy.yml`에 정의된 GitHub Actions Workflow가 자동으로 트리거 된다. 이 Workflow는 배포 프로세스를 자동으로 실행하기 위한 단계들을 포함하고 있다. 2. 깃 서브모듈 및 시크릿 설정: Workflow가 실행되면서 먼저 깃 서브모듈을 초기화하고 업데이트하여 의존하는 외부 또는 공유 코드 라이브러리를 가져온다. 그다음에 GitHub Secrets에 저장된 비밀 설정 파일(예: 환경 변수, 인증 키 등)을 사용하여 애플리케이션에 필..

경험/기술

[Java] [Lombok] 제대로 알고 사용하기 !

Java + SpringBoot를 사용하는 프로젝트를 한다면 롬복을 한 번쯤은 써봤을 것이고, 없으면 안 된다는 사람도 있을 것이다. 근데 "롬복을 제대로 알고 있나?"라는 의문이 들어서 정리해보려고 한다. Lombok 🌶️ 공식문서를 보면 롬복은 코드 작성을 편하고 훨씬 간결하게 도와주는 도구라고 생각하면 된다. https://projectlombok.org/ Project Lombok(롬복)은 자바 라이브러리로, 자동으로 에디터와 빌드 도구에 연결됩니다. 이 라이브러리를 사용하면 자바 코드 작성을 훨씬 간결하게 할 수 있습니다. 롬복을 사용하면 귀찮은 getter, setter, equals, hashCode와 같은 메서드를 수동으로 작성할 필요가 없습니다. 단순한 어노테이션 하나로 클래스에 완전한 ..

경험/기술

[S3] [CloudFront] [Route 53] CDN 구축기 - AWS에서 시스템 구축

S3 버킷 만들기 CloudFront 배포 생성 & Route 53 이미지를 보면 원본 경로가 있는데 s3 내부에 원하는 경로를 입력하면 된다. 예를 들어 s3의 image 폴더에 test.png를 접근하고 싶다면 원본경로에 `/image/*`을 적고 기본루트에 /test.png 입력하면 image 폴더가 루트 경로가 돼서 test.png로 접근 가능하다. 아무것도 입력하지 않으면 버킷의 root로 바로 접근할 수 있어서 아무것도 적지 않았다. 더보기 이렇게 웹 사이트 엔드포인트를 사용하라고 할 수도 있는 데 사용을 누르면 이렇게 위에 도메인과 다르게 website가 붙은 도메인이 나오게 된다. 이걸 사용하면 원본 액세스 설정이 없어져서 저걸 사용하며 안 된다. 굳이 보안이 필요하지 않다면 비활성화해도 ..

경험/기술

[S3] [CloudFront] [Route 53] CDN 구축기 - 무료 이미지 서버, 기존 시스템의 이해

CDN이란? - https://aws.amazon.com/ko/what-is/cdn/ AWS에서 설명하고 있는 CDN과 다르게 기존의 시스템은 CDN까지는 아니고 이미지서버(?) 정도 될 것 같다. 하지만 CDN으로 부르겠다 😅 기존 시스템과 요구사항 우선 CDN 구축 필수 요구사항은 HTTPS와 확장가능성이 필요했다. 그리고 필수는 아니었지만 초반에는 무료로 운영하면 좋겠다는 요구사항도 있었다. 기존의 CDN은 express의 static 미들웨어를 사용하여 아주 간단하게 정적 파일을 제공하고 있었다. 그리고 무료로 HTTPS 서버를 구축하기 위해 내도메인.한국과 ZeroSSL을 이용했다. const https = require('https'); const fs = require('fs'); const..

경험/기술

[Spring] [Kotlin] [MongoDB] 엑셀 다운로드

요구사항 대용량 데이터 엑셀 다운로드 파라미터에 따라 동적으로 조건이 바뀌게 해야 함 DB: MongoDB 방법 구상: 스트림 방식으로 데이터를 뽑아오고 ➜ 엑셀을 스트림으로 채우고 ➜ 엑셀 내보내기 구현 알아보니 스프링부트에서는 엑셀기능을 구현할 때 poi라는 기능을 사용할 수 있다고 한다. // build.gradle implementation('org.apache.poi:poi-ooxml:5.2.2') Repository interface CustomRepository { fun streamSearch(requestDto: RequestDto): Stream } @Repository class CustomRepositoryImpl(@Autowired private val mongoTemplate: ..

경험/기술

[Kotlin] let, run, apply, also, with 파헤치기

코틀린에는 객체의 컨텍스트에서 코드를 실행하기 위한 몇 가지 범위 지정 함수가 있다. let `let` 함수는 주로 null이 아닌 객체에 대한 코드를 실행하거나, null 가능성이 있는 변수와 작업을 할 때 사용한다. 람다는 'it' 키워드를 통해 호출된 객체에 접근하며, 람다 내부의 마지막 표현식을 반환한다. fun main() { val listWithNulls: List = listOf("A", null) for (item in listWithNulls) { item?.let { println(it) } // prints A and ignores null } } // 실행 결과 A run `run` 함수는 람다 내에서 수신 객체('this')에 대한 작업을 수행한 후, 람다 내부의 마지막 표현식을..

경험/기술

[Spring] [Kotlin] - S3에 파일 업로드/다운로드

IAM S3가 구성되었다면(S3가 없다면? - S3 버킷 생성) 이제 S3에 접근하기 위해서 IAM 계정을 생성해줘야 한다. IAM 계정 생성 사용자 이름은 구분할 수 있게 마음대로 지정하면 된다. 액세스 권한은 선택해도 되고 안 해도 된다. 여기서는 S3를 접근하기 위해 만드는 것이라 선택하지 않았다. 권한은 S3FullAccess권한을 부여했다. 여기서는 직접 연결을 했지만 정책을 그룹에 연결한 후 사용자를 적절한 그룹에 추가하는 것을 권장하고 있다. 태그는 굳이 생성하지 않았다. (필요시에 생성하면 됨) 사용자 생성을 누르면 잘 생성되었다. 여기서 이제 애플리케이션에서 S3로 접근하기 위해 필요한 key를 발급받아야 한다. 액세스 키 발급 만든 IAM 유저를 들어가서 > 보안 자격 증명 탭에 가보면..