목록2024/09 (26)
Technical NOTE
ZGC 방식에 대한 내용을 정리해보았습니다. ZGC의 경우 Java 17에서 본격적으로 사용되기 시작하다보니, 아직 공공쪽에는 레퍼런스를 찾을 수 없는 상태인데요,그래서 다른 싸이트를 참조해서 내용을 정리해봤습니다. 정리하지만,G1 GC의 경우에는 힙메모리 4G 이상에서 사용할 것을 권장하고 있는데요,ZGC의 경우에는 힙메모리 10G 이상인 경우 설정하는 것이 좋을 것으로 판단됩니다. 아래는 ZGC에 대한 일반적인 기술 특징과 적합환 환경에 대한 기술적인 내용이니 참고하시기 바랍니다. 1. ZGC 방식의 일반적인 특징 - Java 11 에서 실험적인 기능으로 추가되었고, Java 15버전 이후에 본격적으로 반영된 후 17버전에도 기능이 추가되어 있음 - ZGC는 대용량 메모리 관리시 정지시간을 최소화하기..
G1 GC (Garbage First Garbage Collector)는 Java 7부터 도입된 Garbage Collector로, 대용량 힙 메모리를 효율적으로 관리하는 데 중점을 둔 저지연(低遲延) GC입니다. G1 GC는 Stop-the-world (STW) 시간을 줄여 애플리케이션의 응답성을 높이고, 힙 메모리를 효과적으로 관리하여 메모리의 단편화 문제를 줄이는 것을 목표로 설계되었습니다.G1 GC의 주요 특징Region 기반 힙 관리:G1 GC는 전체 힙 메모리를 고정된 크기의 여러 개의 영역(Region)으로 나눕니다. 각 Region은 1MB에서 32MB 사이의 크기를 가지며, Eden, Survivor, Old 영역의 역할을 할 수 있습니다.이로 인해 연속된 메모리 블록을 할당해야 하는 기..
Tomcat Valve는 Apache Tomcat의 핵심 기능 중 하나로, 특정 요청이나 응답에 대해 처리 로직을 추가하거나 필터링을 수행할 수 있도록 해주는 메커니즘입니다. Valve는 Tomcat의 request-response 사이클에서 필터와 유사하게 동작하지만, 컨텍스트(Context)와 호스트(Host)에 종속적으로 동작할 수 있는 점에서 더 강력하고 Tomcat 서버에 밀접하게 통합되어 있습니다.Valves는 주로 로그 기록, 보안 처리, 요청 필터링 등의 용도로 사용되며, Tomcat의 server.xml 파일에 설정할 수 있습니다. Valve는 각 Host, Context, Engine 또는 Server 수준에서 설정이 가능하며, 이를 통해 Tomcat 서버의 각종 요청에 대한 세부적인 ..
Tomcat 10과 Tomcat 9는 주요 차이점이 있으며, 이 중 가장 큰 변화는 Java EE에서 Jakarta EE로의 네임스페이스 전환입니다. 두 버전의 비교를 통해 주요 차이점과 성능, 기능적 차이를 자세히 설명하겠습니다.Tomcat 10 vs Tomcat 9 비교 표항목Tomcat 9Tomcat 10Java EE/Jakarta EE 버전Java EE 8 (Servlet 4.0, JSP 2.3)Jakarta EE 9 (Servlet 5.0, JSP 3.0)네임스페이스javax.* 패키지를 사용jakarta.* 패키지를 사용Servlet 버전Servlet 4.0Servlet 5.0JSP 버전JSP 2.3JSP 3.0WebSocket 버전WebSocket 1.1WebSocket 2.0HTTP/2 지..
Tomcat 10은 Apache Tomcat 프로젝트의 최신 주요 버전 중 하나로, Java Servlet, JSP, EL(Expressions Language), WebSocket과 같은 다양한 Java 웹 기술을 지원하는 오픈소스 웹 서버 및 서블릿 컨테이너입니다. Tomcat 10은 Java EE(Java Enterprise Edition)에서 Jakarta EE로 전환된 후 처음으로 등장한 버전으로, 이 전환이 Tomcat 10의 가장 큰 변화 중 하나입니다.Tomcat 10의 주요 특징 및 변화1. Jakarta EE 네임스페이스로의 전환가장 중요한 변화는 Java EE에서 Jakarta EE로의 전환입니다. Java EE는 2017년부터 Eclipse Foundation에 의해 관리되고 있으며..
ZGC(Z Garbage Collector)를 사용할 때 주의해야 할 점과 적합한 힙 메모리 크기에 대한 설명을 아래에서 다루겠습니다.ZGC 사용 시 주의해야 할 점CPU 사용량:ZGC는 매우 병렬화된 가비지 컬렉션 작업을 수행하므로 CPU 리소스를 많이 사용합니다. 따라서 여유 있는 CPU 코어가 있는 환경에서 성능이 잘 발휘됩니다.CPU 리소스가 부족한 환경에서는 성능 저하가 발생할 수 있으며, 다른 가비지 컬렉터가 더 나은 선택일 수 있습니다.메모리 오버헤드:ZGC는 객체 포인터에 추가적인 메타데이터(색상 인지 포인터)를 저장하여 메모리 사용량이 약간 더 증가할 수 있습니다. 대규모 메모리 환경에서는 이 오버헤드가 상대적으로 적지만, 소규모 메모리 환경에서는 메모리 낭비가 발생할 가능성이 있습니다...
ZGC (Z Garbage Collector)는 Java 11에서 처음 도입된 가비지 컬렉터로, Java의 가비지 컬렉션 방식 중 하나입니다. ZGC의 가장 큰 목표는 초저지연 (low-latency)을 제공하는 것입니다. 이는 가비지 컬렉션(GC) 동안 애플리케이션이 멈추는 시간을 최소화하는 것을 의미합니다. ZGC는 대용량 메모리 환경에서도 10ms 미만의 짧은 GC 지연 시간을 유지하도록 설계되었습니다.ZGC의 주요 특징초저지연 GC (Low Latency)ZGC는 대용량 힙(수 테라바이트까지 확장 가능)에서도 정지 시간을 10ms 미만으로 유지합니다.애플리케이션의 처리 중단 시간을 최소화하여, 실시간 성능을 요구하는 시스템에서 적합합니다.컨커런트(Concurrent) 방식대부분의 가비지 컬렉션 작..
Hibernate 5를 사용하기 위해 필요한 주요 라이브러리 파일 목록은 다음과 같습니다. 각 라이브러리는 Hibernate의 핵심 기능과 관련된 모듈을 지원하며, 데이터베이스와의 연결, 엔터티 관리, 캐싱, 트랜잭션 관리 등을 포함합니다.1. 기본 Hibernate 5 라이브러리핵심 라이브러리 (Core)hibernate-core-5.x.x.jar: Hibernate의 핵심 라이브러리로, ORM 기능을 제공합니다.hibernate-entitymanager-5.x.x.jar: JPA 2.1 구현체로, JPA 표준 API를 지원합니다.JPA 관련 라이브러리hibernate-jpa-2.1-api-1.x.x.jar: JPA 2.1 API를 구현한 라이브러리입니다. Hibernate 5는 기본적으로 JPA 2...
JSR 303은 Bean Validation이라는 이름으로 표준화된 자바의 검증(Validation) 메커니즘을 정의하는 사양입니다. 이 사양은 자바 객체의 속성 값이 올바른지 검증할 수 있도록 하고, 이를 통해 애플리케이션의 데이터 무결성을 유지하는 데 도움을 줍니다. JSR 303은 Java EE 및 Java SE 애플리케이션에서 모두 사용될 수 있으며, 기본적으로 어노테이션을 사용하여 검증 규칙을 설정합니다.Bean Validation의 주요 개념과 특징1. 어노테이션 기반 검증Bean Validation은 어노테이션을 사용하여 자바 클래스의 필드나 메서드에 검증 규칙을 설정합니다. 각 필드에 부여된 어노테이션은 해당 값이 유효한지 검사하는 규칙을 정의하며, 이러한 어노테이션은 기본적으로 자주 사용..
Hibernate 4 버전을 사용하려면 여러 개의 라이브러리 파일(JAR 파일)이 필요합니다. 이들 라이브러리는 Hibernate의 핵심 기능 외에도 추가적으로 트랜잭션 관리, 캐싱, 로깅, 데이터베이스 연결 등 다양한 기능을 수행하는 데 필요합니다.Hibernate 4 버전을 사용하기 위한 필수 라이브러리와 선택적으로 사용 가능한 라이브러리는 아래와 같습니다.1. 필수 라이브러리 목록hibernate-core: Hibernate의 핵심 라이브러리로, ORM 및 데이터베이스 상호작용을 관리합니다.hibernate-core-4.x.x.jarJPA 구현체: Hibernate 4는 JPA 2.0을 지원하므로 javax.persistence API 라이브러리가 필요합니다.javax.persistence-api-..
Hibernate는 자바의 ORM(Object-Relational Mapping) 프레임워크로서 지속적으로 발전해왔으며, 각 버전은 새로운 기능과 성능 향상을 가져왔습니다. 각 버전별로 주요 특징을 정리하면 다음과 같습니다.Hibernate 버전별 특징1. Hibernate 1.x (2001년 출시)초기 버전: Hibernate 1.x는 초기의 ORM 솔루션으로, 객체-관계형 데이터베이스 매핑을 위한 기본적인 기능을 제공했습니다.주요 기능:객체를 관계형 데이터베이스에 매핑하고, 데이터를 조회하고 저장하는 기본 기능 제공.SQL의 복잡성을 추상화하여 객체지향적인 데이터베이스 접근 방식 지원.XML 기반 매핑 설정 파일 사용.한계점:초창기 버전으로 기능이 제한적이고 성능 최적화가 미흡.2. Hibernate..
Hibernate는 자바에서 가장 널리 사용되는 ORM(Object-Relational Mapping) 프레임워크로, JPA(Java Persistence API)를 구현한 대표적인 프레임워크입니다. Hibernate는 객체 지향적인 방식으로 데이터베이스와 상호작용할 수 있는 기능을 제공하며, 복잡한 데이터베이스 연산을 추상화하여 더 쉽고 효율적인 개발을 가능하게 합니다.Hibernate는 다양한 기능을 가진 모듈로 구성되어 있으며, 각 모듈은 특정 기능을 담당하고 있습니다. 각 Hibernate 모듈을 통해 데이터베이스와 상호작용, 캐시 관리, 검색 기능 등 다양한 기능을 확장할 수 있습니다. 주요 Hibernate 모듈에 대해 설명하겠습니다.1. Hibernate Core (ORM 모듈)설명: Hib..
JPA(Java Persistence API)의 버전별 특징은, 각 버전이 출시되면서 새로운 기능이 추가되고 성능이 향상되는 과정을 반영합니다. JPA는 처음 EJB 3.0의 일부로 시작되어 점차 독립적인 표준으로 발전해왔습니다. 각 버전의 주요 특징과 발전 사항을 아래에 정리했습니다.1. JPA 1.0 (2006년)출시 배경: JPA 1.0은 EJB 3.0의 일부로서 처음 등장했습니다. EJB 2.x의 복잡성을 줄이고, 객체와 관계형 데이터베이스 간의 매핑을 더 쉽게 하기 위해 ORM(Object-Relational Mapping) 표준으로 정의되었습니다.주요 특징:기본 엔터티 매핑: @Entity, @Table, @Id 등을 사용한 기본적인 객체와 데이터베이스 테이블 간의 매핑.영속성 컨텍스트: En..
JPA (Java Persistence API)란?JPA(Java Persistence API)는 Java 애플리케이션에서 객체를 관계형 데이터베이스와 매핑하고 관리하는 데 사용하는 ORM(Object-Relational Mapping) 표준입니다. JPA는 Java 객체를 SQL 기반의 관계형 데이터베이스 테이블에 매핑하는 과정에서 복잡한 데이터베이스 연산을 추상화하여, 개발자가 데이터베이스와 상호작용할 때 객체 중심의 프로그래밍이 가능하도록 도와줍니다.JPA는 Java EE(EJB 3.0)에서 처음 도입되었으며, 현재는 Jakarta EE에서 유지 및 관리됩니다. JPA는 Java 표준이기 때문에 Hibernate, EclipseLink, OpenJPA와 같은 다양한 ORM 프레임워크들이 이를 구현하..
- 작성일 : 2024.09.24 Java EE 와 Jakarta EE 의 차이점은 주로 역사적 배경과 라이센스, 패키지 네이밍, 관리 구조 및 규격 명세 등에서 차이가 발생하게 된다. 이를 이해하기 위해, 두 규격의 개념과 차이점에 대해 각각 설명해보겠다. 개념 및 역사적 배경 Java EE (Java Platform, Enterprise Edition)초기 개발 및 관리 : Java EE는 Sun Microsystems에 의해 개발되었으며, Java 기반의 엔터프라이즈 어플리케이션을 개발하기 위한 표준 규격이다.Oracle 인수 : 2010년에 Oracle이 Sun Microsystems를 인수하면서 Java EE의 관리 주체가 Oracle로 변경되었다.기능 및 구성 요소 : Java EE는 Serv..
- 작성일 : 2024.09.24 SpringFramework 에서 지원하는 JavaEE(JakartaEE) 스펙 버전은 아래와 같이 정리가 가능하다. SpringFramework 버전JavaEE (JakartaEE) 버전Servlet 버전JSP 버전JPA 버전최소 Java 버전호환 Java 버전1.xJ2EE 1.32.31.2 JDK 1.3JDK 1.3, 1.42.xJ2EE 1.42.42.0 JDK 1.4JDK 1.4, 53.0JavaEE 52.52.11.0JDK 5JDK 5, 63.1JavaEE 52.52.11.0JDK 5JDK 5, 6, 73.2JavaEE 52.52.11.0JDK 5JDK 5, 6, 74.0JavaEE 63.02.22.0JDK 6JDK 6, 7, 84.1JavaEE 63.02.22...
- 작성일 : 2024.09.12 미들웨어 (웹서버, 와스서버)는 장애가 발생하면 언제나 점검해야되는 대상 중에 첫번째로 늘 거론되는 제품이다.사용자 서비스가 지연이 되거나 무한루프를 도는 경우 미들웨어를 먼저 점검한 후 데이터베이스, 서버, 네트워크, 보안 장비 등을 점검하는 순으로 장애를 처리하는게 일반적인 것같다. 그래서 미들웨어 엔지니어는 미들웨어 자체 기술력 뿐만 아니라, DBMS, OS, Network, Security Appliance 등에 대한 다양한 기술력을 어느정도 가지고 있는 것이 중요한 것같다. 그리고 자기 제품에 대한 문제가 없는 것을 입증하기 위해 다양한 방법론과 접근방식을 가지고 있어서 잘하고 오래 견딜 수 있는 실력자가 되는 것같다. 최근 보안장비에서 패킷을 드랍(Drop)시..
- 작성일 : 2024.09.12 SSH에서 사용하는 RSA 인증 방식에 대해 알아보겠다.SSH는 서버와 클라이언트 간의 안전한 연결을 제공하는데, 이 과정에서 RSA라는 비대칭 암호화 알고리즘을 사용한다.그럼, SSH에서 RSA 인증이 어떻게 이루어지는지 하나하나 살펴보자? 1. 키 값 생성하기 먼저, 클라이언트는 RSA 키 쌍을 생성해야 한다.이 키 쌍은 두 가지로 이루어져 있는데, 공개 키와 개인 키이다.공개 키는 서버에 제공하고, 개인 키는 본인만 사용할 수 있도록 비밀로 유지해야 한다.키 쌍을 생성하기 위해서는 ssh-keygen 명령어를 사용하면 되는데. 아래 명령어를 터미널에 입력한다: 이 명령어를 실행하면, 공개 키와 개인 키가 생성된다.일반적으로 공개 키는 ~/.ssh/id_rsa.pu..
putty 자동로그인하는 방법 과정을 간략하게 요약해보면 아래와 같다.1. 로그인 계정에 해당하는 ssh key 를 생성한다.2. id_rsa 개인키 파일을 로컬 컴퓨터에 다운로드 받는다.3. puttygen.exe 를 실행시켜 putty 형식의 key파일로 변환한다.4. putty 에서 인증서파일 설정하기5. putty 에서 자동로그인 해보기 자세한 설명은 아래 내용을 참고하자. 1. 로그인 계정에 해당하는 ssh key 를 생성한다 root 계정을 통해 로그인하도록 설명하겠다. 인증키를 생성하기 위해ssh-keygen -t rsa명령을 입력한다.3가지를 물어봄 (key 파일의 위치, password와과 확인)물어보는 값은 모두 Enter키를 눌러 기본으로 설정하는 것을 권장한다.참고로 password..
- 작성일 : 2024.09.12 Tomcat 을 설치했으면 제일 먼저 JVM 옵션을 설정해야 한다.JVM을 모니터링하고 튜닝하기 위한 최소한의 표준화된 옵션 작업이므로,싸이트 상황에 맞게 튜닝해서 사용하기를 권장한다. 먼저 gclog와 heapdump가 생성될 디렉토리를 생성하는 작업을 먼저 수행한다.$ mkdir /logs/tomcat/gclog $ mkdir /logs/tomcat/dump 그러면,catalina.sh 파일을 열어서 JAVA_OPTS 파라미터에 생성하는 작업을 해주겠다.설정 파라미터 값은 편의를 위해 TOMCAT_JVM 이라는 이름을 생성해서 추가해주겠다.$ cd ${TOMCAT_HOME}/bin $ vi catalina.sh>JAVA_OPTS="$JAVA_OPTS $JSSE_OPT..