본문 바로가기

전체 글33

자바 메모리영역 Stack, Heap, Static 오늘은 자바의 메모리영역에 대해 포스팅을 진행하려고합니다. 아무래도 기초는 계속 상기시켜야하기 때문에 포스팅으로 남기려고합니다. 먼저 메모리에 대해 작성하기 전에 JVM이 뭔지 알아보겠습니다JVMJava Virtual Machine의 약자로 자바 가상 머신이라고 불립니다.자바의 바이트 코드를 해석하고 실행하는 역할을합니다. 1. java 파일을 컴파일러를 통해 class파일로 변환2. class파일을 JVM의 ClassLoader로 전달3. ClassLoader에서 JVM런타임 영역으로 할당하여 메모리에 올린다. 이때 이 런타임 영역에서 Stack, Heap, Static같은 메모리가 사용이 됩니다. 자바를 실행하게 되면 OS로부터 메모리를 할당받아서 여러개의 영역으로 나누어 사용하게되는데요.변수를 예시.. 2025. 3. 27.
AWS Load Balancer Target Failover 이번에는 ELB 기능 중에 Target Failover에 대해서 포스팅하려고 합니다. ELB를 이용해서 private subnet에있는 EC2로 연결만 해줬지 ELB 내부적으로 수행해주는 기능이 여럿 있더라구요.그래서 오늘은 Target Failover에 대해서 작성하려고 합니다. ELB 대상 그룹에 EC2를 연결한 상태에서 EC2의 Health Check 가 실패나거나 대상 그룹에서 등록 제외가 되었을 경우 남아 있는 커넥션을 정상적으로 작동하는 다른 인스턴스로 재분배하는 기능입니다. 만약 롤링 업데이트를 진행 중인 상황이라고 보면,기존 인스턴스의 커넥션을 천천히 종료시키고, 새로운 인스턴스로 요청을 보내야하는데, 기존 인스턴스는 Draining 상태가 돼서 남아있는 요청을 처리하고, 새로운 인스턴스가.. 2025. 3. 27.
AWS Load Balancer Draining 상태 오늘은 AWS ELB를 사용하면서 스쳐 지나갔던 드레이닝에 대해 포스팅하려고합니다! ELB에 대상 그룹에 들어가보면 드레이닝 이라는 항목이 보입니다. 결론 부터 말하자면 등록 취소 지연 기능입니다. 상황을 가정하자면 해당 대상 그룹에 A 인스턴스가 붙여져 있는 상황에서 A를 대상 그룹에서 제외하는 순간에 A 인스턴스가 보유한 커넥션이 처리될 때까지 기다려주는 상태입니다. (새로운 요청은 받지 않음) 기본 값은 300초로 임의로 변경이 가능합니다 한줄 요약Draining: “야, 천천히 나가자~ 기존 요청은 마무리하고!” 2025. 3. 27.
Terraform을 이용한 VPC 생성 오늘은 Terraform을 이용해서 서비스를 배포하기 위한 환경을 세팅해보고자 합니다! 먼저 그냥 AWS Console에서도 생성이 가능하지만 테라폼으로 코드로 구현하는 이유를 말씀드리겠습니다 저 또한 맨날 AWS 홈페이지 접속해서 마우스로 클릭하면서 VPC와 EC2를 생성했었는데요, 새로운 프로젝트를 진행할 때마다 같은 구성을 반복하면서 생성하고 있었어요. 번거롭고 귀찮았었죠,, 그리고 휴먼에러 가 제일 많이 발생했습니다..  이러한 단점들을 보완하고자 코드형 인프라 (Infrastructure as Code) 로 관리를해여 클라우드 환경을 관리하고자 합니다! 그래서 오늘은 가장 기초적인 VPC와 IGW, NAT, 라우팅테이블 등 기본 세팅을 Terraform으로 세팅하는 것을 포스팅하려고합니다! 아래.. 2025. 3. 25.
Spring Webflux Exception 전역 처리 하기 (feat. RestControllerAdvice) 오늘은 스프링 WebFlux를 이용해서 Exception을 전역 처리하는 방법을 포스티하려고한다. 이게 나는 굉장히 중요하다고 생각한다.. Exception별로 모아서 처리를 하면 비즈니스 로직에서 가독성도 올라가고 유지보수성이 올라간다 근데 이게 WebFlux로 하려고 하다보니까 기존 MVC랑 구조가 달라서 전역처리가 불가능한 줄 알았다.. 그냥 컨트롤러 단에서 if 뇌절로 처리해야 하나? 생각을 했지만 그런 짓은 하고 싶지 않았다.. 바로 본론으로 들어가서 평소에 우리는 @RestControllerAdvice를 이용해서 Exception을 전역으로 처리해서 참 편했다. Exception을 정의하고 해당 Exception 만 Handling 하면 되니 매우 편했다. 근데 Webflux를 이용하다 보니 .. 2024. 10. 28.
Spring ExecutorService 멀티 쓰레드 성능 개선 (Grafana & Prometheus) 오늘은 회사에서 진행한 업무중에 대량으로 사용자에게 이메일/문자를 전송하는 기능을 구현하는 과정에서 성능 테스트를 진행하고, 성능개선한 후기를 작성하려고합니다! 여려명의 사용자가 자신만의 고객을 만들 수 있는데 (설문조사 등을 통해) 이때 설문에 참여한 고객들에게 대량의 이메일/문자를 발송할 수 있는 기능 중 사용자를 여러명 선택후 예약된 시간에 이메일/문자를 발송하는 기능을 구현하는 과정에서, 너무나도 당연하게 사용자 수가 많아 질 수록 속도가 엄청 오래걸리는 문제가 발생했고, 이를 해결하는 것을 목표로 성능 개선에 집착했습니다! 그래서 선택한 기술은 ExecutorService를 사용해 속도를 개선했습니다. 먼저 시나리오는 다음과 같습니다.하지만 테스트용도로 작성하는 점과 회사 코드이기 때문에 약소하.. 2024. 8. 17.