Spring Boot 설정 파일 로딩

Spring Boot의 설정 파일 로딩 메커니즘과 외부 라이브러리 사용 시 발생하는 문제를 다룹니다. ConfigData API (Spring Boot 2.4+) Spring Boot 2.4 부터 설정 로딩 방식이 ConfigData API로 변경되었습니다. 주요 변경사항 Spring Cloud Bootstrap Context 대체 (bootstrap.yml → application.yml) 단일 ApplicationContext 사용 spring.config.import 도입 설정 파일 로딩 기본 동작 검색 위치 Spring Boot는 다음 위치에서 설정 파일을 검색합니다 (낮은 → 높은 우선순위): 1. classpath:/application.yml 2. classpath:/config/application.yml 3. file:./application.yml 4. file:./config/application.yml 5. file:./config/*/application.yml 로딩 규칙 다른 경로: 모두 로드 후 병합 같은 classpath 경로: 첫 번째만 사용 Oracle Java 문서: 여러 모듈이 동일한 클래스 로더에 정의되고, 둘 이상의 모듈이 주어진 이름의 리소스를 포함하는 경우, 모듈이 검색되는 순서는 명시되지 않으며 매우 예측할 수 없을 수 있습니다. 우선순위 나중에 로드된 것이 우선: ...

2025년 11월 26일

Spring Boot 애플리케이션 웜업

Spring Boot 배포 직후 첫 요청이 느린 이유를 JVM 동작 원리부터 설명합니다. 컴파일러와 인터프리터 컴파일러 언어 (C/C++) 전체 코드를 한번에 기계어로 변환 실행 속도 빠름 플랫폼 종속적 인터프리터 언어 (Python) 코드를 한 줄씩 해석하며 실행 실행 속도 느림 플랫폼 독립적 자바 동작 방식 자바 1990년대 설계 철학 이식성: Write Once, Run Anywhere 안전성: 메모리 보호, 타입 검증 개발 생산성: 자동 메모리 관리 HelloWorld.java (소스코드) → javac (컴파일) → HelloWorld.class (바이트코드) → java (JVM) → 실행 단점 바이트코드 인터프리터 실행으로 성능이 느렸습니다. ...

2025년 11월 25일

LLM 개념 정리

LLM(Large Language Model)은 “다음 단어 예측"을 극한까지 잘하는 모델입니다. 이 단순한 원리로 대화, 요약, 번역, 코딩까지 가능합니다. 입력: "오늘 날씨가 정말" LLM: "좋네요" (가장 자연스러운 다음 단어 선택) LLM의 위치 AI 기술 계층도 AI └─ 머신러닝 ├─ 전통 머신러닝 └─ 딥러닝 └─ Transformer └─ LLM ← 여기 Multimodal 확장 최근에는 텍스트(LLM) + 이미지(Vision) + 음성(Audio)을 통합한 Multimodal AI(GPT-4V, Gemini)로 확장되고 있지만, 코어는 여전히 LLM입니다. LLM의 핵심 특징 Large (대규모 Parameter) 규모 10¹¹ ~ 10¹³ 개 ...

2025년 11월 13일

머신러닝 개념 정리

머신러닝의 학습 과정을 단계별로 정리하고, Feature와 Parameter의 차이를 설명합니다. 머신러닝 전체 프로세스 단계 전통 머신러닝 딥러닝 1. 원본 데이터 텍스트, 이미지, 표 등 텍스트, 이미지, 표 등 2. 분할 텍스트→토큰, 이미지→픽셀, 음성→프레임 텍스트→토큰, 이미지→픽셀, 음성→프레임 3. 벡터화 숫자로 변환 (ID, RGB, 정규화) 숫자로 변환 (ID, RGB, 정규화) 4. Feature 추출 사람이 설계 (고정)- 긍정단어 개수- 부정단어 개수- 느낌표 개수 - 5. 학습 초기화 랜덤 Parameter 랜덤 Parameter 6. 순전파 Feature × Parameter = 예측 벡터화된 입력 × Parameter→ Layer별 Feature 자동 생성→ 예측 7. 손실 계산 정답과 비교 정답과 비교 8. 역전파 Parameter 조정 Parameter 조정→ Feature 표현도 변화 9. 반복 68 반복 (수백만수억 회) 68 반복 (수백만수억 회) 10. 학습된 모델 고정 Feature + 학습된 Parameter 학습된 Parameter(Feature 표현 내장) 11. 추론: 전처리 분할 + 벡터화 분할 + 벡터화 12. 추론: Feature 같은 방식으로 Feature 추출 학습된 모델로 자동 생성 13. 추론: 예측 학습된 Parameter로 계산 학습된 Parameter로 계산 14. 예측 결과 출력 출력 핵심 용어 정리 데이터 (Data) 원본 정보 ...

2025년 11월 12일

AI 개념 정리

AI, 머신러닝, 딥러닝, LLM — 용어가 혼용되는데, 각각의 위치와 관계를 정리합니다. AI 영역 구분 AI 모델 개발 직접 머신러닝으로 모델 학습 추천, 예측 등 자체 모델 제작 시간/비용 많이 들고, 전문 인력 필요 AI 기능 통합 외부 LLM API 활용 (GPT, Claude) 서비스에 챗봇, 요약, 검색 등 추가 빠르고, 기존 개발자가 가능 AI 도구 사용 Claude Code, Copilot으로 개발 효율화 AI는 보조 도구 데이터 마이닝 ↔ AI 관계 데이터 마이닝 AI (패턴/인사이트 발견) (지능적 판단·행동) ╲ ╱ ╲ ╱ ╲ ╱ ╲ ╱ 머신러닝 설명 데이터 마이닝: “왜 이런 일이 일어나는가?” (패턴 발견) AI: “이 상황에서 뭘 해야 하는가?” (문제 해결) 머신러닝: AI의 한 분야이자, 데이터 마이닝에서 활용되는 핵심 도구 예시 데이터 마이닝: 고객 데이터 분석 → “금요일 저녁 맥주+치킨 많이 팔림” 발견 AI: 고객 접속 시 → “이 사람에게 맥주 추천” 자동 판단 AI의 기술 체계 AI의 목적 지능적 판단·계획·행동으로 문제 해결 예측은 그 중 한 수단일 뿐 AI (지능적으로 판단·계획·행동하여 문제 해결) ├─ 규칙 기반 AI (if-then 로직) ├─ 탐색/최적화 알고리즘 └─ 머신러닝 ← 요즘 AI의 핵심 (특히 딥러닝) ├─ 전통 머신러닝 (SVM, 랜덤포레스트 등) └─ 딥러닝 ├─ CNN (이미지 인식) ├─ RNN (시계열 처리) └─ Transformer (2017~) ├─ BERT (양방향 이해) └─ LLM (대규모 언어모델) ← 요즘 가장 주목받는 분야 └─ GPT, Claude, Gemini 머신러닝의 학습 방식 머신러닝 (데이터로 모델 학습) ├─ 지도 학습 (정답 있는 데이터로 학습) ├─ 비지도 학습 (정답 없이 패턴 찾기) └─ 강화 학습 (시행착오로 학습) 핵심 프로세스 학습 데이터 → [학습/Training] → 모델 입력 데이터 → [추론/Inference] → 결과 시대별 “AI"의 의미 1980년대: AI = 규칙 기반 한계에 부딪힘 (AI의 겨울) 2000년대: AI = 머신러닝 데이터 → 특징 → 학습 → 모델 → 추론 딥러닝 이론 존재, 컴퓨팅 파워 부족 2010년대: AI = 딥러닝 GPU 발달 2012 ImageNet: CNN으로 이미지 인식 돌파 2017 Transformer 등장 2020년대: AI ≈ LLM (대중 인식) ChatGPT, Claude 등의 폭발적 성장 핵심 용어 정리 AI (인공지능) 지능적으로 판단·계획·행동하여 문제 해결 요즘은 사실상 머신러닝 의미로 많이 씀 머신러닝 (기계학습) 데이터로 기계를 학습시킴 AI 구현에 성공한 방법 데이터 마이닝과 AI가 공유하는 핵심 도구 딥러닝 신경망을 깊게 쌓은 것 특징을 자동으로 학습 (사람이 특징 정의 불필요) GPU 발달로 2010년대 실용화 Transformer 2017년 등장한 딥러닝 아키텍처 병렬 처리가 가능해서 대규모 학습에 유리 LLM (Large Language Model) Transformer 기반 대규모 언어 모델 ChatGPT, Claude 등 AI 중 일부지만 최근 2-3년 폭발적 유행 데이터 마이닝 데이터에서 패턴/인사이트 찾기 머신러닝을 도구로 활용

2025년 11월 11일

MySQL vs Oracle: 커서(Cursor) 동작 방식 비교

TL;DR MySQL과 Oracle은 서버 커서 구현 방식이 근본적으로 다름 MySQL: 임시 테이블 생성하여 전체 결과 저장 Oracle: PGA 메모리에서 커서 상태만 유지하고 필요한 만큼 페치 “클라이언트 사이드 커서"는 MySQL에서 공식 용어가 아님 MySQL: 클라이언트 버퍼링, 스트리밍, 서버 커서 3가지 방식 제공 커서란 무엇인가 데이터베이스 커서는 쿼리 결과를 순차적으로 처리하기 위한 메커니즘입니다. 대용량 결과를 한 번에 메모리로 로드하지 않고, 필요한 만큼만 가져와서 처리할 수 있게 해줍니다. 데이터베이스에서는 결과를 처리하는 위치에 따라 서버 커서와 클라이언트 커서으로 구분할 수 있습니다. ...

2025년 11월 4일

바이브 코딩을 넘어서 - 기획 영역에서의 AI 활용

바이브 코딩을 기획 단계에 적용하면 문서 초안을 빠르게 뽑을 수 있습니다. 다만 비즈니스 맥락과 우선순위는 사람이 채워야 합니다. AI가 잘하는 기획 작업 문서 초안 작성, 구조화, 표준 포맷 적용에서 효과적입니다. 사용자 스토리, PRD 초안, 기능 명세서 같은 정형화된 산출물을 빠르게 만들 수 있습니다. "로그인 기능에 대한 사용자 스토리를 작성해줘. 이메일/비밀번호 방식과 소셜 로그인 지원" "결제 프로세스의 상세 플로우를 단계별로 정리. 각 단계의 필요 데이터와 예외 상황 포함" 반면 비즈니스 맥락은 이해하지 못합니다. 일반적인 요구사항은 작성할 수 있지만, 특정 도메인의 비즈니스 규칙이나 이해관계자 간 요구사항 조율은 할 수 없습니다. ...

2025년 10월 2일

바이브 코딩 심화편 - 실무 적용과 한계

단순한 작업에서는 바이브 코딩이 잘 먹힙니다. 다만 복잡한 비즈니스 로직이나 보안이 중요한 영역에서는 한계가 뚜렷합니다. 잘 먹히는 영역 프로토타이핑, 데이터 변환, 문서화, 단순 테스트 코드 작성 정도가 현실적으로 효과적인 범위입니다. "React로 사용자 관리 시스템을 만들어줘. 추가, 수정, 삭제 기능과 로컬 스토리지 연동 포함" "CSV 파일을 읽어서 이메일 주소만 추출하고 중복 제거 후 JSON 배열로 변환해줘" 명확한 입출력 구조를 가진 작업일수록 정확도가 높습니다. 주의해야 하는 영역 보안이 가장 큰 문제입니다. AI가 생성한 코드에는 SQL 인젝션, 인증 우회 같은 OWASP Top 10 취약점이 포함될 수 있습니다. 특히 입력 검증과 권한 관리에서 치명적 오류가 발생하기 쉽습니다. ...

2025년 9월 24일

바이브 코딩이란 무엇인가? - AI 시대의 새로운 프로그래밍 패러다임

바이브 코딩이란? 바이브 코딩(Vibe Coding)이란 자연어로 의도를 설명하면 AI가 코드를 만들어주는 방식입니다. 기존 프로그래밍이 정확한 문법과 구조를 요구했다면, 바이브 코딩은 어떻게 구현할 것인가보다 무엇을 하고 싶은가에 초점을 맞춥니다. 전통적인 방식 def calculate_average(numbers): if len(numbers) == 0: return 0 return sum(numbers) / len(numbers) 바이브 코딩 방식 (의도 중심) "숫자 리스트의 평균을 계산해줘, 빈 리스트면 0 반환" 완벽한 코드를 한 번에 작성하는 게 아니라, AI와 대화하면서 점진적으로 개선해 나갑니다. 단순히 코드 한 줄을 생성하는 것을 넘어서, 프로젝트 전체 맥락을 이해하고 일관성 있는 코드를 만들어내는 것이 핵심입니다. ...

2025년 9월 17일

springdoc-openapi @ApiResponse 어노테이션의 useReturnTypeSchema 속성

@ApiResponse 어노테이션의 useReturnTypeSchema 속성 컨트롤러 메서드의 반환 타입을 자동으로 추론하여 OpenAPI 스펙의 response schema 로 사용 @Operation(summary = "사용자 조회", responses = { @ApiResponse(responseCode = "200", description = "조회 성공", useReturnTypeSchema = true) })

2025년 6월 26일