본문 바로가기

분류 전체보기311

AWS 탄력적IP 과금 (2024.02.01부터) AWS 사용자들에게 새로운 유형의 과금이 생겼다. 2024.02.01 부터 더이상 무료로 탄력적IP (Elastic IP) 를 사용할 수 없다. AWS public ipv4 주소 정책 2024.02.01 이전 2024.02.01 부터 탄력적 IP 탄력적IP 를 하나 생성하고, 현재 실행중인 EC2 인스턴스에 연결해놓으면 과금되지 않음 - 탄력적 IP 여러개 생성은 과금 - 탄력적 IP 한개지만, 실행중인 EC2에 연결하지 않으면 과금 프리티어(freetier) 관계없이 과금 EC2 인스턴스 퍼블릭 IP 무료 과금 - 단, 프리티어(freetier)는 1년간 무료 AWS 는 현재 IPv4 주소를 얻는 비용이 올라가고 있고, 이에 따라 요금을 부과해야한다고 말하고 있다. 구체적인 정책은 AWS 문서를 확인하.. 2024. 2. 3.
Amazon Linux2, nginx, HTTPS 적용 Amazon Linux2, nginx, HTTPS 적용 AWS EC2 에서 nginx 를 사용할 때 HTTPS 적용 방법입니다. 준비과정 Amazon Linux 2 버전 확인 $ cat /etc/system-release Amazon Linux release 2 (Karoo) nginx 설치 및 시작 # 설치 sudo yum install -y nginx # 시작 sudo systemctl start nginx sudo systemctl status nginx 도메인 등록 무료로 도메인을 발급받습니다. https://xn--220b31d95hq8o.xn--3e0b707e/ (내도메인.한국) 원하는 도메인을 발급받을 수는 없지만, 테스트용으로는 적절합니다. marsmall.r-e.kr 발급 완료 3달이 지.. 2023. 4. 2.
JIT, AOT Compiler JIT, AOT Compiler 자바는 컴파일을 하면, .java 코드가 바이트코드 (.class) 로 변환된다. 변환된 바이트코드들을 실행가능한 파일로 모아둔 것이 .jar 파일이다. java -jar 명령어를 통해 위 jar 파일을 실행시키면 (Java Runtime Enviornment 에 적재) 런타임에서는 JIT 컴파일러를 통해 기계어 (Native code) 로 변환된다. 자바는 절반은 바이트코드로 컴파일하고, 절반은 런타임에서 바이트코드를 해석하는 인터프리터 방식을 사용한다고 할 수 있다. (C/C++, Go, Rust 는 컴파일 단계에서 소스코드를 바로 모두 기계어로 바꾸어 준다. 대신 빌드 환경의 CPU 아키텍처 환경에 종속적이므로, 다른 아키텍처에서 실행하기위해서는 빌드를 다시해야하는 .. 2023. 3. 22.
자바 애플리케이션 모니터링, javaagent, bytecode instrumentation 자바 애플리케이션 모니터링 JavaAgent, Bytecode Instrumentation 애플리케이션 운영시 모니터링이 필요하다. 애플리케이션 모니터링 서비스로 Datadog, Newrelic, Pinpoint 등이 있다. 위와 같은 자바에 모니터링 서비스를 연동할 때는 주로 자바의 javaagent 를 사용한다. javaagent 는 무엇인지 알아보자. JavaAgent JVM 에서 동작하는 자바 애플리케이션. JVM 의 다양한 이벤트를 전달받거나 정보 조회, 바이트코드 제어 등을 API 를 통하여 수행할 수 있다. -javaagent:[=] JVM 의 실행 가능한 최초 진입점인 main 메소드를 가로챌 수 있다. 실행시간에 동적으로 bytecode 를 조작할 수 있다. JVM 과 동일한 Class .. 2023. 3. 20.
자바 힙메모리 확인, heap dump Heap Dump 애플리케이션에서 메모리 과다 사용 문제 비정상적으로 힙메모리를 사용하고 있는 부분을 찾아 버그를 수정해야함. 힙메모리를 과다사용하면, GC 가 자주 발생해 애플리케이션 성능 저하가 되거나 OOM 으로 애플리케이션이 중단될 수 있다. java.lang.OutOfMemoryError: Java heap space at ... Full GC 를 해도, 메모리가 큰 변화없다면 메모리 누수(memory leak) 가 발생하는 것이므로 힙 메모리 확인 필요하다. Heap 사용량 증가 원인 원인은 여러가지가 있겠지만 보통 개발자 코드가 의도하지 않은대로 작동해서 발생한 버그일 경우가 높다. 혹은 많은 트래픽이 몰려와 평소보다 많은 힙 영역을 차지할 가능성도 있다. 애플리케이션 모니터링 GUI Vis.. 2023. 3. 19.
Garbage Collection GC (Garbage Collection) 가비지 콜렉션은 자바가 메모리를 관리하는 기법이다. 애플리케이션에서 동적으로 할당했던 메모리 (Heap 메모리) 중 사용하지 않는 영역을 정리하는 역할을 한다. JVM 에서 GC 의 스케쥴링을 담당한다. GC 가설 (weak generational hypothesis) "대부분 객체는 빨리 수명을 다한다." 따라서 젊은 세대, 늙은 세대를 나누어 객체의 수명을 관리를 한다. 젊은 세대 중 미사용 객체는 힙 영역에서 삭제 늙은 세대 중 미사용 객체는 모았다가 한꺼번에 삭제 GC 알고리즘 Garbage 대상을 식별하고, 힙 메모리에서 제거한다. 1) Reference Counting Algorithm 각 객체마다 참조 개수 (reference count) 를 관리하.. 2023. 3. 19.
Spring Data MongoDB - Criteria already contains 문제 Spring Data MongoDB - Criteria already contains 문제 MongoRepository 에서 바로 아래와 같은 인터페이스를 만들고 사용하면, 아래와 같은 예외가 발생합니다. public interface TodoRepository extends MongoRepository { List findAllByCreatedAtGreaterThanEqualAndCreatedAtLessThanEqual(LocalDateTime startAt, LocalDateTime endAt); }startAt 2023. 3. 11.
일본여행 준비물 1. 여권 4년 전에 일본을 다녀왔었는데, 이번에 또 방문을 하게 됐다. 그 때 여권을 10년 짜리로 만들기를 잘했다. 여권은 책상 서랍 속에 4년 간 잘 보관돼있었다. 2. 항공권 (E-ticket) 진에어를 타고 간다. 근데 하루 전날 항공편이 지연됐다고 카톡이 왔다. 운항사정으로 출발 지연이 된다고 간략하게 바뀐 출발일시를 안내해주었다. 그래 비행기 지연은 흔하니까.. 이해해주자. 3. VJW VJW (Visit Japan Web) 을 통해 입국 수속을 온라인으로 편리하게 할 수 있다. 후쿠오카 공항 등 7개 공항 정도에서 이용이 가능하다. 제공하는 서비스는 아래와 같다. 1) 검역 (패스트트랙) - 여기에 백신 3차 접종 증명서를 미리 등록해주면 된다. (백신 3차 접종 영문 증명서는 토스에서 편.. 2023. 2. 14.
Github Actions EC2 자동 배포 with S3, CodeDeploy Github Actions EC2 자동 배포 with S3, CodeDeploy 문제 https://wordbe.tistory.com/309 에서 self-hosted 를 이용해서 자동배포를 구축해보았다. 하지만 self-hosted 로 EC2 를 사용하는 것은 구성은 쉽지만, 빌드시 EC2 서버의 메모리를 잡아먹는다. 또한 action-runner 도 실행시켜 놓아야 한다. free tier 는 t2.micro 사양을 제공하고 RAM 이 1GB 이므로 gradlew build 에서 메모리 부족으로 실패하는 경우가 자주 발생했다. 빌드를 Github Actions 에서 Github Actions 는 월 2000 분의 무료 사용량을 제공한다. 따라서 Github Actions 서버를 사용하면 월 33시간 .. 2023. 1. 18.
Github Actions EC2 자동 배포 Github Actions EC2 자동 배포 깃헙 액션을 통해 자동으로 빌드, 테스트, 배포를 진행할 수 있습니다. 다양한 상황의 이벤트에 워크플로우를 진행할 수 있는데, 특정 브랜치에 코드가 푸시되었을 때, 정해진 스케쥴에, 또는 외부에서 이벤트가 발생했을 때 (dispatch webhook 을 사용해서) 등등의 경우 CD(Continous Deployment) 가 진행되도록 할 수 있습니다. 이 글에서는 github action 과 AWS EC2 서버만 가지고, 간단하게 (main 브랜치에 푸시될 때) 자동으로 배포할 수 있는 설정을 만들어봅니다. 준비물로는 우선 간단한 스프링부트 프로젝트를 만들었고, ./gradlew build 명령어로 jar 파일을 추출가능한 상태입니다. 1. Actions 에 .. 2022. 11. 29.
728x90