분류 전체보기 57

랜덤포레스트 쉽게 이해하기: 여러 나무가 함께 내리는 똑똑한 결정

머신러닝을 공부하다 보면 랜덤포레스트(Random Forest)라는 말을 자주 듣게 됩니다.이름만 보면 조금 어렵게 느껴집니다.“랜덤은 무작위라는 뜻이고, 포레스트는 숲이라는 뜻인데, 머신러닝에서 숲이 왜 나올까?”처음에는 이렇게 느낄 수 있습니다.하지만 랜덤포레스트의 핵심 개념은 생각보다 쉽습니다.간단히 말하면 랜덤포레스트는 여러 개의 결정트리가 함께 의견을 내고, 그 의견을 모아서 최종 결정을 내리는 머신러닝 방법입니다.초등학생도 이해할 수 있게 비유하면 이렇습니다.한 명의 친구에게만 물어보는 것이 아니라, 여러 친구에게 물어본 뒤 다수결로 결정하는 방법입니다.한 명이 판단하면 틀릴 수 있습니다.하지만 여러 명이 각자 생각하고, 그 결과를 모으면 더 안정적인 답을 낼 수 있습니다.랜덤포레스트도 똑같습..

AI/머신러닝 2026.04.28

숫자의 함정에서 벗어나는 법: 스케일링(Scaling)과 로그(Log) 변환

데이터 분석이나 머신러닝 공부를 시작하면 가장 먼저 마주치는 벽이 있습니다. 바로 "데이터 전처리"죠. 그중에서도 "왜 멀쩡한 숫자에 로그를 취하나요?", "스케일링은 왜 꼭 해야 하나요?"라는 질문에 대한 답을 오늘 완벽하게 정리해 보겠습니다.1. 로그(Log) 변환: "폭발적인 숫자를 잠재우는 마법"머신러닝 모델은 '숫자의 크기'에 굉장히 민감합니다. 하지만 우리가 사는 세상의 데이터는 그리 고르지 않습니다.🏠 집값 데이터의 예시대부분의 집은 3억~10억 사이에 몰려 있지만, 가끔 100억이 넘는 초고가 펜트하우스가 등장합니다. 이를 데이터 시각화해보면 왼쪽으로 치우치고 오른쪽 꼬리가 아주 긴(Right-Skewed) 모양이 됩니다.로그를 왜 취하나요?데이터의 격차 해소: 로그는 큰 숫자를 작게 만..

AI/머신러닝 2026.04.28

Nginx로 HTTPS(SSL) 구축하기 (Reverse Proxy + Let’s Encrypt)

예전에는 HTTPS를 붙인다고 하면 꽤 부담스러운 작업처럼 느껴졌다.인증서 발급, CSR 생성, 인증서 파일 적용, 웹서버 설정, 갱신 관리까지 손이 많이 갔고, 작은 서비스 하나 올리는데도 진입장벽이 있었다.그런데 Nginx + Let’s Encrypt + Certbot 조합으로 구성해보니 생각보다 훨씬 간단했다.특히 개인 서버나 소규모 서비스에서는 “도메인 연결 + Nginx reverse proxy + certbot 실행” 정도만으로도 HTTPS 서비스를 빠르게 올릴 수 있다.이번 글에서는 Nginx를 이용해 SSL(HTTPS)을 붙이는 전체 흐름을 실제 적용 순서대로 정리한다.1. 구성 목표이번에 목표로 한 형태는 다음과 같다.도메인: example.com (본인 도메인으로 변경)웹서버: ngin..

WEB_WAS/Nginx 2026.03.20

클라우드 없이 로컬 LLM 환경 구축하기 (Ubuntu + Ollama + Open WebUI, GTX 1080 테스트)

로컬 LLM을 서비스나 개인 프로젝트에 붙이려면 결국 비용 문제가 따라옵니다. 처음에는 “API로 일단 써보자”로 시작하지만, 프롬프트를 조금만 바꾸고 결과를 비교하는 과정을 반복하면 호출량이 금방 쌓입니다.이번에는 방향을 바꿔 클라우드 없이 Ubuntu 서버에 로컬 LLM 환경을 직접 구성해봤습니다. 특히 집에 남는 **GTX 1080 장비를 재활용해서 ‘가볍게 테스트’**해보는 게 목적이었습니다. 목표Ubuntu에 Ollama 설치모델 1개 다운로드 후 실행Open WebUI까지 붙여 브라우저에서 테스트GTX 1080 환경에서 “쓸 만한지” 가볍게 확인왜 로컬 LLM을 써보려고 했나로컬 LLM을 보게 된 이유는 단순히 비용 통제 때문입니다.제가 테스트하려는 방향은 자유 채팅형 서비스라기보다, 정해진 ..

AI 2026.03.19

Jenkins 기반 CI/CD 1차 검증 정리 (정적 웹 + Docker 배포)

들어가며배포서버를 Jenkins 기반 CI/CD 전용 서버로 활용하기 위한 1차 검증 내용을 정리했습니다.목표는 정적 웹 샘플 프로젝트를 기준으로, 아래의 End-to-End 흐름이 실제로 한 번 끝까지 정상 동작하는지 확인하는 것입니다.브랜치 작업 → Git pushJenkins Pipeline 실행Docker 이미지 빌드이미지 tar 산출물 생성개발서버 전송개발서버에서 이미지 로드 및 컨테이너 기동개발서버 내부에서 curl로 응답 확인검증 범위포함Jenkins 설치 및 기동 확인Jenkins 실행 Java 21 적용Git 설치 및 저장소 연동개발서버 배포 계정 생성 및 SSH 키 기반 접속 구성Pipeline 기반 checkoutDocker 이미지 빌드이미지 tar 생성개발서버 전송(SCP)개발서버에..

젠킨스 환경 구축 가이드

도커 컨테이너를 사용하지 않고 서버에 젠킨스 설치 과정으로 진행 했다.실제 설치 과정을 참고 하고 싶은 분들에게 권장합니다. 기준 환경작성일: 2026-03-12OS: Rocky Linux 8.0패키지 매니저: dnf1) 관리자 실계정 생성ci/cd 관리 계정을 생성한다. root가 아닌 sudo 권한으로 진행 하기 위해 생성 했다.sudo useradd -m -s /bin/bash devopssudo passwd devopssudo usermod -aG wheel devopsid devops2) Java 설치 (OpenJDK 21)sudo dnf install -y java-21-openjdk java-21-openjdk-develjava -version3) Jenkins 공식 저장소 등록sudo r..

하이퍼렛저 패브릭

1. 하이퍼렛저 패브릭이란?하이퍼렛저 패브릭은 기업/기관 간 거래를 신뢰성 있게 기록하고 검증하기 위한 허가형 블록체인 플랫폼이다.아무나 참여하는 공개 블록체인이 아니라 허가받은 회사/기관만 참여 거래내역을 여러 참여자가 함께 검증하고 공유 위변조가 어렵고, 거래 이력을 투명하게 남길 수 있는 구조2. 핵심 구성 요소2.1 원장(Ledger)원장은 블록체인에서 거래내역이 저장되는 장부다.패브릭의 원장은 크게 두 부분으로 생각하면 쉽다.Blockchain거래가 블록 단위로 차곡차곡 쌓이는 영역과거 이력이 계속 남음변경 이력 추적 가능World State현재 시점의 최종 상태를 따로 저장한 영역예: 현재 주문 상태가 APPROVED 인지 SETTLED 인지 바로 조회 가능2.2 블록(Block)블록은 여러 ..

블록체인 2026.03.09

Java GC(Garbage Collection) 기초 개념 정리

Java에서의 메모리 관리는 자동으로 이루어지며, 그 중심에는 Garbage Collector(GC)가 있습니다. 이번 글에서는 GC의 기본 원리와 각 영역의 역할, 그리고 객체가 살아가는 흐름에 대해 정리합니다. 1. GC란 무엇인가?GC(Garbage Collection)는 프로그램 실행 중 더 이상 사용되지 않는 객체를 자동으로 메모리에서 제거하여, 메모리를 효율적으로 관리하는 JVM의 기능입니다. Java에서는 개발자가 명시적으로 메모리를 해제하지 않아도 GC가 이를 대신해줍니다. 2. JVM 메모리 구조와 GC 관련 영역JVM의 힙(Heap)은 다음과 같이 나뉩니다:Young GenerationEden 영역: 새로 생성된 객체들이 저장됨Survivor 영역(S0, S1): Eden에서 살아남은 ..

Docker "Failed to start docker.service: Unit docker.service not found" 오류

Docker가 snap 기반으로 설치 되어 서비스가 정상 기동이 되지 않을 경우 해결 방법 1. docker가 Snap인지 확인 #which docker /snap/bin/docker로 나오면 Snap 기반 2. Snap으로 설치된 Docker 제거sudo snap remove docker 3. Snap 대신 Docker 공식 설치로 전환- Docker 공식 리포지터리를 통한 설치 (Ubuntu 24.04 기준)sudo apt updatesudo apt install -y ca-certificates curl gnupgsudo install -m 0755 -d /etc/apt/keyringscurl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ su..

자바 클래스 로더와 WAS에서의 로딩 우선순위 — 충돌 없이 이해하기

클래스 충돌, 왜 발생할까요?Java 웹 애플리케이션을 개발하다 보면"이 클래스 왜 안 불러와지지?", "같은 이름인데 충돌이 나네?"이런 현상을 자주 겪게 됩니다.특히 WAS(Web Application Server)를 사용하는 경우, Java SE와는 다른 클래스 로딩 구조를 가지고 있어서충돌이나 예외가 발생하는 원인을 이해하지 못하면 디버깅에 큰 어려움을 겪습니다.이 글에서는 다음 내용을 중심으로 개념을 정리해 봅니다.Java 클래스 로딩 순서와 부모 위임 모델시스템 클래스 오버라이드 가능 여부WAS에서 클래스 우선순위가 달라지는 이유같은 클래스가 classes, JAR, WAS 모듈에 있을 때 어떤 게 로딩될까?Java의 기본 클래스 로딩 구조Java는 기본적으로 부모 위임 모델 (Parent D..