| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 프로퍼티
- JDBC TEMPLATE
- java spring
- @test
- unix
- Spring Boot
- pointcut
- 마이바티스
- JdbcTemplate
- Dependency Injection
- spring framework
- @Spring-Test
- myBatis
- java
- Di
- STS
- spring aop
- Ubunt
- XML
- 컨테이너
- POJO
- spring
- AOP
- @AspectJ
- Framework
- 리눅스
- Linux
- Spring JDBC
- @JUnit
- SpringJDBC
- Today
- Total
목록Content (317)
개키우는개발자 : )
"SQLite는 테스트용 아니야?"몇 년 전까지만 해도 맞는 말이었다. 하지만 2026년 현재, SQLite를 프로덕션에서 쓰는 서비스가 급격히 늘고 있다. Rails 8이 SQLite를 기본 DB로 밀고 있고, Turso, Litestream 같은 도구들이 등장하면서 MVP나 신규 프로젝트에서 SQLite를 선택하는 게 더 이상 이상한 일이 아니게 됐다.SQLite가 달라진 점최신 버전 (3.51.x, 2025년)jsonb_each(), jsonb_tree() - JSON 처리 강화unistr() - 유니코드 문자열 함수 추가sqlite3_setlk_timeout() - 락 타임아웃 세밀한 제어성능 최적화 - 읽기 트랜잭션 커밋 속도 개선IN 연산자 최적화 - 서브쿼리 재사용 개선25주년 기념 릴리스 ..
새 프로젝트를 시작할 때마다 고민되는 질문이다. "PostgreSQL이랑 MySQL 중에 뭘 써야 하지?"2026년 기준으로 두 데이터베이스를 비교하고, 상황별 선택 가이드를 정리한다.한눈에 보는 비교표항목 PostgreSQL MySQL타입객체 관계형 (ORDBMS)관계형 (RDBMS)라이선스PostgreSQL License (완전 무료)GPL (상용 시 유료 가능)최신 버전 (2026)17.x8.4 LTS / 9.x강점복잡한 쿼리, 데이터 무결성단순 읽기, 빠른 속도약점메모리 사용량 높음복잡한 쿼리 성능적합한 용도금융, 분석, 대규모 시스템웹사이트, 중소규모 앱1. 성능 비교읽기 성능단순 SELECT 쿼리는 MySQL이 빠르다.MySQL: 단순 읽기 위주 → 승리PostgreSQL: 복잡한 읽기 → 승..
WHERE 절에서 여러 값을 조회할 때 IN을 많이 쓴다. 그런데 IN, ANY, EXISTS 중에 뭐가 가장 빠를까? PostgreSQL의 실행계획을 분석하면서 정리한다.IN, ANY, EXISTS 기본 문법먼저 세 가지 문법을 비교해보자.IN 절SELECT * FROM usersWHERE id IN (1, 2, 3, 4, 5);-- 서브쿼리 사용SELECT * FROM usersWHERE id IN (SELECT user_id FROM orders WHERE status = 'completed');ANY 연산자SELECT * FROM usersWHERE id = ANY(ARRAY[1, 2, 3, 4, 5]);-- 서브쿼리 사용SELECT * FROM usersWHERE id = ANY(SELECT u..
Ubuntu에서 MySQL 설치하는 방법을 정리한다. APT 패키지 매니저로 쉽게 설치할 수 있다. 서버 운영을 고려해서 원격 접속 설정까지 다룬다.지원 Ubuntu 버전Ubuntu 버전 지원 MySQL24.04 LTSMySQL 8.0, 8.422.04 LTSMySQL 8.0, 8.420.04 LTSMySQL 8.0이 글은 Ubuntu 22.04 / 24.04 기준으로 작성했다.설치 방법 선택방법 장점 단점APT 기본 저장소간편함최신 버전 아닐 수 있음MySQL APT Repository최신 버전저장소 추가 필요이 글에서는 둘 다 설명한다.방법 1: APT 기본 저장소로 설치가장 간단한 방법이다. Ubuntu 기본 저장소의 MySQL을 설치한다.1-1. 패키지 목록 업데이트sudo apt update1-..
macOS에서 MySQL 설치하는 가장 쉬운 방법은 Homebrew다. 터미널 명령어 몇 줄이면 끝난다.버전 선택버전 Homebrew 패키지 특징8.4 LTSmysql@8.4안정적, 장기지원최신 (9.x)mysql최신 기능실무나 학습용이면 8.4 LTS를 추천한다.1. Homebrew 설치 확인터미널 열고 Homebrew가 설치되어 있는지 확인brew --version설치되어 있으면 버전이 표시된다.Homebrew 4.x.xHomebrew 미설치 시/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"설치 후 터미널 재시작2. MySQL 설치8.4 LTS 설치 (권장)brew install..
2026년 1월 기준 MySQL 설치 방법을 정리한다. 현재 MySQL은 8.4 LTS와 9.x Innovation 두 가지 버전 라인이 있다. 입문자나 실무용으로는 8.4 LTS를 추천한다.MySQL 버전 선택 가이드버전 타입 특징 추천 대상8.4 LTS장기지원안정적, 버그 수정 중심실무, 입문자9.xInnovation새 기능 (Vector, JS 지원)최신 기능 테스트8.4 LTS는 2032년까지 지원 예정이라 오래 쓸 수 있다. 이 글에서는 8.4 LTS 기준으로 설치한다.1. 설치 전 확인사항시스템 요구사항Windows 10 / 11 (64bit)최소 4GB RAM (8GB 권장)디스크 여유 공간 2GB 이상기존 MySQL 설치 여부 확인이미 MySQL이나 MariaDB가 설치되어 있으면 충돌이 ..
CREATE TABLE은 가장 기본적인 DDL이지만, 제대로 활용하면 성능과 유지보수에 큰 차이가 난다. 기본 문법은 이미 알고 있다고 가정하고, 실무에서 자주 쓰는 고급 기능들을 정리한다.목차CREATE TABLE IF NOT EXISTSCREATE TABLE AS SELECT (CTAS)제약조건 심화테이블 상속 (INHERITS)파티셔닝 (PARTITION BY)임시 테이블 (TEMPORARY)UNLOGGED 테이블LIKE 절로 테이블 복사1. CREATE TABLE IF NOT EXISTS테이블이 이미 있으면 에러 없이 넘어간다. 스크립트 여러 번 실행할 때 유용하다.-- 테이블이 있으면 에러 발생CREATE TABLE users ( id SERIAL PRIMARY KEY, name VA..
다른 테이블의 값을 참조해서 UPDATE 해야 할 때가 있다. 예를 들어 주문 테이블의 상품명을 상품 테이블에서 가져와서 수정하는 경우다. PostgreSQL에서는 FROM 절을 사용해서 JOIN UPDATE를 할 수 있다.MySQL과 문법이 다르다MySQL에서는 UPDATE에 JOIN을 직접 쓴다.-- MySQL 문법UPDATE orders oJOIN products p ON o.product_id = p.idSET o.product_name = p.name;PostgreSQL에서는 이 문법이 안 된다. FROM 절을 사용해야 한다.-- PostgreSQL 문법UPDATE orders oSET product_name = p.nameFROM products pWHERE o.product_id = p.id..
UPDATE를 실행하고 나서 수정된 데이터를 다시 SELECT 하는 경우가 많다. PostgreSQL에서는 RETURNING 절을 사용하면 UPDATE와 SELECT를 한번에 처리할 수 있다.RETURNING이 필요한 상황보통 이런 식으로 작성한다.-- 1. 데이터 수정UPDATE usersSET point = point + 100WHERE id = 1;-- 2. 수정된 데이터 조회SELECT id, name, point FROM users WHERE id = 1;쿼리를 2번 실행해야 한다. API 개발할 때 이런 패턴이 자주 나온다. RETURNING을 쓰면 한번에 처리된다.기본 문법UPDATE 끝에 RETURNING 절을 추가한다.UPDATE TABLE_NAMESET COLUMN = VAL..
UPDATE는 단순히 데이터를 수정하는 것처럼 보이지만, 대량의 데이터를 처리할 때는 생각보다 많은 문제가 발생한다. 실무에서 100만 건 이상의 데이터를 UPDATE 할 때 겪었던 문제들과 해결 방법을 정리한다.UPDATE가 느린 이유PostgreSQL에서 UPDATE는 내부적으로 DELETE + INSERT와 비슷하게 동작한다. 기존 행을 삭제 표시하고 새로운 행을 추가하는 방식이다. 이를 MVCC(Multi-Version Concurrency Control)라고 한다.그래서 UPDATE를 많이 하면테이블 크기가 커진다 (Dead Tuple 증가)인덱스도 새로 추가된다VACUUM이 필요해진다-- 테이블의 Dead Tuple 확인SELECT relname, n_live_tup, n_d..
스프링 개발 환경 셋업 요약1. 스프링 개발 시작첫 단계: 스프링 애플리케이션 개발을 위한 환경 구성.개발에 필요한 도구 및 설정 준비가 중요.2. 강의에서 사용하는 스프링 버전강의 기준: Spring 6.0.12 및 Spring Boot 3.1.4.이후 스프링 버전이 업데이트되더라도 강의 예제와 큰 차이는 없음.예제가 호환되지 않을 경우, 강의에서 사용한 버전과 비슷한 환경 사용 권장.3. 개발 환경 설정주요 도구JDK: Java Development Kit.IDE: IntelliJ IDEA.HTTPie: API 테스트 및 개발용 도구 (선택 사항).JDK 설치 방법옵션 1: IntelliJ 내부 설치IntelliJ의 내장 기능으로 JDK 설치 및 관리 가능.IDE에서 다운로드 메뉴를 통해 원하는 JD..
1. 강의 소개강사: 토비 이일민"토비의 스프링" 저자.스프링 기술 및 원리 이해를 코드 중심으로 설명.2. 강의 목적스프링의 공통 원리 탐구:스프링 프레임워크의 다양한 기술에 적용된 원리를 소개.이를 코드로 구현하여 이해를 돕는 방식.애플리케이션 코드에 응용:배운 스프링 원리를 실제 애플리케이션 코드에 어떻게 적용할지 설명.3. 배경 및 맥락스프링과 책의 역사:2010년: "토비의 스프링" 초판 출간.2011년: "토비의 스프링 3.1" 출간.이후 스프링 4, 5를 거쳐 최신 버전 6.1까지 진화.개정판 미출간 이유:스프링의 핵심 원리는 변하지 않았음.기존 스타일이 여전히 유효하다고 판단.4. 최근 강의 준비의 이유기존 예제의 한계:기존 예제는 구식 스타일로, 현업과 다소 괴리 발생.최신 기술과 맞지 ..
스프링 부트 강의 요약 및 결론1. 스프링 부트의 정의와 목적정의:스프링 부트는 스프링 프레임워크의 확장 도구로, 다양한 기술 환경에서 스프링을 더 쉽게 활용할 수 있도록 지원하는 도구의 모음.목적:번거로운 작업 자동화(예: 서블릿 컨테이너 설정).자동 구성으로 개발 생산성을 극대화.베스트 프랙티스를 바탕으로 기본값 제공 및 설정 옵션 지원.2. 스프링 부트의 주요 기능자동 구성(Auto Configuration):다양한 인프라 빈을 기본값으로 자동 등록.필요 시 프로퍼티 설정 및 커스텀 빈 등록으로 확장 가능.스프링 프레임워크 기반:스프링 부트를 잘 활용하려면 스프링 프레임워크의 기본 개념(예: 빈, 의존성 주입, 생명주기 관리)을 숙지해야 함.구성 정보 작성 방식:XML을 지양하고 Java 기반 구성..
스프링 부트 JDBC 템플릿 자동 구성 분석스프링 부트 JDBC 템플릿 스타터는 데이터 소스와 관련된 자동 구성 요소를 통해 데이터베이스와 상호 작용하는 과정을 단순화합니다. 이번 분석에서는 JDBC 템플릿과 관련된 자동 구성 빈과 그 동작 방식을 살펴봅니다.1. JDBC 템플릿 스타터 추가 효과자동 구성 빈 증가:JDBC 스타터 추가 전: 기본 13개.JDBC 스타터 추가 후: 약 32개.약 19개의 자동 구성 빈이 추가됨.2. 주요 자동 구성 클래스1) PersistenceExceptionTranslationAutoConfiguration역할:데이터 접근 예외를 추상화하여 예외 번역 기능을 제공.조건:spring.dao.exceptionTranslation.enabled 프로퍼티가 true이거나 설정..
스프링 부트 웹 모듈의 자동 구성 분석스프링 부트의 웹 모듈(Spring Web)을 추가하면, 기본적인 웹 애플리케이션을 구현하기 위해 필요한 다양한 빈과 설정이 자동으로 구성됩니다. 이 과정에서는 웹 애플리케이션의 구성과 작동 방식에 필요한 주요 자동 구성 요소를 살펴봅니다.1. 자동 구성 추가로 인한 변화자동 구성 빈 개수 증가:웹 모듈 추가 전: 약 13개 (JMX 제외).웹 모듈 추가 후: 약 62개.약 50개의 자동 구성 빈이 추가됨.2. 주요 자동 구성 클래스1) HTTP 메시지 컨버터 (HttpMessageConvertersAutoConfiguration)역할:JSON, XML, Text 등 다양한 형식의 데이터를 HTTP 요청과 응답의 본문으로 변환.주요 컨버터:StringHttpMessa..
스프링 부트 코어 자동 구성 분석스프링 부트의 코어 자동 구성은 다양한 애플리케이션의 기본 동작을 지원하며, 기본적으로 설정된 값과 조건에 따라 빈이 등록됩니다. 이번에는 스프링 부트 코어 모듈의 주요 자동 구성 항목을 살펴보겠습니다.1. AOP Auto Configuration조건: spring.aop.auto 프로퍼티가 true이거나 설정되지 않았을 때(matchIfMissing=true).동작 원리:AOP 관련 빈을 등록하여 스프링의 AOP 기능을 활성화합니다.AspectJ 라이브러리가 없을 경우 클래스 기반의 프록시 방식으로 기본 설정.특징:matchIfMissing으로 인해 기본적으로 활성화.spring.aop.auto=false를 설정하여 비활성화 가능.빈 등록 결과:AOP 관련 빈 팩토리 포..
스프링 부트 자동 구성 활용 방법스프링 부트의 자동 구성은 개발자가 최소한의 설정만으로 애플리케이션을 빠르게 구성하고 실행할 수 있도록 돕는 핵심적인 기능입니다. 이 과정에서 자동으로 생성되는 빈과 설정이 무엇인지 확인하고, 이를 효과적으로 활용하는 방법을 소개합니다.1. 자동 구성 상태 확인1.1 로그 기반 확인디버그 옵션 활성화: JVM 아규먼트에 -Ddebug를 추가하거나, 스프링 부트 설정 파일(application.properties)에 debug=true를 추가하면, 자동 구성과 관련된 상세 로그를 확인할 수 있습니다.매칭된 자동 구성 클래스와 조건을 통과하지 못한 이유까지 보여줍니다.로그 해석:Condition Evaluation Report: 자동 구성 조건을 평가한 결과를 보여줍니다.Po..
스프링 부트 자동 구성 확인 및 활용 방법스프링 부트는 자동 구성 기능을 통해 개발자가 최소한의 설정으로 필요한 빈을 사용할 수 있도록 도와줍니다. 이번 강의에서는 자동 구성의 적용 상태 확인과 활용 전략을 다루며, 이를 통해 개발자가 스프링 부트를 효과적으로 탐구하고 사용할 수 있도록 돕습니다.1. 자동 구성 상태 확인(1) 로그를 통해 확인하기스프링 부트 실행 시 JVM 또는 프로그램 아규먼트로 debug 옵션 추가:JVM 아규먼트: -Ddebug프로그램 아규먼트: --debug로그에 자동 구성 후보와 선택된 구성, 제외된 구성의 이유를 출력.등록된 빈: 조건을 만족한 이유 제공.제외된 빈: 클래스가 없거나 프로퍼티 설정이 없어서 제외된 이유 표시.한계점: 출력되는 정보가 방대해 이해와 분석이 어려울..
요약 및 핵심 개념이 강의는 스프링 부트를 제대로 활용하기 위해 자동 구성과 관련된 동작 원리를 이해하는 과정을 다룹니다. 스프링 부트의 자동 구성 빈, 기술 선택, 설정 방식을 탐구하며, 개발자가 어떻게 이 기능을 활용하고 확장할 수 있는지에 대해 논의합니다.핵심 내용1. 스프링 부트를 시작하는 첫 단계: 기술 선택기술 스택 결정:사용할 언어: Java 또는 Kotlin.웹 기술: Servlet 기반 vs. Reactive 기반.데이터 액세스 방식: SQL 또는 NoSQL.보안, 캐싱, 클라우드 통합 등도 고려.관련 선택지들이 수십 가지에 달함.Spring Initializer:Spring Initializer를 사용해 프로젝트 템플릿 생성.Gradle 또는 Maven 설정 파일(build.gradle..
요약 및 핵심 개념이 문서는 직접 작성했던 스프링 부트 코드와 스프링 부트의 자동 구성 기능이 실제로 동일하게 동작하는지 검증하는 과정을 설명합니다. 또한, 스프링 부트의 테스트 프레임워크를 활용해 자동 구성 및 테스트 코드를 간소화하고, 자동 구성의 원리를 이해하는 데 중점을 둡니다.핵심 내용1. 직접 작성한 코드와 스프링 부트 자동 구성 비교자동 구성 코드 삭제:이전에 작성한 모든 수동 구성 코드(데이터 소스, JDBC 템플릿, 서블릿 컨테이너 등)를 삭제.스프링 부트의 기본 자동 구성을 통해 동일한 기능을 구현 가능 여부 확인.스프링 부트의 동작 방식 확인:@SpringBootApplication에 포함된 @EnableAutoConfiguration 및 @ComponentScan 애노테이션을 통해 ..
요약 및 핵심 개념이 문서는 이전에 작성한 Hello Repository를 활용하여 Hello Service를 구현하고, 서비스 기능을 검증하는 테스트를 작성하는 과정을 다룹니다. 또한, 서비스 계층에서 API 레벨까지 확장하여 데이터베이스 액세스 기능과 자동 구성된 스프링 부트의 동작을 확인합니다.핵심 내용1. Hello Service 구현기능 추가:HelloRepository를 주입받아 인사를 기록하는 기능(increaseCount)을 추가.관리자가 이름별로 몇 번 인사했는지 확인할 수 있도록 설계.의존성 주입:HelloRepository를 생성자를 통해 주입.서비스 클래스가 리포지토리에 의존하는 구조를 설계.2. 테스트 설계 및 개선단위 테스트:단순한 단위 테스트로 HelloService의 기본 동..
요약 및 핵심 개념이 문서는 JDBC 템플릿을 이용해 Hello 데이터를 액세스 및 관리하는 Repository를 설계하고, 이를 구현 및 테스트하는 과정을 다룹니다. 또한 인터페이스의 디폴트 메소드를 활용하여 재사용 가능한 로직을 설계하고, 테스트를 통해 동작을 검증합니다.핵심 내용1. Repository 설계 및 구현Repository 개념:데이터 액세스 계층을 담당하며, 테이블 정보를 조회, 삽입, 업데이트 등의 작업을 처리.HelloRepository라는 인터페이스 설계, JDBC 템플릿 기반 구현체 작성.HelloRepository 인터페이스:findHello(String name): 이름으로 데이터를 검색.increaseCount(String name): 이름의 카운트를 1 증가.countOf..
요약 및 핵심 개념이 문서는 JDBC 템플릿과 JDBC 트랜잭션 매니저를 자동 구성하고, 테스트 환경에서 이를 활용하여 데이터베이스 작업을 수행하는 방법을 설명합니다. 특히, 트랜잭션 관리를 통해 테스트 간 데이터 간섭을 방지하고, 효율적인 DB 초기화와 SQL 실행 방식을 다룹니다.핵심 내용1. JDBC 템플릿 및 트랜잭션 매니저 자동 구성JDBC 템플릿:SQL 작업을 간소화하기 위한 스프링 제공 템플릿 클래스.데이터 소스(DataSource)를 기반으로 작동하며, 조건부 애노테이션을 활용해 등록.@ConditionalOnSingleCandidate를 사용하여 데이터 소스 빈이 하나만 존재할 경우만 템플릿 생성.JDBC 트랜잭션 매니저:트랜잭션의 시작과 종료를 관리하며, 선언적 트랜잭션(@Transac..
요약 및 핵심 개념스프링 부트 환경에서 DataSource 자동 구성 클래스를 설계 및 구현하는 과정을 다루었습니다. 특히 조건부 빈 등록, SimpleDriverDataSource와 HikariCP와 같은 데이터 소스의 활용, 외부 설정을 통한 프로퍼티 관리, 그리고 테스트 기반 데이터 소스 검증 방법을 설명했습니다.핵심 내용1. DataSourceConfig 클래스 설계자동 구성 클래스 정의:@MyAutoConfiguration 애노테이션을 통해 자동 구성 클래스 선언.조건부 애노테이션 @ConditionalMyOnClass를 사용하여 특정 클래스(JdbcOperations)가 로딩된 경우에만 빈 생성.2. SimpleDriverDataSource 빈 등록특징:스프링에서 제공하는 기본 데이터 소스 구..
요약 및 핵심 개념스프링 JDBC 기술을 활용하여 자동 구성 클래스를 설계하고 데이터 소스, JDBC 템플릿, 트랜잭션 매니저 등을 효과적으로 구성하는 방법을 다뤘습니다. 이 과정에서 JDBC 템플릿의 동작 원리, 조건부 애노테이션을 활용한 유연한 구성, 인메모리 데이터베이스(H2)를 이용한 간단한 테스트 환경 설정 방법을 포함합니다.핵심 내용1. 자동 구성 클래스 설계JDBC 기술 기반의 자동 구성을 위해 DataSourceConfig 클래스를 설계.특정 조건에서만 빈을 생성하기 위해 조건부 애노테이션(@Conditional)을 사용.스프링의 JdbcOperations 인터페이스를 기반으로 구성 확인 후 관련 빈 등록.2. DataSource 빈 구성SimpleDriverDataSource:기본 JDB..