낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock)락(Lock)의 필요성 현대 애플리케이션은 대부분 동시성(Concurrency) 문제에 직면합니다. 여러 사용자나 프로세스가 동시에 같은 데이터를 수정하거나, 은행 계좌 이체와 같은 중요한 트랙잭션을 동시에 실행하는 경우가 있습니다. 이때 동시 접근을 적절히 제어하지 않으면, 데이터 불일치, 중복 처리, 시스템 오류까지 발생할 수 있습니다. 이를 방지하기 위해 락(Lock) 개념이 도입되었습니다. 락은 여러 프로세스나 스레드가 동시에 동일한 자...Aug 22, 2025·3 min read
자료구조 TrieTrie란? Trie는 문자열 탐색에 특화된 트리 기반의 자료구조로, Prefix Tree(접두사 트리) 라고도 불립니다. 문자열의 접두사(prefix)를 기준으로 구조화되어 있기 때문에, 자동완성, 사전 검색, 검색 최적화 등에서 널리 활용됩니다. 아래의 Trie에 들어있는 문자열 apple, april, bus, busy, beer, best 주요 특징 각 노드는 문자열의 한 글자를 저장 루트 노드는 빈 문자열을 나타냄 같은 접두사를...Aug 7, 2025·3 min read
Java에서 Object를 String 으로 변환할 때 주의할 점Java에서 Object 타입의 value를 String으로 변환할 때는 보통 두 가지 방식이 사용됩니다. 명시적 타입 캐스팅 String.valueOf(value) 메서드 각 방식은 동작 방식과 안정성 면에서 중요한 차이가 있습니다. 1. 명시적 타입 캐스팅 전제 조건: value가 반드시 String 타입이어야 함. 그렇지 않으면 ClassCastException이 발생함. 예시 Object value = "hello"; ...Aug 7, 2025·2 min read
Infrastructure as Code(IaC) 알아보기클라우드 환경이 확산되면서 서버, 데이터베이스, 네트워크 구성 등 모든 인프라 리소스를 코드로 정의하고 관리하는 방식이 주목받고 있습니다. Infrastructure as Code(IaC) 는 수동 작업이 아닌 코드를 통해 인프라를 관리하고 프로비저닝하는 방법을 의미합니다. IaC를 사용하면 인프라 사양이 코드 형태의 구성 파일로 정의되기 때문에, 구성을 수정하거나 배포하는 작업이 더욱 수월해집니다. 또한 IaC는 항상 동일한 환경을 반복적으로...Aug 7, 2025·2 min read
Java에서 String이 불변(Immutable)인 이유Java에서 String은 **불변 객체(Immutable Object)**입니다. 즉, 한 번 생성된 String 객체는 내부 상태를 변경할 수 없습니다. Java의 창시자 제임스 고슬링(James Gosling)은 다음과 같이 말했습니다. “가능하면 언제나 불변 객체를 사용하라.” 그 이유로는 캐싱, 보안, 재사용성, 동기화, 성능 향상 등을 언급했죠. 이번 포스팅에서는 왜 String이 불변으로 설계되었는지, 그리고 리터럴과 생성자의 ...Aug 6, 2025·3 min read
회선 교환 방식과 패킷 교환 방식네트워크에서 데이터를 어떻게 전달하는지에 따라 회선 교환 방식(Circuit Switching)과 패킷 교환 방식(Packet Switching)으로 나눌 수 있습니다. 각 방식을 사용하는 네트워크를 각각 회선 교환 네트워크, 패킷 교환 네트워크라고 부릅니다. 두 방식은 구조와 효율성, 용도에서 확연한 차이를 보이며, 실제 우리가 사용하는 통신 서비스에도 각각 적용되고 있습니다. 회선 교환 방식 (Circuit Switching) 회선 교환 ...Aug 6, 2025·2 min read
try-with-resources란?Java에서는 파일, 소켓, DB커넥션 등 외부 자원을 사용할 경우 반드시 사용 후 자원을 닫아줘야 합니다. 그렇지 않으면 메모리 누수, 파일 잠금, 성능 저하 등의 문제가 발생할 수 있습니다. 이를 안전하고 간결하게 처리할 수 있도록 Java 7부터 도입된 문법이 바로 try-with-resources 입니다. 기존 방식의 한계 그동안은 아래처럼 try-catch-finally 구문을 사용해 닫는 방식이 일반적이었습니다. BufferedRe...Aug 6, 2025·2 min read