전체 글 199

[Java] 자바 최신 문법 (Java 17+)

Java 17+ 최신 문법 정리 및 실무 활용Java는 꾸준한 업데이트를 통해 개발자들이 생산성과 코드 품질을 향상시킬 수 있도록 다양한 최신 문법을 도입하고 있습니다. 특히 Java 17 이후 LTS(Long-Term Support) 릴리스에서는 언어 문법 개선, JVM 최적화, 새로운 API 도입 등 많은 변화가 있었습니다. 본 글에서는 Java 17 이상의 최신 문법을 중심으로 주요 기능을 정리하고, 실무에서의 활용 사례를 다룹니다.1. 패턴 매칭 (Pattern Matching)1.1 instanceof 패턴 매칭Java 16에서 도입된 instanceof 패턴 매칭은 Java 17에서 더욱 안정화되었습니다. 이 기능을 통해 타입 검사와 캐스팅을 하나의 구문으로 통합할 수 있습니다.기존 코드:if..

[Kotlin] 코루틴 (Coroutines) 활용법

Kotlin Coroutines 활용법코틀린(Kotlin)의 코루틴(Coroutines)은 비동기 프로그래밍을 보다 간결하고 효율적으로 구현할 수 있는 강력한 기능이다. 실무에서 코루틴을 활용하면 I/O 작업, 네트워크 통신, 대용량 데이터 처리 등 다양한 비동기 작업을 효율적으로 처리할 수 있다. 본 글에서는 코루틴의 기본 개념부터 실무에서의 활용 사례까지 다루며, 고급 기법을 포함한 실질적인 사용법을 공유하고자 한다.1. 코루틴의 기본 개념코루틴은 경량 스레드(lightweight thread)라고도 불리며, 스레드와 달리 컨텍스트 스위칭의 부하가 적고, 더 많은 비동기 작업을 효율적으로 처리할 수 있다. 코루틴은 다음과 같은 핵심 개념을 바탕으로 동작한다.Suspend Function: 일시 중단(..

[운영] Apache Tomcat 설정 및 관리

Apache Tomcat 설정 및 관리 가이드Apache Tomcat은 Java 기반 웹 애플리케이션을 실행하기 위한 가장 널리 사용되는 서블릿 컨테이너 중 하나로, 안정성, 성능 및 확장성이 뛰어난 오픈 소스 프로젝트입니다. 본 가이드에서는 Apache Tomcat의 설정 및 관리에 대해 실무 경험을 바탕으로 주요 항목을 다루고자 합니다. 특히, 서버 최적화, 보안 설정, 클러스터링, 그리고 관리 편의성을 높이기 위한 팁을 중심으로 설명합니다.1. Apache Tomcat 아키텍처 개요Apache Tomcat은 주요 컴포넌트로 구성되어 있으며, 이를 이해하는 것은 설정 및 관리의 첫걸음입니다.Catalina: 서블릿 컨테이너의 핵심으로, HTTP 요청을 처리하고 서블릿을 실행하는 역할을 담당합니다.Co..

[아키텍처] 시스템 설계 (System Design) 개요

시스템 설계 (System Design) 개요시스템 설계(System Design)는 소프트웨어 개발 과정에서 중요한 단계로, 애플리케이션이 어떻게 동작하고 구성 요소들이 어떻게 상호작용하는지를 정의하는 과정이다. 이 과정은 대규모 시스템 개발 시 특히 중요하며, 요구사항 분석부터 아키텍처 설계, 데이터 모델링, API 설계, 확장성(Scalability)과 가용성(Availability) 등 다양한 요소들을 고려해야 한다. 실무에서는 시스템 설계를 제대로 하지 않으면, 유지보수와 확장성에서 심각한 문제가 발생할 수 있다.본 글에서는 시스템 설계의 핵심 개념과 주요 고려사항들을 정리하고, 실무 경험을 바탕으로 중요한 설계 패턴과 트레이드오프(Trade-offs)에 대해 설명한다.1. 시스템 설계의 핵심 ..

아키텍처 2025.01.05

[아키텍처] 도메인 주도 설계(DDD)

도메인 주도 설계(DDD) 개요1. 도메인소프트웨어 개발에서 "도메인"은 소프트웨어가 해결하고자 하는 문제 영역이나 비즈니스 영역을 의미합니다. 도메인은 특정 비즈니스의 핵심 개념, 규칙, 프로세스를 포함합니다.예를 들어, 은행 시스템에서는 계좌, 고객, 거래와 같은 개념이 도메인에 해당하며, 이러한 요소들에 대한 비즈니스 규칙이 포함됩니다. 도메인에 대한 이해는 비즈니스 문제를 효과적으로 해결할 수 있는 소프트웨어를 개발하는 데 필수적입니다.도메인의 주요 특징:비즈니스 중심: 실제 비즈니스 문제와 요구사항에 중점을 둡니다.고유한 용어: 비즈니스 커뮤니케이션에서 필수적인 특정 용어와 정의를 포함합니다.핵심 로직: 비즈니스 규칙과 로직이 도메인의 핵심에 위치하며 소프트웨어에 반영되어야 합니다.2. 도메인 ..

[DB] Index: 중요성, 종류, 최적화 방법

데이터베이스 인덱스: 중요성, 종류, 그리고 최적화 방법데이터베이스 인덱스란?데이터베이스 인덱스는 데이터 검색 속도를 향상시키는 데이터 구조입니다. 인덱스는 데이터베이스가 특정 행을 빠르게 찾을 수 있도록 도와주는 지도 역할을 합니다. 하지만 인덱스를 사용하면 저장 공간이 더 필요하고, 쓰기 작업이 느려지는 단점이 있습니다.인덱스가 중요한 이유인덱스는 관계형 데이터베이스에서 쿼리 실행 시간을 크게 줄여줍니다. 인덱스가 없으면 데이터베이스는 전체 테이블 스캔을 수행하여 각 행을 검사해야 합니다. 이 경우 시간 복잡도는 **O(N)**입니다. 하지만 인덱스를 사용하면 **O(log N)**의 시간 복잡도로 훨씬 빠르게 데이터를 검색할 수 있습니다.예를 들어, customer 테이블에서 아래와 같은 MySQL..

[DB] Replication이란?

📚 Replication이란?✅ Replication(복제)의 정의Replication(레플리케이션)은 데이터베이스 서버의 고가용성(High Availability)과 데이터 무결성(Data Integrity)을 보장하기 위해 기존 DB 서버의 데이터를 다른 서버로 복제(Replicate) 하는 기술입니다.DB 서버가 장애 상황에 빠졌을 때, 복제된 보조 서버(Secondary Server)가 요청을 처리하도록 하여 서비스 중단을 방지할 수 있습니다. 이로 인해 서비스는 Failover(장애 조치)를 통해 연속성을 유지하게 됩니다.🧩 Replication을 도입하는 이유Java Spring 애플리케이션에서 데이터베이스에 있는 Article이라는 테이블을 사용한다고 가정해봅시다. 이 테이블이 저장된 D..

데이터베이스 2025.01.05

[DB] Replication, 데이터베이스 복제와 고가용성 개념 정리

Replication이란? 데이터베이스 복제와 고가용성 개념 정리Replication(복제)은 데이터베이스 서버의 가용성을 높이기 위해, 하나의 데이터베이스(DB)를 여러 대의 DB 서버에 동일하게 복제하는 기술을 의미한다. 이는 시스템 장애나 서버 다운타임이 발생하더라도 서비스 중단 없이 정상적인 동작을 유지하기 위해 사용된다.Replication의 필요성예를 들어, Java Spring 애플리케이션에서 Article이라는 테이블에 대해 읽기/쓰기(read/write) 요청이 DB 서버로 전달된다고 가정하자. 이때 DB 서버에 장애가 발생하면 해당 테이블에 접근할 수 없기 때문에 서비스가 정상적으로 작동하지 않는다. 이러한 상황을 방지하기 위해 Replication을 통해 DB 서버를 복제 서버로 구성..

데이터베이스 2025.01.05

[DB] Sharding과 Horizontal Partitioning의 차이점 및 개념 정리

Sharding과 Horizontal Partitioning의 차이점 및 개념 정리Sharding이란?Sharding은 대규모 데이터베이스 시스템에서 데이터 부하 분산을 목적으로 데이터를 여러 개의 **독립적인 데이터베이스 인스턴스(DB 서버)**에 분할 저장하는 기술이다. 이는 시스템의 **확장성(scalability)**을 확보하고, **고가용성(high availability)**을 보장하기 위해 사용된다.Sharding은 기본적으로 **수평 파티셔닝(horizontal partitioning)**과 유사한 방식으로 작동하지만, 주요 차이점은 각 파티션(partition)이 서로 다른 DB 서버에 저장된다는 점이다. 이를 통해 하나의 데이터베이스 서버에 모든 데이터를 저장하는 방식보다 더 효율적인 ..

데이터베이스 2025.01.05

[DB] 파티셔닝 종류 및 설명 (partitioning)

데이터베이스 파티셔닝 종류 및 설명파티셔닝(Partitioning)은 대용량 데이터를 효율적으로 관리하고, 데이터 조회 및 쓰기 작업의 성능을 향상시키기 위해 테이블을 더 작은 단위로 나누는 기술이다. 파티셔닝은 크게 **버티컬 파티셔닝(Vertical Partitioning)**과 **호리즌탈 파티셔닝(Horizontal Partitioning)**으로 나뉜다.1. 버티컬 파티셔닝 (Vertical Partitioning)버티컬 파티셔닝은 **컬럼(column)**을 기준으로 테이블을 분할하는 방식이다. 이를 이해하기 위해 먼저 데이터베이스의 정규화(Normalization) 개념을 살펴볼 필요가 있다.1-1. 정규화(Normalization) 개념정규화는 데이터베이스에서 중복된 데이터 저장을 방지하고..

데이터베이스 2025.01.05

[들어가며, Kotlin 기초] Java 백엔드 개발자의 코틀린 입문.

왜 Java 개발자가 Kotlin을 배워야 할까?Java 개발자로서 어느 정도 익숙해졌을 때, 자연스럽게 다른 언어에도 관심이 생기기 마련입니다. 그중에서 가장 눈에 띄는 언어가 바로 Kotlin입니다. 처음 Kotlin을 접했을 때, Java와 함께 사용할 수 있다는 점에서 흥미로웠고, 더 나아가 이 언어가 제공하는 다양한 기능이 제 개발 경험을 크게 향상시켜줄 수 있겠다는 생각이 들었습니다. 첫 번째 이유는, Kotlin의 간결한 문법입니다. Java는 강력한 언어이지만 때로는 코드가 장황해질 수 있습니다. 반면 Kotlin은 기본적인 문법 자체가 훨씬 간결하고 깔끔합니다. 코드를 작성하면서 자연스럽게 반복적으로 등장하는 boilerplate 코드가 줄어들고, 가독성도 크게 향상됩니다. 예를 들어, ..

JPA vs MyBatis: ORM 선택 기준과 차이점

데이터베이스와 애플리케이션 간의 상호작용을 단순화하고, 생산성을 높이기 위해 개발자들은 ORM(Object Relational Mapping) 기술을 사용합니다. ORM은 객체와 관계형 데이터베이스 간의 매핑을 지원하여 SQL 작성 없이 데이터베이스와 통신할 수 있게 합니다. Java 및 Kotlin 환경에서 주로 사용되는 두 가지 ORM 기술은 JPA(Java Persistence API)와 MyBatis입니다. 이 포스팅에서는 JPA와 MyBatis의 개념, 차이점, 각각의 장단점, 그리고 어떤 상황에서 적절하게 사용할 수 있는지에 대해 자세히 설명하겠습니다.1. JPA란?JPA(Java Persistence API)는 Java EE에서 제공하는 표준 ORM 인터페이스입니다. 객체 지향 프로그래밍과 ..

RESTful API 설계 원칙 및 베스트 프랙티스 (best practice)

RESTful API는 현대 웹 애플리케이션의 핵심 요소로, 클라이언트와 서버 간의 통신을 단순하고 효율적으로 할 수 있도록 설계된 아키텍처 스타일입니다. **REST(Representational State Transfer)**는 2000년 로이 필딩(Roy Fielding)이 소개한 개념으로, 리소스를 명확히 정의하고 HTTP 프로토콜을 기반으로 데이터를 주고받는 방식입니다. 이번 포스팅에서는 RESTful API의 설계 원칙과 이를 효과적으로 구현하기 위한 베스트 프랙티스를 자세히 설명합니다.1. REST의 6가지 주요 원칙REST 아키텍처는 다음 6가지 원칙을 따릅니다:클라이언트-서버 구조 (Client-Server Architecture)클라이언트와 서버는 서로 독립적으로 동작해야 합니다. 클라..

마이크로서비스 아키텍처와 모놀리식 아키텍처 비교

소프트웨어 아키텍처는 애플리케이션 개발의 핵심 결정 요소 중 하나입니다. 적절한 아키텍처 선택은 개발 속도, 유지보수성, 확장성에 큰 영향을 미치며, 이에 따라 Monolithic 와 MicroService Architecture가 많이 논의됩니다. 이번 포스팅에서는 이 두 가지 아키텍처의 차이점, 장단점, 사용 사례 등을 비교해보겠습니다.1. 모놀리식 아키텍처란?모놀리식 아키텍처는 애플리케이션의 모든 기능과 서비스가 하나의 코드베이스 안에서 통합되어 있는 구조입니다. 즉, 모든 기능이 하나의 큰 애플리케이션으로 배포되고 운영됩니다. 전통적인 애플리케이션 개발 방식에서 많이 사용되었으며, 아래와 같은 구성 요소로 이루어집니다:UI (프론트엔드)비즈니스 로직 (서비스 레이어)데이터베이스 계층모놀리식 애플리..

아키텍처 2024.09.20

[네트워크 프로토콜] TCP/IP 프로토콜의 작동 원리와 최적화 전략

TCP/IP는 인터넷과 대부분의 네트워크에서 사용하는 핵심 프로토콜입니다. 오늘날 우리가 사용하는 거의 모든 디지털 통신이 TCP/IP를 기반으로 이루어지기 때문에, 이 프로토콜의 작동 원리를 이해하고 최적화 전략을 아는 것은 매우 중요합니다. 이번 포스팅에서는 TCP/IP 프로토콜이 어떻게 작동하는지, 최적화할 수 있는 방법을 깊이 있게 설명하고, 그 외 중요한 프로토콜도 간략하게 소개하겠습니다.1. TCP/IP 프로토콜이란?TCP/IP(Transmission Control Protocol/Internet Protocol)는 인터넷에서 데이터를 전송하기 위한 표준 프로토콜입니다. TCP와 IP는 각각의 기능을 통해 데이터를 안정적으로 전송하며, 두 프로토콜의 결합은 인터넷 통신의 근간을 형성합니다.TC..

Network 2024.09.20

[네트워크 아키텍처] SDN(Software-Defined Networking)란 무엇인가?

네트워크 관리는 시간이 지남에 따라 복잡해졌습니다. 전통적인 네트워크 인프라는 하드웨어 중심으로 설계되었으며, 하드웨어를 변경해야만 네트워크 구성을 변경할 수 있었습니다. 이러한 복잡성을 해결하고자 등장한 것이 SDN(Software-Defined Networking)입니다. SDN은 네트워크 관리의 유연성을 극대화하고, 네트워크를 소프트웨어로 제어할 수 있도록 하는 혁신적인 네트워크 아키텍처입니다. 이번 포스팅에서는 SDN이 무엇인지, 어떻게 작동하는지, 그리고 이를 도입했을 때의 이점에 대해 자세히 살펴보겠습니다. 1. SDN(Software-Defined Networking)이란?SDN(소프트웨어 정의 네트워크)은 네트워크의 제어 평면(control plane)과 데이터 평면(data plane)을..

Network 2024.09.20

[네트워크 아키텍처] VLAN(가상 LAN) 설정 및 관리 방법

네트워크 관리에서 VLAN(Virtual Local Area Network, 가상 LAN)은 필수적인 개념입니다. 물리적으로 같은 네트워크 장비에 연결된 장치들을 논리적으로 분리해 네트워크를 효율적으로 관리할 수 있게 해주죠. VLAN을 활용하면 네트워크 보안성, 효율성, 확장성이 크게 향상됩니다. 이번 포스팅에서는 VLAN이란 무엇인지, 설정 방법과 관리 방법을 자세히 알아보겠습니다.1. VLAN이란?**VLAN(가상 LAN)**은 하나의 물리적 네트워크를 논리적으로 분할하여, 여러 개의 독립된 네트워크처럼 동작하게 만드는 기술입니다. 즉, 네트워크 스위치에 연결된 여러 장치를 VLAN을 통해 서로 다른 네트워크로 나눌 수 있습니다. VLAN을 사용하면 물리적 네트워크 인프라를 공유하면서도 논리적 그룹..

Network 2024.09.20

[네트워크 아키텍처] LAN과 WAN의 차이점과 실제 사용 사례

네트워크는 오늘날의 디지털 세계에서 중요한 역할을 합니다. 우리가 매일 사용하는 인터넷과 기업의 내부 시스템이 모두 네트워크로 연결되어 있죠. 이 네트워크는 그 규모와 범위에 따라 다양한 유형으로 구분될 수 있는데, 그중 가장 일반적으로 언급되는 것이 LAN과 WAN입니다. 이번 포스팅에서는 LAN(Local Area Network)과 WAN(Wide Area Network)의 차이점과 실제 사용 사례를 통해 이를 깊이 있게 알아보겠습니다.1. LAN(Local Area Network)란?LAN(로컬 네트워크)는 작은 범위의 네트워크를 말합니다. 주로 한정된 지역 내의 컴퓨터, 서버, 프린터 등의 장치를 연결하는 데 사용됩니다. 이 범위는 일반적으로 한 건물 또는 한 사무실 내에서 이루어지며, 가정이나 ..

Network 2024.09.20

[단위 테스트] 백엔드 테스트 자동화: 단위 테스트부터 통합 테스트까지

테스트 자동화는 소프트웨어 개발에서 품질을 보장하는 필수적인 과정입니다. 백엔드 개발에서는 다양한 테스트 기법을 활용해 코드의 정확성, 안정성, 성능을 검증할 수 있습니다. 이번 포스팅에서는 단위 테스트(Unit Test)부터 통합 테스트(Integration Test)까지 다양한 테스트 방법론을 설명하고, 백엔드 애플리케이션의 테스트 자동화 전략을 소개하겠습니다.1. 테스트 자동화의 필요성백엔드 개발에서 자동화된 테스트는 코드가 의도대로 작동하는지 확인하고, 변경 사항이 시스템에 미치는 영향을 빠르게 피드백하는 데 중요한 역할을 합니다. 수동 테스트는 시간이 오래 걸리고, 반복적인 작업이므로 효율적이지 않습니다. 반면, 자동화된 테스트는 개발 과정에서 일관된 품질을 보장하고, 코드 수정 시 발생할 수 ..

운영 2024.09.20

Redis를 이용한 캐싱 전략과 성능 개선

애플리케이션의 성능을 최적화하는 데 있어 캐싱(Caching)은 중요한 역할을 합니다. 캐싱은 자주 요청되는 데이터를 메모리에 저장해 데이터베이스 접근 횟수를 줄이고, 애플리케이션의 응답 시간을 크게 단축시킵니다. 특히, Redis는 메모리 기반 데이터 저장소로서 빠르고 유연한 캐싱 솔루션을 제공합니다. 이번 포스팅에서는 Redis를 활용한 다양한 캐싱 전략과 성능 개선 방법을 다뤄보겠습니다.1. 캐싱의 기본 개념캐싱은 자주 사용되는 데이터를 메모리에 저장하여 반복적인 데이터베이스 요청을 줄이고 성능을 높이는 기술입니다. 이를 통해 애플리케이션의 응답 시간을 개선하고 서버 부하를 줄일 수 있습니다. 캐싱의 목적은 다음과 같습니다.성능 향상: 데이터베이스 접근을 줄여 빠른 응답 시간 제공부하 감소: 서버의..

RabbitMQ, Kafka 등 메시지 큐를 활용한 비동기 처리

현대의 웹 애플리케이션은 대규모 트래픽을 처리하고 실시간으로 반응해야 합니다. 이에 따라 비동기 처리는 서버의 부하를 줄이고, 응답 시간을 단축하며, 시스템을 확장 가능한 구조로 만드는 데 필수적인 요소입니다. 비동기 처리를 구현하는 대표적인 방법 중 하나가 메시지 큐(Message Queue)입니다. 이 포스팅에서는 대표적인 메시지 큐 기술인 RabbitMQ와 Kafka를 통해 비동기 처리를 어떻게 활용할 수 있는지 살펴보겠습니다.1. 비동기 처리의 필요성비동기 처리는 요청과 작업을 분리하여 서버의 응답 시간을 줄이는 방식입니다. 예를 들어, 사용자가 회원가입을 요청했을 때, 이메일 인증을 바로 처리하지 않고, 인증 메일 발송 작업을 별도의 프로세스로 비동기 처리함으로써 사용자에게 빠른 응답을 제공할 ..

운영/Kafka & MQ 2024.09.20

[Java] Garbage Collection(가비지 컬렉션)의 개념 및 동작 원리

가비지 컬렉션이란 뭘까?  소프트웨어를 개발하면서 사용이 끝난 메모리가 적절히 해제되지 않으면 가비지(Garbage)'가 쌓일 수 있습니다.사용되지 않는 메모리가 남아 가비지(Garbage)가 발생할 수 있는데 C 언어에서는 이러한 메모리를 직접 관리해야 하며, free() 함수를 통해 수동으로 해제합니다. 하지만 Java나 Kotlin과 같은 언어에서는 개발자가 메모리 해제를 직접 수행하지 않아도 됩니다. 이는 JVM의 가비지 컬렉터(Garbage Collector)가 자동으로 불필요한 메모리를 정리해주기 때문입니다.[ JVM 메모리 구조 ]--------------------------------------------------------| Heap Memory ..

정보처리기사 2024년 2회 필기+실기 합격 후기(+공부법)

안녕하세요! 개발이 재미있는 블로그의 주인장입니다. 😊 바쁘게 회사를 다니고 스터디도 병행하다 보니, 어느 순간 정보처리기사 실기 시험이 코앞으로 다가와 블로그를 작성할 시간이 없었습니다. 하지만 드디어 정처기 후기를 들고 오게 되었습니다. 블로그에 후기를 쓴다면 반드시 합격 소식을 전하고 싶었는데, 목표를 이룰 수 있게 되어 너무 뿌듯합니다! 그럼 이제 후기를 작성해보도록 하겠습니다! 1. 필기시험 2번 본 후기와 결과 일단, 저는 2024년 계획 중 정보처리기사 자격증 취득을 목표로 삼았습니다. 처음 입사한 후 1~2년 동안 회사에 적응하고 회사 업무와 개발 관련 공부에 많이 집중하느라 정보처리기사를 전혀 신경 쓰지 못했습니다.어느 정도 회사에 적응하고 원하는 평가 등급에 도달하면서, 그동안 가장..

[리트코드][JAVA] 2434. Using-a-robot-to-print-the-lexicographically-smallest-string (로봇을 사용하여 사전순으로 가장 작은 문자열 인쇄하기)

💡 문제Using-a-robot-to-print-the-lexicographically-smallest-string (https://leetcode.com/problems/using-a-robot-to-print-the-lexicographically-smallest-string/description/)📝 선행 개념그리디 알고리즘 (Greedy Algorithm):그리디 알고리즘은 각 단계에서 가장 최선의 선택을 하는 방식입니다. 이 문제에서도 각 단계에서 사전순으로 가장 작은 문자를 선택하여 결과 문자열을 구성하는 것이 핵심입니다.스택 자료구조 (Stack Data Structure):스택은 LIFO(Last In First Out) 구조로, 마지막에 추가된 요소가 가장 먼저 제거됩니다. 이 문제에..

[99클럽 코테 스터디] 📝 Day36. 스택 3

99클럽 코테 스터디 36일차 TIL + 스택📍 오늘의 학습 키워드스택 (Stack)📝 공부한 내용 본인의 언어로 정리하기스택(Stack)은 후입선출(LIFO, Last In First Out) 구조를 가진 자료구조로, 데이터를 넣고(push) 빼는(pop) 동작을 제공합니다. 주요 메서드로는 push, pop, peek, isEmpty 등이 있습니다.📖 오늘의 회고📚 어떤 문제가 있었고, 나는 어떤 시도를 했는지오늘은 스택을 사용한 문제 해결에 대해 학습하였습니다. 문제의 요구사항을 정확히 이해하고, 스택을 어떻게 활용해야 하는지 고민했습니다.스택을 사용하여 문자열을 역순으로 출력하거나, 괄호 매칭을 확인하는 문제들을 해결해 보았습니다. 각 문제에서 스택의 push와 pop 연산을 적절히 활용하..

[리트코드][JAVA] 2762. continuous-subarrays (연속 하위 배열)

💡 문제continuous-subarrays (https://leetcode.com/problems/continuous-subarrays/description/)자세한 문제 설명과 입출력 예는 링크를 참고해주세요.📝 선행 개념1. 슬라이딩 윈도우 (Sliding Window)정의: 슬라이딩 윈도우는 배열이나 리스트와 같은 선형 데이터 구조에서 일정한 크기의 부분을 이동하면서 문제를 해결하는 기법입니다.활용:주어진 범위 내에서 연속적인 부분 배열을 찾거나 특정 조건을 만족하는 부분 배열을 효율적으로 처리할 때 사용합니다.두 포인터(start와 end)를 사용하여 현재 고려 중인 윈도우를 나타내고, 이 범위를 확장하거나 축소하여 문제를 해결합니다.2. 스택 (Deque - Double Ended Queu..

[리트코드][JAVA] 2944. minimum-number-of-coins-for-fruits (과일에 대한 최소 동전 수)

💡 문제minimum-number-of-coins-for-fruits (https://leetcode.com/problems/minimum-number-of-coins-for-fruits/description/)자세한 문제 설명과 입출력 예는 링크를 참고해주세요.📝 선행 개념스택(Stack)과 큐(Queue)는 기본적이면서도 중요한 자료 구조입니다. 이들은 데이터를 저장하고 관리하는 방법을 정의하며, 다양한 알고리즘과 문제 해결에 사용됩니다. 아래에서 스택과 큐의 개념을 설명하겠습니다.스택재귀적 알고리즘: 함수 호출을 추적하기 위해 스택을 사용합니다.역순 문자열 만들기: 문자열을 역순으로 출력하기 위해 스택을 사용합니다.괄호 검사: 수식의 괄호가 올바르게 닫혔는지 확인하기 위해 스택을 사용합니다.탐색..

[리트코드][JAVA] 2195. append-k-integers-with-minimal-sum (최소 합으로 K 정수 추가하기)

💡 문제append-k-integers-with-minimal-sum (https://leetcode.com/problems/append-k-integers-with-minimal-sum/description/)자세한 문제 설명과 입출력 예는 링크를 참고해주세요. 📝 선행 개념HashSet은 Java에서 제공하는 자료구조 중 하나로, 집합(Set)을 구현한 클래스입니다. 여기서 집합은 중복을 허용하지 않고 순서가 없는 요소들의 모임을 의미합니다. HashSet은 해시 테이블을 이용하여 구현되어 있어, 데이터의 추가, 삭제, 검색 등의 연산이 평균적으로 O(1)의 시간 복잡도를 가집니다. 이는 데이터의 크기에 상관없이 일정한 성능을 보장합니다.HashSet의 주요 특징:중복을 허용하지 않음: 동일한 요..

[리트코드][JAVA] 2280. minimum-lines-to-represent-a-line-chart (라인 차트를 표현하기 위한 최소 라인)

💡 문제minimum-lines-to-represent-a-line-chart (https://leetcode.com/problems/minimum-lines-to-represent-a-line-chart/description/)자세한 문제 설명과 입출력 예는 링크를 참고해주세요.📝 선행 개념정렬 알고리즘: 문제에서 주어진 데이터를 날짜별로 정렬하는 과정이 필요합니다. 따라서 정렬 알고리즘에 대한 이해와 구현능력이 필요합니다. 특히 시간 복잡도와 공간 복잡도를 고려하여 적절한 정렬 알고리즘을 선택하는 것이 중요합니다.기하학적 관점에서의 문제 해결: 주식 가격 데이터를 직선으로 연결하는 문제는 기울기와 직선의 개념을 활용하여 해결됩니다. 따라서 기하학적 개념을 잘 이해하고 기울기를 계산하는 방법을 숙지..

[리트코드][JAVA] 402. remove-k-digits (K 자리 제거)

💡 문제remove-k-digits (https://leetcode.com/problems/remove-k-digits/description/)자세한 문제 설명과 입출력 예는 링크를 참고해주세요. 📝 선행 개념1. 문자열 다루기문자열 순회: 문자열을 문자 단위로 순회하면서 각 문자를 처리할 수 있어야 합니다.문자열과 문자: 문자열을 문자 배열로 변환하거나, 각 문자에 접근하고 조작하는 방법을 알아야 합니다.2. 스택 (Stack)스택의 기본 연산: 스택은 LIFO(Last In First Out) 구조로 작동하는 자료구조입니다. 스택에서 요소를 추가하는 push와 제거하는 pop 연산을 이해해야 합니다.스택을 이용한 문제 해결: 스택을 사용하면 현재 상태를 쉽게 추적하고, 필요 시 과거의 상태로 돌아..