분류 전체보기 210

JVM

JVMJVM(Java Virtual Machine)에 대해 깊이 있는 설명을 요청하셨군요. JVM은 Java 프로그램이 실행되는 환경을 제공하는 매우 중요한 컴포넌트입니다. 여기서는 JVM의 구조, 작동 원리, 메모리 관리, 가비지 컬렉션, 그리고 최적화 기법에 대해 상세히 설명드리겠습니다.1. JVM의 구조JVM은 여러 컴포넌트로 구성되어 있습니다. 주요 구성 요소는 다음과 같습니다:Class Loader: 자바 클래스 파일(.class)을 로드하고, 이를 JVM 내부에서 사용할 수 있도록 메모리에 적재합니다. Class Loader는 필요한 클래스들을 동적으로 로드합니다.Runtime Data Areas: JVM이 실행될 때 사용하는 메모리 영역입니다. 주요 메모리 영역은 다음과 같습니다:Method..

자바 Execution과정 및 Interpreter / JIT Compiler의 역할 - 2

jar파일을 웹 호스팅을 하는 구나 그러면 jar파일을 풀지 않고도 자바 애플리케이션에서 해당 클래스만 추출하거나 동작 시킬 수 있는 거야?네, JAR 파일을 풀지 않고도 자바 애플리케이션에서 특정 클래스를 추출하거나 동작시킬 수 있습니다. 자바는 URLClassLoader를 사용하여 JAR 파일을 동적으로 로드하고, 필요한 클래스를 메모리로 직접 로드할 수 있습니다. 이렇게 하면 JAR 파일의 내용을 일일이 추출하지 않고도 필요한 클래스를 사용할 수 있습니다.JAR 파일에서 특정 클래스 로드 및 실행다음은 JAR 파일에서 특정 클래스를 로드하고 실행하는 방법을 단계별로 설명합니다:JAR 파일 준비: 필요한 클래스가 포함된 JAR 파일을 생성하고, 이를 웹 서버에 호스팅합니다.URLClassLoader ..

자바 Execution과정 및 Interpreter / JIT Compiler의 역할

자바 Execution과정 및 Interpreter / JIT Compiler의 역할자바의 실행 과정과 Interpreter, JIT(Just-In-Time) Compiler의 역할에 대해 상세히 설명드리겠습니다.자바의 실행 과정소스 코드 작성: 자바 프로그래머는 자바 소스 파일(.java 확장자)을 작성합니다. 이 파일은 자바 프로그래밍 언어로 작성된 텍스트 코드입니다.컴파일: 자바 컴파일러(javac)가 자바 소스 파일을 바이트코드로 변환합니다. 바이트코드는 .class 파일에 저장되며, 이는 자바 가상 머신(JVM)에서 실행 가능한 중간 코드입니다.클래스 로딩: JVM은 실행 시 필요한 클래스 파일을 메모리에 로드합니다. 이 과정은 클래스를 처음 참조할 때 수행됩니다.바이트코드 검증: JVM의 바이..

개발자 온보딩 가이드 리뷰 - 3

애플리케이션 동작 측정을 위한 지표 활용 방안서비스 수준 목표(service level objective)(SLO)를 달성하기 위해99백분위수(P99)임계값 백분위수를 활용하라관측용이성과 오토스케일링을 활용하자카운터, 게이지, 히스토그램 등 크게 세 가지 유형이 있다.카운터특정 이벤트가 발생한 횟수게이지특정 시점을 기준으로 측정하므로 값이 올라거나 내려갈 수 있다.자동차의 속도계나 연료계라고 생각하면 된다히스토그램규모에 따라 이벤트를 특정 범위로 구분한다.요청 처리에 걸린 시간이나데이터 페이로드 크기 같은 지표를 측관측용이성 시스템데이터독로직모니터프로메테우스오토스케일링동적 리소스 할당을 지원하는 환경표준 지표 라이브러리를 사용하자지표 라이브러리 보다는각자 회사에서 선호하는 지표 라이브러리를 선택하자직렬화..

[도서 리뷰] 2024.05.27

개발자 온보딩 가이드 리뷰 - 2

시스템에 멱등성을 부여하자멱등성이란 동일한 작업을 여러 번 실행해도 항상 같은 결과가 출력됨을 말한다.어떤 값을 해시셋에 추가하는 것은 멱등 작업이다.몇 개의 값을 집어넣든 하나만 존재하기 때문이다.멱등성멱등성(Idempotence)은 IT와 컴퓨터 과학에서 자주 사용되는 개념으로, 연산을 여러 번 수행해도 결과가 동일한 성질을 의미합니다. 이 개념은 특히 함수형 프로그래밍, 데이터베이스, 네트워크 프로토콜 등 다양한 분야에서 중요한 역할을 합니다. 멱등성의 주요 특징과 응용 분야를 설명하겠습니다.멱등성의 정의멱등성은 수학과 컴퓨터 과학에서 "어떤 연산을 한 번 수행한 것과 여러 번 수행한 것이 결과적으로 동일하다"는 성질을 나타냅니다. 수학적으로는 다음과 같이 표현됩니다:\[ f(f(x)) = f(x)..

[도서 리뷰] 2024.05.27

개발자 온보딩 가이드 리뷰 -1

장애에 대비하기 위한 방어적 프로그래밍 방안방어적 코드컴파일 타임의 유효성 검사를 통해 런타임 장애를 최소화한다.안전한 코드컴파일 타임의 유효성 검사를 통해 런타임 장애를 최소화한다.회복성 있는 코드권장되는 예외 처리 기법을 활용하며 장애를 적절하게 처리한다.null 값 사용은 피하자널 포인터 예외를 방지 하기위해서널 객체 패턴널 값 대신에 객체를 사용하는 패옵션 타입등을 사용불변 변수를 사용하자불변 변수값이 한 번 대입되고 나면 그 값을 바꿀 수 없다.의도치 않게 변수의 값이 바뀌는 상황을 미연에 방지병렬 프로그래밍은 더 간단해짐경우에 따라 컴파일러나 런타임은 더 효율적으로 동작할 수 있다.타입 힌트와 정적 타입 검사를 사용하자변수가 보관할 수 있는 값을 제한하자가장 구체적인 타입을 사용몇 가지 문자열..

[도서 리뷰] 2024.05.26

자바와 데이터베이스3

Connection 객체를 제대로 관리하기 위해 주로 사용하는 방법들은 무엇이 있나요? 이를 통해 어떤 이점들이 있나요?Connection 객체를 제대로 관리하기 위해 주로 사용하는 방법들과 그 이점들에 대해 상세히 설명드리겠습니다.Connection 객체 관리 방법Connection Pooling (연결 풀링)설명: Connection Pooling은 애플리케이션이 데이터베이스와의 연결을 효율적으로 관리하기 위해 일정 수의 커넥션을 미리 생성해 놓고, 필요할 때 재사용하는 기법입니다.이점:성능 향상: 매번 새로운 연결을 생성하고 해제하는 오버헤드를 줄여 성능을 크게 향상시킵니다.리소스 관리: 제한된 커넥션을 재사용함으로써 리소스를 효율적으로 관리하고, 데이터베이스 서버의 부하를 줄입니다.응답 시간 단축..

[프래피티] 2024.05.25

자바와 데이터베이스2

SQL 인젝션 공격이 무엇인지 설명해주세요.SQL 인젝션(SQL Injection)은 웹 애플리케이션의 보안 취약점을 이용하여 악의적인 사용자가 애플리케이션의 데이터베이스에 비정상적인 SQL 쿼리를 삽입하는 공격 기법입니다. 이를 통해 공격자는 데이터베이스에 저장된 민감한 정보에 접근하거나 데이터베이스를 조작할 수 있습니다.SQL 인젝션의 원리SQL 인젝션 공격은 주로 사용자 입력을 제대로 필터링하거나 이스케이프하지 않는 웹 애플리케이션에서 발생합니다. 예를 들어, 사용자의 입력값을 직접 SQL 쿼리에 삽입하는 경우, 악의적인 사용자는 입력값에 SQL 코드를 포함시켜 데이터베이스 쿼리를 변조할 수 있습니다.예시간단한 로그인 폼을 예로 들어 보겠습니다. 다음과 같은 SQL 쿼리가 사용자 입력을 처리한다고 ..

[프래피티] 2024.05.25

자바와 데이터베이스

Statement와 PreparedStatement의 차이점을 설명하고, 각각의 사용 시나리오를 예시를 들어 설명해보세요.Statement와 PreparedStatement는 모두 Java에서 데이터베이스와 상호 작용하기 위해 사용되는 인터페이스입니다. 두 인터페이스는 SQL 쿼리를 실행하는 기능을 제공하지만, 사용 목적과 성능, 보안 측면에서 차이가 있습니다. 이 두 가지의 차이점을 자세히 설명하고, 각각의 사용 시나리오를 예시로 들어보겠습니다.StatementStatement는 SQL 쿼리를 실행할 때 사용됩니다. 이 인터페이스는 SQL 쿼리를 문자열로 직접 작성하여 데이터베이스에 전송합니다. 다음과 같은 특징이 있습니다:동적 쿼리: Statement는 SQL 쿼리를 문자열로 직접 작성하고 실행하므로..

[프래피티] 2024.05.25

자바의 시간 API

자바의 현대적인 날짜와 시간 API에 대해 설명하고, 이를 사용하면 좋은 경우는 어떤 상황인지 말씀해보세요.자바의 현대적인 날짜와 시간 API는 Java 8에서 도입된 java.time 패키지를 중심으로 합니다. 이 패키지는 Joda-Time 라이브러리를 모델로 하여 설계되었으며, 기존의 java.util.Date 및 java.util.Calendar 클래스의 복잡성과 단점을 보완하기 위해 만들어졌습니다.주요 클래스와 인터페이스LocalDate:날짜를 표현하는 클래스 (연도, 월, 일).시간 정보는 포함하지 않습니다.예: LocalDate.of(2024, 5, 25)LocalTime:시간을 표현하는 클래스 (시, 분, 초, 나노초).날짜 정보는 포함하지 않습니다.예: LocalTime.of(14, 30)..

[프래피티] 2024.05.25