1. ArrayList와 LinkedList의 성능 차이ArrayList와 LinkedList는 중간 삽입/삭제의 시간 복잡도가 모두 O(N)으로 동일합니다. 하지만 실제로는 ArrayList가 더 빠른 경우가 많습니다.ArrayList:내부적으로 배열을 사용하며, 연속된 메모리에 데이터를 저장합니다.특정 위치를 찾는 데 O(1)로 빠르며, 삽입/삭제 시 데이터 이동이 발생하지만, 캐시 최적화 효과로 인해 성능이 더 좋습니다.LinkedList:노드 기반 자료구조로, 삽입/삭제는 연결만 변경하면 되지만 특정 위치를 탐색하는 데 O(N)이 걸립니다.메모리가 비연속적이어서 캐시 효율이 떨어지고, 실제로 더 느릴 수 있습니다.결론: 이론적으로 LinkedList가 유리할 것 같지만, 캐시 친화적인 ArrayL..
Java
PriorityQueue는 자바에서 제공하는 우선순위 큐(Priority Queue) 구현체로, 요소를 우선순위에 따라 자동으로 정렬하여 관리하는 자료구조입니다. 내부적으로 힙(Heap) 자료구조를 기반으로 하며, 최소 힙(Min-Heap)을 기본으로 사용합니다.1. 🌐 PriorityQueue란?1.1 주요 특징자동 정렬: 삽입된 요소는 우선순위에 따라 정렬됩니다.(기본적으로 오름차순으로 정렬되며, 사용자 정의 정렬 순서를 지정할 수 있습니다.)FIFO가 아닌 우선순위 기반 처리:일반적인 큐(FIFO)와 다르게, 요소는 우선순위가 높은 순서대로 처리됩니다.중복 요소 허용:동일한 값을 여러 번 삽입할 수 있습니다.내부적으로 힙(Heap) 자료구조를 사용하여 정렬 및 삽입/삭제 작업을 효율적으로 수행합니..
자바에서 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의 모든..
Spring Boot 프로젝트를 진행하다 보면, 여러 프로젝트에서 재사용할 수 있는 공통 모듈을 패키지화해서 관리하고 싶을 때가 많습니다. 이번 포스팅에서는 공통 모듈을 Maven 패키지로 만들어 GitHub Packages에 등록하고, 이를 다른 프로젝트에서 사용하는 방법을 처음부터 끝까지 자세히 설명합니다.1. 🌱 공통 모듈 프로젝트 생성1️⃣ 프로젝트 구조 만들기Spring Boot 공통 모듈 프로젝트를 생성합니다. Maven 프로젝트로 설정하는 것이 중요합니다.Maven 프로젝트 생성 명령어:mvn archetype:generate -DgroupId=com.example -DartifactId=springboot-common-modules -DarchetypeArtifactId=maven-arc..
이번 글에서는 프론트엔드에서 업로드된 Excel 파일을 Spring 백엔드에서 받아서 Apache POI로 처리하는 방법을 알아보겠습니다. 업로드된 파일을 어떻게 서버에서 다룰 수 있는지 Spring MVC와 Apache POI를 활용하여 구현합니다.전체 구현 개요프론트엔드Nuxt.js를 통해 파일을 업로드.서버로 HTTP POST 요청을 보냄.백엔드Spring Controller에서 파일을 받음.MultipartFile 객체로 업로드된 파일 처리.Apache POI로 Excel 데이터를 읽고 출력 또는 가공.처리된 데이터데이터베이스 저장 또는 JSON 응답 반환.1. 프론트엔드: Nuxt.js로 파일 업로드 구현Nuxt.js는 Vue.js 기반으로 작동하기 때문에 파일 업로드는 Vue의 기본 이벤트 처..
💨 1. Java에서 예외 처리방법자바에서 예외 처리는 프로그램의 오류를 안전하게 처리하고 앱의 안정성을 유지하는 중요한 개념입니다. 예외는 예상치 못한 상황에서 발생할 수 있는 오류들을 지칭하는데, 자바에서는 try-catch-finally 구문, throws 키워드, 그리고 커스텀 예외를 통해 다양한 예외 상황을 처리할 수 있습니다. 이 포스트에서는 자바에서 예외를 처리하는 방법을 세부적으로 설명하고, 예외 처리와 트랜잭션 처리의 관계를 알아본 뒤, 커스텀 예외를 만드는 방법까지 상세히 설명하겠습니다.🙆♂️ 2. 자바에서 예외 처리하는 주요 방법2.1 try-catch 구문 사용하기try-catch 구문은 자바에서 예외를 잡아내고 처리하는 가장 기본적인 방법입니다.try: 예외가 발생할 가능성이..
💻 Spring Data Access (JDBC, Transaction)Spring 프레임워크를 사용하여 애플리케이션을 개발할 때, 데이터베이스와의 연동은 필수적인 부분입니다. 이번 글에서는 Spring의 JDBC를 사용한 데이터 접근과 함께 MyBatis 통합, 트랜잭션 관리 방법, 그리고 데이터베이스 연동 설정을 해보겠습니다.1. 🌟 Spring JDBC Template✔️ Spring JDBC Template란?Spring JDBC Template은 JDBC(Java Database Connectivity) 사용 시 발생하는 보일러플레이트 코드를 대폭 줄여주기 위해 설계된 유틸리티 클래스입니다. JDBC를 사용할 때 반복적으로 사용되는 코드, 예를 들면 데이터베이스 커넥션을 열고 닫는 것, Pr..
1. 🖥️ Redis란 무엇인가?Redis는 Remote Dictionary Server의 약자로, 데이터를 메모리에 저장하여 빠르게 처리하는 오픈 소스 인메모리 데이터베이스입니다. Key-Value 구조로 데이터를 저장하고, 다양한 데이터 구조를 지원하는 것이 특징입니다. 일반적인 데이터베이스와 달리 데이터를 디스크가 아닌 메모리에 저장하기 때문에 읽기/쓰기 속도가 매우 빠릅니다.Redis의 특징인메모리 데이터베이스: Redis는 모든 데이터를 메모리에 저장하고, 필요에 따라 데이터를 디스크에 백업할 수 있습니다. 이로 인해 데이터 처리 속도가 매우 빠르며, 특히 실시간 데이터 처리에 유리합니다.다양한 데이터 구조 지원: Redis는 단순한 Key-Value 저장소일 뿐만 아니라, 다양한 데이터 타입..