Web Devloper HSRyuuu Blog

Web 개발부터 소프트웨어 엔지니어링 전반을 다룹니다.
#웹개발 #Java #Spring #DevOps #AI

- github: https://github.com/HSRyuuu
- contact: happyhsryu@gmail.com

Best

[ AI ] 클로드 스킬(Claude Skills, Agent Skill) 사용 방법, 커스텀해서 에이전트 만들기
·
AI
Agent Skills란?Agent Skills는 Claude의 기능을 확장하는 모듈입니다. 각 Skill은 지시사항, 메타데이터를 포함하고, 선택적으로 스크립트나 템플릿 같은 리소스를 패키징하여 Claude가 관련 작업을 수행할 때 자동으로 활용하게 할 수 있습니다.쉽게 말해, Skill은 새로운 claude 세션에게 줄 온보딩 가이드와 같습니다. 특정 도메인의 워크플로우, 컨텍스트, 베스트 프랙티스를 담아두면 Claude가 필요할 때 참조하여 도메인 전문가처럼 행동하게 됩니다.Skills를 사용하는 이유기존 프롬프트의 한계매번 대화할 때마다 같은 지침을 반복해서 입력하는 것은 비효율적입니다:Java 코드를 작성할 때는 Spring Boot 3.x 규칙을 따르고, Entity는 protected 기본 ..
Spring AI로 RAG 챗봇 만들기 – Ollama, pgvector 부터 API 까지
·
AI
시작하기 전에, 이 글은 개념 정리는 없는 실습 글입니다.RAG 및 AI 개념에 대해 정리한 글이 있으니, 참고하세요.[Spring AI] Spring Boot에 LLM을 도입하기 전 꼭 알아야 할 RAG 개념 정리 [Spring AI] Spring Boot에 LLM을 도입하기 전 꼭 알아야 할 RAG 개념 정리이 글은 AI, RAG에 대해 기술적으로 전혀 모르는 상황에서 인앱 AI를 도입하기 위한 기본 개념을 정리합니다. 이 개념을 이해한 후에, 아래 Spring AI 실습 글을 보시길 바랍니다.(이 글에서 Spring AI는innovation123.tistory.com 특정 도메인의 정보를 LLM이 읽어서 챗봇처럼 대답해 주기 위한 기본 흐름은 아래와 같다.특정 도메인을 임베딩 하여 vector DB..
카카오 로그인 API 사용 방법 - 2025 ver (Java, Spring)
·
Spring
이 글은 과거(2023년 10월) 작성했던 글을 현재(2025년 12월)을 기준으로 리뉴얼 한 글이다.과거와 비교했을 때 달라진 점은 크게 없고, kakao에서 마이그레이션을 잘 해줘서 문제없지만, 사소하게 달라진 점들이 있다.예를들면 당시에는 사용자 email, 연령 등의 정보를 쉽게 얻을 수 있었는데, 지금은 비즈니스앱인증을 받아야 되는 등... 이런것들이 바뀌었다.2023.10.14 - [Spring] - [Spring] 카카오 로그인 API 사용 방법kakao developershttps://developers.kakao.com/ Kakao Developers카카오 API를 활용하여 다양한 어플리케이션을 개발해 보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다..
[Algorithm/Java] DFS(깊이 우선 탐색)
·
자료구조 & 알고리즘
DFS(Depth-First Search) : 깊이 우선 탐색 그래프 완전 탐색 : 모든 노드를 방문하고자 할때, 이 방법을 선택한다. 그래프의 시작 노드에서 출발하여 탐색할 한 쪽 분기를 정해서 최대깊이까지 탐색을 마친 후, 다른쪽 분기로 이동하여 다시 탐색을 수행하는 알고리즘이다. 재귀함수 또는 Stack 자료구조를 이용한다. 재귀함수를 이용하므로 stack overflow에 유의해야 한다. 스택 오버플로우(stack overflow)는 지정한 스택 메모리 사이즈보다 더 많은 스택 메모리를 사용하게 되어 에러가 발생하는 상황을 일컫는다. 1. 시간복잡도 (노드 수: N, 에지 수 E) 인접 리스트 노드의 개수가 많고, 간선 수가 적을 때 유리하다. 인접 행렬 노드의 개수가 적고, 간선 수가 많을 때 ..
[Spring] @Transactional 전파수준 정리 - Propagation 예제코드로 테스트해보기
·
Spring
@Transactional 전파 수준이란?Spring에서는 @Transactional을 통해 트랜잭션을 선언적으로 쉽게 관리한다.대부분의 경우 기본 전파 수준인 REQUIRED만으로도 충분하지만, 하나의 서비스 메서드에서 또 다른 트랜잭션 메서드를 호출할 때, 전파 전략을 명확히 이해하고 설정하지 않으면 원치 않는 rollback 또는 commit이 발생할 수 있다. 트랜잭션 전파 수준은 “이미 존재하는 트랜잭션이 있는 상황에서 이 메서드를 새 트랜잭션으로 실행할 것인가, 아니면 기존 트랜잭션에 참여할 것인가”를 결정하는 설정하는 것이다. 트랜잭션 전파가 중요한 상황들주문 entity 저장 진행 중, 로그테이블에 기록해야 됨. -> 로그 저장 중 에러 발생한다고 비즈니스 로직을 롤백하면 안 됨서비스 내의..

최신글

20가지 프롬프트 엔지니어링 패턴 (feat. oh-my-claudecode)
·
AI
프롬프트 엔지니어링Prompt Engineering이란 다양한 목적에 따라 LLM을 효율적으로 사용할 수 있도록 프롬프트를 개선하고 최적화하는 기술이다. "Garbage In, Garbage Out (GIGO)"이 프롬프트에도 똑같이 적용된다. 쓰레기를 넣으면 쓰레기가 나온다. AI 모델은 마법을 부리는 게 아니라, 사용자 입력값을 바탕으로 확률적인 결과를 계산하는 기계에 가깝다. 따라서 명확한 입력값을 넣어줘야만 사용자가 원하는 결과를 반환한다. ⛔️ BAD example"자바로 유저리스트 필터링하고 정렬하는 코드 짜줘."-> 어떤 기준으로 필터링하고, 어떤 기준으로 정렬할지 알 수 없음. ✅ GOOD example"""주어진 객체 리스트를 필터링 하고, 정렬하는 Java 코드 작성- User 객체(..
[ AI ] 바이브 코딩/에이전틱 코딩 개발 방법론 - AI 모델간 planning 교차 검증
·
AI
효율적인 개발 프로세스를 고민하는 분들을 위해, Claude와 Gemini를 교차 활용하는 방식의 AI 에이전트 협업 워크플로우를 짧게 정리해 공유합니다. 단일 AI 모델에 의존하는 대신, 서로 다른 모델의 강점을 활용해 기획의 완성도를 높이는 것이 핵심입니다.사실 이런건 Codex가 잘한다고 하긴 하는데, 제가 OpenAI는 구독하고 있지 않아서 사용하지 않습니다.이 방법을 더 하드하게 하려면 Claude, Gemini, Codex, DeepSeek 등 여러개의 모델에게 각각 Planning 문서를 하나씩 쓰게하고, 고급 모델에게 최종 검토 및 취합을 맡기는 방법도 있습니다. 다만 토큰이 살살 녹는.. 단순히 제가 요즘 사용하는 방법을 공유합니다. Claude x Gemini: AI 하이브리드 개발 프..
[ Claude ] 클로드 코드 상세 세팅 알아보기
·
AI
AI Prompt Repohttps://github.com/HSRyuuu/AI-Practice-Archive GitHub - HSRyuuu/AI-Practice-Archive: AI 활용방안, 사례를 모아둔 repository 입니다.AI 활용방안, 사례를 모아둔 repository 입니다. Contribute to HSRyuuu/AI-Practice-Archive development by creating an account on GitHub.github.com .claudeClaude Code를 사용하다 보면 프로젝트 루트에 .claude 디렉터리가 생성되는 것을 볼 수있다.단순 설정파일이나 작업 공간으로 생각할 수 있지만, claude code를 단순 챗봇이 아니라 한명의 개발자로 사용할 수 있도록..
[ AI ] 클로드 스킬(Claude Skills, Agent Skill) 사용 방법, 커스텀해서 에이전트 만들기
·
AI
Agent Skills란?Agent Skills는 Claude의 기능을 확장하는 모듈입니다. 각 Skill은 지시사항, 메타데이터를 포함하고, 선택적으로 스크립트나 템플릿 같은 리소스를 패키징하여 Claude가 관련 작업을 수행할 때 자동으로 활용하게 할 수 있습니다.쉽게 말해, Skill은 새로운 claude 세션에게 줄 온보딩 가이드와 같습니다. 특정 도메인의 워크플로우, 컨텍스트, 베스트 프랙티스를 담아두면 Claude가 필요할 때 참조하여 도메인 전문가처럼 행동하게 됩니다.Skills를 사용하는 이유기존 프롬프트의 한계매번 대화할 때마다 같은 지침을 반복해서 입력하는 것은 비효율적입니다:Java 코드를 작성할 때는 Spring Boot 3.x 규칙을 따르고, Entity는 protected 기본 ..
Grafana k6 - 터미널에서 5분만에 도입하는 부하테스트
·
Infra & DevOps
이 글에서는 터미널에서 서버 성능 테스트를 아주 간편하게 할 수 있는 방안을 소개한다.작성자는 "k6 부하테스트"라는 단어를 처음 보고 나서 5분 내에 실제 부하테스트를 완료하고, 결과를 도출했다. Grafana k6k6는 Grafana Labs에서 운영하는 오픈소스 성능테스트 도구이다. 2017년에 처음 출시했고, 그라파나에서 지속적으로 업데이트 중인 프로젝트이다. 빠르게 적용해본 소감으로는 너무 쉽고 편하다. https://grafana.com/products/cloud/k6 Grafana Cloud k6 | Performance testing toolMinimum commit of $25,000 per year. Premium supportObservability ArchitectDeployment..

인기글

[ AI ] 클로드 스킬(Claude Skills, Agent Skill) 사용 방법, 커스텀해서 에이전트 만들기
·
AI
Agent Skills란?Agent Skills는 Claude의 기능을 확장하는 모듈입니다. 각 Skill은 지시사항, 메타데이터를 포함하고, 선택적으로 스크립트나 템플릿 같은 리소스를 패키징하여 Claude가 관련 작업을 수행할 때 자동으로 활용하게 할 수 있습니다.쉽게 말해, Skill은 새로운 claude 세션에게 줄 온보딩 가이드와 같습니다. 특정 도메인의 워크플로우, 컨텍스트, 베스트 프랙티스를 담아두면 Claude가 필요할 때 참조하여 도메인 전문가처럼 행동하게 됩니다.Skills를 사용하는 이유기존 프롬프트의 한계매번 대화할 때마다 같은 지침을 반복해서 입력하는 것은 비효율적입니다:Java 코드를 작성할 때는 Spring Boot 3.x 규칙을 따르고, Entity는 protected 기본 ..
[SonarQube] 오픈소스 정적분석 Tool 소나큐브 사용법
·
오픈소스 라이브러리
소나큐브란?소나큐브는 프로그래밍 언어에서 버그, 코드 스멜, 보안 취약점 등을 발견하기 위한 정적 코드 분석 툴이다. 설치 / 세팅1. 소나큐브 설치https://www.sonarsource.com/products/sonarqube/downloads/ Download | SonarQubeGet the latest LTS and version of SonarQube the leading product for Code Quality and Security from the official download page.www.sonarsource.com 2. 소나큐브 실행다운로드 파일 압축 풀기소나큐브 실행Window: /bin/windows-x86-64/StartSonar.bat 실행Linux: /bin/linu..
카카오 로그인 API 사용 방법 - 2025 ver (Java, Spring)
·
Spring
이 글은 과거(2023년 10월) 작성했던 글을 현재(2025년 12월)을 기준으로 리뉴얼 한 글이다.과거와 비교했을 때 달라진 점은 크게 없고, kakao에서 마이그레이션을 잘 해줘서 문제없지만, 사소하게 달라진 점들이 있다.예를들면 당시에는 사용자 email, 연령 등의 정보를 쉽게 얻을 수 있었는데, 지금은 비즈니스앱인증을 받아야 되는 등... 이런것들이 바뀌었다.2023.10.14 - [Spring] - [Spring] 카카오 로그인 API 사용 방법kakao developershttps://developers.kakao.com/ Kakao Developers카카오 API를 활용하여 다양한 어플리케이션을 개발해 보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다..
[Java] JAVA_HOME 자바 환경변수 설정
·
Java
Java 프로젝트를 컴파일하려면 jdk가 필요하다.컴퓨터가 java를 컴파일 하기 위한 javac를 찾을 수 있도록 환경변수를 설정해서 jdk의 위치를 지정해줘야 한다.컴퓨터한테 jdk 위치를 알려주는 과정..간단하지만 알아두면 앞으로 자주 쓸 것 같아서 기록해 둔다.이 글은 2024년 10월 14일, Windows 11 버전을 사용하는 환경에서 작성했다.0. jdk 설치우선 jdk를 설치해야 한다.여기선 C:\dev_files\jdk\openjdk-1.8에 위치한다는 것을 가정하고 설명한다.1. 시스템 환경변수 검색해서 "시스템 환경변수 편집"으로 들어가도 되고,제어판 - 시스템 - 고급 시스템 설정(시스템 속성) - 환경변수로 들어가도 된다.2-1. 시스템 변수 설정중요한 것은 jdk 위치이다.그런데..
Spring AI로 RAG 챗봇 만들기 – Ollama, pgvector 부터 API 까지
·
AI
시작하기 전에, 이 글은 개념 정리는 없는 실습 글입니다.RAG 및 AI 개념에 대해 정리한 글이 있으니, 참고하세요.[Spring AI] Spring Boot에 LLM을 도입하기 전 꼭 알아야 할 RAG 개념 정리 [Spring AI] Spring Boot에 LLM을 도입하기 전 꼭 알아야 할 RAG 개념 정리이 글은 AI, RAG에 대해 기술적으로 전혀 모르는 상황에서 인앱 AI를 도입하기 위한 기본 개념을 정리합니다. 이 개념을 이해한 후에, 아래 Spring AI 실습 글을 보시길 바랍니다.(이 글에서 Spring AI는innovation123.tistory.com 특정 도메인의 정보를 LLM이 읽어서 챗봇처럼 대답해 주기 위한 기본 흐름은 아래와 같다.특정 도메인을 임베딩 하여 vector DB..
[Network] 방화벽 - 인바운드 & 아웃바운드 규칙이란?
·
Web & Network
방화벽이란?방화벽(Firewall)은 네트워크 보안 시스템이다. 미리 정의된 보안 규칙에 따라 들어오고 나가는 네트워크 트래픽을 모니터링하고 제어하는 장치 또는 소프트웨어이다. 불법 접근, 악의적 접근, 트래픽 낭비 등을 방지하기 위해 사용된다. 방화벽은 트래픽 필터링, 네트워크 세분화, 감시 및 로깅, 인증, 프라이버시 보호 등의 여러 가지 기능을 한다.이중 인바운드 규칙, 아웃바운드 규칙은 트래픽 필터링 기능에 포함된다. 트래픽 필터링(접근 제어)트래픽 필터링이란 방화벽이 네트워크를 통해 주고받는 데이터 패킷을 검사하고 제어하는 것을 말한다.방화벽이 허용한 트래픽만 네트워크로 들어오거나 나갈 수 있도록 한다.트래픽 필터링 방식 중 패킷 필터링 방식은 데이터 패킷의 헤더 정보를 분석하여 트래픽을 허용/..
[Spring] 카카오 로그인 API 사용 방법
·
Spring
주의사항이 글은 2023년 10월에 작성된 글입니다.변경사항들이 조금 있어서, 새롭게 정리했습니다.아래 글을 참고하세요.카카오 로그인 API 사용 방법 - 2025 리뉴얼 ver (Java, Spring) 카카오 로그인 API 사용 방법 - 2025 리뉴얼 ver (Java, Spring)이 글은 과거(2023년 10월) 작성했던 글을 현재(2025년 12월)을 기준으로 리뉴얼 한 글이다.과거와 비교했을 때 달라진 점은 크게 없고, kakao에서 마이그레이션을 잘 해줘서 문제없지만, 사소하게 달innovation123.tistory.com Kakao Developers이미지 설명에 각 이미지 내용에 대한 위치(경로) 적어뒀으니 참고해 주세요. 1. KakaoDevelopers 접속https://deve..
[Spring Boot] @PathVariable과 @RequestParam - 파라미터 받기
·
Spring
@PathVariable 경로변수 PathVariable을 사용하면 리소스 경로에 식별자를 넣어서 동적으로 URL에 정보를 담을 수 있다. URL 경로의 중괄호 { } 안쪽에 변수를 담고, 그 변수를 @PathVariable(" ")로 받아서 사용할 수 있다. 1. 기본 URL의{postId}와 매개변수 long orderId와 이름을 맞춰준다. @GetMapping ("/order/{orderId}") public String getOrder(@PathVariable String orderId){ log.info("orderId : {}", orderId); return "orderId:"+ orderId; } 요청 : http://localhost:8080/order/123 응답 : orderId:1..