자바의 컴파일 과정 1. 소스코드 작성개발자는 Java언어로 작성된 소스파일(.java)을 생성합니다. 이 파일은 사람이 읽을 수 있는 형태의 고급 언어로 작성된 코드입니다. 2. 컴파일 단계 javac 명령어(Java Compiler)를 사용하여 소스 파일(.java)을 컴파일하면, JVM(Java Virtual Machine)이 이해할 수 있는 바이트코드 형태의 파일(.class)이 생성됩니다. * 이 바이트코드는 플랫폼에 독립적이며, JVM에서 실행될 준비가 된 중간 형태의 코드입니다. 3. 클래스 로딩(Class Loading)JVM의 Class Loader가 생성된 .class 파일을 JVM 메모리로 로드합니다. * 로드된 클래스는 실행에 필요한 메서드와 변수 등의 메타데이터를 포함하고 ..
Java
문제 상황Spring과 MyBatis를 사용해 애플리케이션 개발 중,Java의 Map 객체를 PostgreSQL 데이터베이스에 저장하려고 하면 다음과 같은 에러를 만날 수 있습니다:org.postgresql.util.PSQLException: No hstore extension installed. 이 에러는 PostgreSQL에서 hstore 확장이 설치되지 않았거나,Map 객체를 저장할 적절한 방식으로 변환하지 않았기 때문에 발생합니다. responseBody = Map.of( "status", "error", "error_code", e instanceof HttpClientErrorException ? ((HttpClientErrorException) e).getStatusCode().v..
1000만 건의 데이터 크롤링을 할 때, 사용한 자바의 멀티스레드 방식입니다:) 처음에 사이트도 느리고, 데이터의 총량도 가늠할 수 없었던 작업이었는데, 크롤링하다 보니, 사이트에 자꾸 요청을 보내서 서버 다운되기도 했고,그래서 사이트 운영자가 서버 업그레이드도 해주고.. 생각해보니, 정말 재밌던 작업이었어요 :) 이번 글은 이 작업에서 사용한 Java의 멀티스레드 방식을 정리해보려 합니다. ExecutorService와 Future는 Java에서 병렬 작업을 효율적으로 관리하기 위한 도구입니다. 이 글에서는 Future.get()을 활용하여 작업의 결과를 처리하고 동기화하는 방법을 예제와 함께 설명하겠습니다. ExecutorService스레드 풀을 생성하고 관리하는 Java의 인터페이스입니다.비동기..
JIT 컴파일러란?JIT(Just-In-Time) 컴파일러는 Java Virtual Machine(JVM)의 실행 엔진의 한 부분으로,바이트코드를 프로그램 실행 중에 기계어(Machine Code)로 변환하여 실행 속도를 높이는 역할을 합니다.JIT 컴파일러의 동작 과정바이트코드 해석 시작: JVM은 프로그램을 실행할 때, 바이트코드를 인터프리터를 통해 한 줄씩 해석합니다.프로파일링(Profile): JVM은 실행 중 자주 호출되거나 반복적으로 실행되는 핫스팟(Hotspot) 코드를 식별합니다.예: 반복문, 자주 호출되는 메서드 등.JIT 컴파일 시작: 핫스팟으로 식별된 코드는 JIT 컴파일러가 기계어로 컴파일하여 변환합니다.변환된 기계어는 캐싱되어 이후에는 인터프리터 없이 바로 실행됩니다.최적화: JI..
HashSet은 중복을 허용하지 않는 데이터 저장과 빠른 검색이 필요한 경우에 유용합니다.HashSet은 내부적으로 해싱(Hashing)을 사용하여 데이터를 관리하므로, 다음과 같은 특징과 장점을 가지고 있습니다.HashSet의 주요 특징중복된 값 저장 불가:동일한 값이 추가될 경우 무시됩니다.중복을 자동으로 제거해야 하는 경우 적합합니다.빠른 데이터 조회:내부적으로 해싱(Hashing)을 사용하여 데이터를 저장하고 검색하기 때문에, 평균적으로 O(1)의 시간 복잡도로 데이터를 검색할 수 있습니다.배열이나 리스트에서 탐색이 O(n)인데 비해 훨씬 효율적입니다.순서가 없음:HashSet은 순서를 유지하지 않으므로, 저장된 데이터의 순서는 보장되지 않습니다.데이터의 순서가 중요하지 않은 경우 적합합니다.Ha..
Java에서는 숫자의 진법 변환을 매우 간단하게 처리할 수 있는 내장 메서드를 제공합니다.특히, 8진수, 10진수, 16진수와 같은 다양한 진법을 다룰 때 효율적입니다.이번 글에서는 Integer 클래스의 주요 메서드들을 활용해 진법 변환을 정리하겠습니다.1. Integer.parseInt(String s, int radix)parseInt 메서드는 문자열로 주어진 숫자를 지정된 진법(기수)으로 해석하여 10진수 정수로 변환합니다.사용법int decimal = Integer.parseInt("17", 8); // 8진수 '17'을 10진수로 변환System.out.println(decimal); // 출력: 15매개변수s: 변환하려는 숫자를 나타내는 문자열.radix: 숫자가 표현된 진법 (2, 8, 1..

https://www.acmicpc.net/problem/11286문제 설명이 문제는 정수들을 입력받아 다음과 같은 두 가지 작업을 수행하는 프로그램을 작성하는 것입니다.정수 입력: 정수 x를 입력받았을 때, x가 0이 아닌 경우 해당 숫자를 우선순위 큐에 추가합니다.0 입력: 만약 0이 입력되면, 현재 큐에 있는 수 중에서 절대값이 가장 작은 수를 출력하고 해당 수를 큐에서 제거합니다. 만약 절대값이 동일한 수가 여러 개 있다면, 그 중에서 가장 작은 수를 출력합니다. 큐가 비어있을 경우에는 0을 출력합니다.public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextI..

JVM이란 무엇인가?JVM은 Java 애플리케이션을 실행하기 위한 가상 기계입니다. 직역하면 '자바를 실행하기 위한 가상 컴퓨터'라고 할 수 있습니다.이 가상 컴퓨터는 Java 프로그램이 운영체제(OS)와 독립적으로 실행될 수 있도록 도와줍니다. Java의 플랫폼 독립성과 JVMJava의 가장 큰 특징 중 하나는 OS에 종속되지 않는다는 점입니다. 이는 Java 프로그램이 다양한 운영체제에서 동일하게 동작할 수 있다는 의미입니다. 하지만, 이를 실현하기 위해서는 운영체제와 Java 프로그램 사이에서 중개 역할을 하는 무언가가 필요합니다. 이 역할을 수행하는 것이 바로 JVM입니다. JVM은 CPU가 JAVA 프로그램을 인식하고 실행할 수 있도록 하는 가상 컴퓨터입니다. 실제 컴퓨터처럼 Java 애플리케..