1. ArrayList와 LinkedList의 성능 차이ArrayList와 LinkedList는 중간 삽입/삭제의 시간 복잡도가 모두 O(N)으로 동일합니다. 하지만 실제로는 ArrayList가 더 빠른 경우가 많습니다.ArrayList:내부적으로 배열을 사용하며, 연속된 메모리에 데이터를 저장합니다.특정 위치를 찾는 데 O(1)로 빠르며, 삽입/삭제 시 데이터 이동이 발생하지만, 캐시 최적화 효과로 인해 성능이 더 좋습니다.LinkedList:노드 기반 자료구조로, 삽입/삭제는 연결만 변경하면 되지만 특정 위치를 탐색하는 데 O(N)이 걸립니다.메모리가 비연속적이어서 캐시 효율이 떨어지고, 실제로 더 느릴 수 있습니다.결론: 이론적으로 LinkedList가 유리할 것 같지만, 캐시 친화적인 ArrayL..
Java
자바에서 Queue 인터페이스는 기본적인 단방향 큐(FIFO)를 정의하는데 사용됩니다. 하지만, 실제로 Queue 대신 Deque를 사용하여 동일한 동작을 구현해도 성능에 문제가 없습니다. Deque는 큐와 스택 동작을 모두 지원하므로, Queue의 모든 기능을 충분히 대체할 수 있습니다.1. 🌐 Queue와 Deque의 차이1.1 Queue의 특징단방향 삽입/삭제만 가능하며, FIFO(First In, First Out) 동작을 따릅니다.주요 메서드:삽입: add(E e), offer(E e)삭제: poll(), remove()조회: peek(), element()1.2 Deque의 특징양방향 삽입/삭제가 가능하지만, 단방향 동작도 구현 가능합니다.Deque를 단방향 큐로 사용하면, Queue의 모든..
🔒 트랜잭션 격리 수준(Isolation Level)📌 격리 수준의 정의격리 수준은 동시에 실행되는 트랜잭션 간의 데이터 충돌 방지 및 무결성 보장을 위해 설정하는 규칙입니다. 각 수준은 트랜잭션 성능과 일관성 사이에서 트레이드오프를 제공합니다.격리 수준은 ANSI SQL 표준에 정의되어 있으며, Spring에서는 이를 데이터베이스에 전달하여 적용합니다.격리 수준 설정 방법Spring에서 @Transactional 어노테이션에 isolation 속성을 설정하여 격리 수준을 지정할 수 있습니다.예시 코드@Transactional(isolation = Isolation.READ_COMMITTED)public void processData() { // 트랜잭션 동작}📌 격리 수준 값과 특징아래는 S..
📌 트랜잭션 전파(Propagation)란?트랜잭션 전파(Propagation)는 트랜잭션의 존재 여부와 관계를 정의합니다.현재 트랜잭션이 있는 경우 그 트랜잭션에 참여할지,새로 트랜잭션을 생성할지,트랜잭션 없이 실행할지를 결정합니다.Spring에서 제공하는 전파 속성은 @Transactional 어노테이션의 propagation 속성으로 설정할 수 있습니다.📌 트랜잭션 전파와 격리 수준의 차이전파(Propagation)트랜잭션의 관계를 설정합니다.예: 새로운 트랜잭션 생성, 기존 트랜잭션 참여 등.격리 수준(Isolation Level)동시에 실행되는 트랜잭션 간 데이터 접근 규칙을 설정합니다.예: Dirty Read 방지, Repeatable Read 보장 등.간단히: 전파는 트랜잭션의 관계, 격..
📌 @Transactional이란?Spring에서 제공하는 트랜잭션 관리 어노테이션으로, 데이터 작업의 ACID 특성을 보장하며 트랜잭션 시작, 커밋, 롤백을 자동으로 처리합니다.💡 @Transactional의 동작 원리@Transactional은 AOP(Aspect-Oriented Programming) 기반으로 동작하며, 프록시 객체가 트랜잭션의 시작과 종료를 제어합니다.프록시 동작 구조클라이언트가 호출 → 프록시 객체가 메서드를 가로챔.프록시 객체가 트랜잭션을 시작(Commit/Rollback 결정).실제 객체의 메서드 실행.메서드 종료 후 트랜잭션 종료.📌 트랜잭션은 원래 하나인가? 독립적으로 동작한다는 의미는?트랜잭션은 하나의 작업 단위트랜잭션은 데이터를 다루는 논리적 작업 단위입니다. 이..
Spring Boot 프로젝트를 진행하다 보면, 여러 프로젝트에서 재사용할 수 있는 공통 모듈을 패키지화해서 관리하고 싶을 때가 많습니다. 이번 포스팅에서는 공통 모듈을 Maven 패키지로 만들어 GitHub Packages에 등록하고, 이를 다른 프로젝트에서 사용하는 방법을 처음부터 끝까지 자세히 설명합니다.1. 🌱 공통 모듈 프로젝트 생성1️⃣ 프로젝트 구조 만들기Spring Boot 공통 모듈 프로젝트를 생성합니다. Maven 프로젝트로 설정하는 것이 중요합니다.Maven 프로젝트 생성 명령어:mvn archetype:generate -DgroupId=com.example -DartifactId=springboot-common-modules -DarchetypeArtifactId=maven-arc..
이번 글에서는 Apache POI 라이브러리를 사용해 Java로 Excel 파일을 생성하는 방법을 처음부터 끝까지 설명합니다. 스타일 적용, 데이터 작성, 컬럼 스타일링 등, 실용적인 예제를 통해 구현 방법을 단계별로 알아보겠습니다.1. Apache POI란?Apache POI는 Java 기반으로 MS Office 문서를 다룰 수 있는 강력한 라이브러리입니다. 특히, Excel 파일을 처리하는 데 가장 널리 쓰입니다.2. Excel 파일 생성 프로세스🛠️ 준비 단계의존성 추가Maven 프로젝트라면 pom.xml에 아래 의존성 추가 org.apache.poi poi-ooxml 5.2.3 Apache POI 주요 클래스Workbook: Excel 파일을 나타냄. (HSSFWorkbook: .xl..
이전 포스팅에서 다뤘던 [ [JAVA] Java에서 예외 처리방법 ] 내용을 참고하시면, 이번 주제에 대한 배경 지식이나 기초 정보를 확인하실 수 있습니다! [JAVA] Java에서 예외 처리방법💨 1. Java에서 예외 처리방법자바에서 예외 처리는 프로그램의 오류를 안전하게 처리하고 앱의 안정성을 유지하는 중요한 개념입니다. 예외는 예상치 못한 상황에서 발생할 수 있는 오류들을tae-hui.tistory.com1. 🌌 Java의 예외 계층 구조와 개념Java에서는 프로그램 실행 중 발생할 수 있는 문제를 체계적으로 관리하고 프로그램의 안정성을 높이기 위해 예외 처리를 제공합니다. 모든 예외 상황은 Throwable이라는 최상위 클래스를 중심으로 Error와 Exception으로 구분되며, 각 예외..