본문 바로가기

Today I Learned/Java15

[Java] var var란?Java 10에서 도입된 지역 변수 타입 추론 문법var로 선언하면 컴파일러가 우변(= 초기화 값)을 보고 정적 타입을 결정예약된 타입 이름(reserved type name)타입 위치에서만 특별한 의미가 있고, 그 외 위치(메서드명 등)에서는 식별자로 쓸 수 있다 어디서 사용하나지역 변수, for-each 변수, try-with-resources 리소스 변수, 람다 파라미터(Java 11 이상)에서 사용 가능.단, 필드(멤버 변수), 메서드 매개변수/반환 타입(람다 파라미터는 예외)에서는 사용 불가! 예시// 지역 변수: 우변으로 정적 타입이 확정var n = 1; // intvar l = 1L; // longvar name.. 2025. 8. 10.
[Java] Jackson #1 1. Jackson이란?목적Java 객체를 JSON(또는 다른 포맷)으로 직렬화하거나, JSON을 Java 객체로 역직렬화하기 위한 오픈소스 라이브러리.특징빠른 성능(스트리밍 API 기반)풍부한 애노테이션과 플러그인 구조XML·YAML·CSV·CBOR·Smile 등 다양한 포맷 모듈 제공 2. 핵심 모듈 구조모듈Maven역할jackson-corecom.fasterxml.jackson.core:jackson-core저수준 파서/제너레이터(API)jackson-databindcom.fasterxml.jackson.core:jackson-databindObjectMapper 등 고수준 바인딩 기능jackson-annotationscom.fasterxml.jackson.core:jackson-annotation.. 2025. 8. 10.
[Java] Java Remote Debugging 자바 원격 디버깅 #2 (JDWP 디버깅 옵션) JDWP 디버깅 옵션1. 디버깅 JVM 방식 (server) 모드 설명 server=yJVM이 디버거 요청을 수신하는 서버 역할 (일반적으로 많이 사용)server=nJVM이 디버거(IDE)로 접속을 시도함 (거의 사용 안 함) 2. JVM 실행 대기 여부 (suspend)모드설명 suspend=y 디버거가 연결되기 전까지 JVM 실행을 멈춤 (초기 진입 디버깅 시 사용) suspend=n 디버거 연결 여부와 무관하게 JVM 실행 (운영 환경에서 일반적으로 사용) 3. 디버깅 포트 지정 (address) 값 예시 설명 50055005 포트에서 디버거 연결 수신 (localhost 기본 바인딩)*:5005모든 IP에서 연결 수신 허용 (JDK 9 이상)127.0.0.1:5005로컬 루프백 전용.. 2025. 7. 24.
[Java] Java Remote Debugging 자바 원격 디버깅 #1 (개념) 이미 배포된 어플리케이션에서 발생한 오류를 디버깅하고 싶다면 어떻게 해야 할까? JPDA란? JPDA (Java Platform Debugger Architecture) Java 애플리케이션을 외부에서 디버깅할 수 있도록 만들어진 디버거 통신 아키텍처즉, 디버거(IDE)와 JVM(실행 중인 애플리케이션) 간의 통신 프로토콜을 정의한 표준JDK에 기본 포함되어있음 JPDA의 구성 요소 (4 계층 아키텍처) 계층 구성 요소 설명 1️⃣JDI (Java Debug Interface)디버거 측에서 사용하는 고수준 API (IntelliJ, Eclipse 등이 이걸 사용)2️⃣JDWP (Java Debug Wire Protocol)디버거와 JVM 간의 통신 형식과 의미를 정의 (네트워크 프로토콜)3️.. 2025. 7. 17.
[Java] Random 4 종류 Random 종류1. java.util.RandomJDK 1.0부터 제공된 가장 기본적인 난수 생성기특정한 규칙에 따라 가짜 난수 생성 - 완전한 진짜 랜덤은 아니고, 시드가 같으면 항상 같은 숫자 나옴여러 스레드가 동시에 Random 객체를 사용할 경우, 내부에서 사용하는 값인 AtomicLong을 건드리면서 충돌 발생. 그로 인해 속도가 느려질 수 있고, 예상치 못한 문제가 생길 수 있다Random rnd = new Random();int r = rnd.nextInt(100); // 0~99 2. java.util.concurrent.ThreadLocalRandomJDK 7부터 도입 (thread-safe)스레드마다 따로 작동하는 랜덤 인스턴스를 자동으로 사용 - 그러므로 여러 스레드가 동시에 사용해.. 2025. 7. 5.
[Java] META-INF 디렉토리와 MANIFEST.MF Java 애플리케이션을 배포할 때, JAR, WAR 같은 패키징 파일 내부에는 META-INF 디렉토리와 MANIFEST.MF 파일이 포함된다. 도대체 얘네는 어디에서 나오는걸까? 궁금해서 찾아보며 간단히 정리를 해보았다.  1. META-INF 디렉토리란?META-INF 디렉토리는 JAR, WAR 파일 내부에서 해당 패키지(아카이브)와 관련된 설정 정보를 저장하는 디렉토리다.META-INF의 주요 역할메타데이터 저장 : 패키지의 버전, 개발자 정보 등 포함보안 관련 정보 저장 : 디지털 서명, 암호화 키 등이 위치서비스 로딩 : 특정 인터페이스의 구현체를 자동으로 검색하는 기능 제공MANIFEST.MF 파일 포함 : JAR, WAR의 속성을 정의하는 주요 파일META-INF 디렉토리의 위치JAR 또는 .. 2025. 3. 12.
[Java] try-with-resources (자원 관리 최적화) 자바에서 파일, 소켓, 데이터베이스 연결 같은 자원을 사용할 때는 반드시 사용 후에 반환해야 한다. 그렇지 않으면 메모리 누수나 시스템 리소스 낭비로 이어질 수 있다. 작년부터 파일 업로드, 다운로드 기능에 대한 리팩토링을 시간 날 때 조금씩 진행하고 있는데, 그 부분에서 try-with-resources 문법을 사용하였고 이번에 간단히 정리해보려고 한다.  1. try-with-resources란?try-with-resources는 자원을 자동으로 닫아주는 기능을 제공하는 문법이다. (자바 7부터 제공) try 블록에서 사용한 리소스를 finally 없이 자동으로 정리해준다.기존 try-catch-finally 방식의 문제점 (리소스 수동 닫기)finally에서 close()를 수동으로 호출해야 함.c.. 2025. 3. 11.
[Java] normalize() 메서드 이번에 소나큐브를 사용해서 웹 취약점 부분을 파악하다가, 파일경로와 같은 부분에서 normalize()를 이용하라는 팁을 보았다. normalize... 사용해본적이 없기에 이번기회에 정리를 해본다.  1. normalize()란?  normalize() 메서드는 파일 경로(Path)를 정리하고 단순화하는 역할을 한다. Java의 NIO (New I/O) 패키지에서 제공되는 이 기능은 경로 문자열에 포함된 불필요하거나 모호한 요소(예: ., .., 중복된 슬래시 등)를 제거해 깔끔하고 표준화된 경로를 생성한다. 쉽게 말해, 복잡한 경로를 정리해 읽기 쉽고 명확한 경로로 변환해주는 도구인 것이다. 2. normalize() 주요 역할 1. 불필요한 경로 요소 제거: 경로 내에 있는 . (현재 디렉토리)와 .. 2025. 1. 17.
[Java] java ee에 관하여 Java EE의 탄생과 발전Java EE(Java Platform, Enterprise Edition)는 1990년대 후반, Sun Microsystems에 의해 탄생했다. 당시 기업 환경에서는 대규모 애플리케이션 개발을 위한 복잡한 작업(트랜잭션 관리, 데이터베이스 연결, 보안 등)을 효율적으로 처리할 수 있는 표준화된 플랫폼의 필요성이 대두되었는데, Sun은 이러한 문제를 해결하고자 Java 언어를 기반으로 한 엔터프라이즈 애플리케이션 개발 플랫폼인 Java EE를 발표했다. Java EE의 주요 목적개발 효율성 향상 : 트랜잭션 관리, 데이터베이스 연동, 보안 등의 공통 기능을 표준화하여 개발 속도와 유지보수성을 높일 수 있도록 함.서버 간 호환성 보장 : Java EE는 특정 벤더에 종속되지 않고.. 2024. 12. 22.