조인이 필요한 이유 – 데이터 정규화의 통합

데이터베이스를 설계할 때 정보를 여러 테이블에 나누어 저장하는 것은 데이터의 효율적인 관리와 무결성 유지를 위한 필수적인 과정이다. 이를 정규화(Normalization)라고 하며, 흩어진 데이터를 다시 연결하여 의미 있는 정보를 얻는 기술이 바로 조인(JOIN)이다. Users Table Products Table Orders Table 데이터 분리의 필요성…

SQL 쿼리의 논리적 실행 순서

SQL 쿼리를 작성하는 순서 (SELECT, FROM, WHERE 등)와 데이터베이스가 쿼리를 실제로 처리하는 논리적인 실행 순서는 다르다. 이 순서를 이해하는 것은 오류를 피하고 효율적으로 쿼리를 작성하는 데 매우 중요하다 SQL 쿼리의 논리적 실행 순서 (7단계) 예제로 따라가는 실행 순서 문제 단계별…

데이터 그룹화 – 필터링

GROUP BY 절을 통해 데이터를 그룹화하고 집계한 후, 특정 조건을 만족하는 그룹만을 필터링해야 할 때가 있다. 이때 사용하는 것이 HAVING 절이다. WHERE 절과 HAVING 절은 모두 필터링 기능을 하지만, 작동 시점과 대상이 명확히 다르다 WHERE 절과 HAVING 절의 차이 SQL…

데이터 그룹핑

GROUP BY 절은 데이터를 특정 기준에 따라 여러 그룹으로 나누고, 각 그룹에 대해 집계 함수를 적용하여 요약 통계를 생성할 때 사용한다. 이는 전체 데이터에 대한 통계가 아닌, 세분화된 기준(예: 카테고리별, 고객별)으로 데이터를 분석할 때 필수적인 기능이다 GROUP BY 기본 사용법…

데이터 집계

데이터 분석은 비즈니스 의사결정의 핵심이다. 특히 쇼핑몰 등의 서비스 운영에서는 주문 현황, 매출, 고객 행동 등을 파악하는 것이 중요하다. SQL의 집계 함수(Aggregate Functions)는 이처럼 방대한 데이터를 요약이서하고 분석을 도와준다. order_stat table schema order_stat 데이터 NULL 값과 집계 함수 데이터는 종종…

동시성 컬렉션

동시성 컬렉션이 필요한 이유 – 스레드 안전성 문제 java.util 패키지의 ArrayList, LinkedList, HashSet, HashMap과 같은 일반적인 컬렉션들은 스레드 세이프(Thread Safe)하지 않다. 즉, 여러 스레드가 동시에 접근할 때 데이터 손상이나 예상치 못한 결과를 초래할 수 있다 SimpleList SimpleListMain BasicList의 add() 메서드…

생산자 – 소비자 문제와 BlockingQueue

문제 정의 생산자 – 소비자 문제는 한정된 크기의 버퍼를 통해 데이터를 주고 받는 멀티스레드 환경에서 발생하는 동시성 문제이다 핵심 문제 해결 방안의 진화 단순 synchronized (문제 발생) sleep()으로 대기 (더 심각한 문제) wait/nofity 사용 (비효율 존재) Lock + Condition으로 개선…

내장 톰캣 – 빌드와 배포

내장 톰캣(Embedded Tomcat)은 애플리케이션에 톰캣 서버를 라이브러리 형태로 포함하여 빌드하고 배포하는 방식이다. 이를 통해 애플리케이션 단독으로 실행 가능한 패키지를 만들 수 있다 Jar 파일 빌드의 기본 원칙 이 buildJar 태스크를 실행하면 build/libs 디렉토리에 embed-0.0.1-SNAPSHOT.jar와 같은 형태로 JAR 파일이 생성된다 jar…

내장 톰켓(Embedded Tomcat)을 활용한 웹 애플리케이션 구동

내장 톰캣을 라이브러리 형태로 애플리케이션에 포함하여, main() 메서드 실행만으로 웹 서버를 직접 구동할 수 있게 해주는 기능이다. 이를 통해 개발자는 별도의 WAS 설치나 복잡한 설정 없이 순수 자바 코드로 서블릿 및 스프링 MVC 애플리케이션을 편리하게 실행할 수 있다. 스프링 부트가…

외장 서버(WAR) 방식의 단점과 내장 서버(JAR)의 등장

전통적인 웹 애플리케이션 개발 방식은 톰캣 같은 WAS를 별도로 설치하고 WAR 파일을 배포하는 외장 서버 방식이었다. 이 방식은 복잡한 설치 및 배포 과정, 개발 환경 설정의 어려움, 버전 관리의 불편함 등 여러 단점을 가졌다. 이러한 불편함을 해결하기 위해 WAS를 애플리케이션…