전체 글
[SpringBoot] SpringBoot + OpenAI 연동하기
[SpringBoot] SpringBoot + OpenAI 연동하기
2025.07.20AI 기술이 빠르게 발전하면서, 자연어 처리 기능을 서비스에 쉽게 적용할 수 있는 환경이 마련되고 있습니다.그 중심에는 OpenAI의 GPT 모델이 자리하고 있으며, 텍스트 생성, 요약, 코드 분석 등 다양한 기능을 REST API 형태로 제공하여, SpringBoot와 같은 백엔드 프레임워크에서도 유연하게 연동할 수 있습니다.사용자의 질문에 자동으로 답변하는 챗봇, 고객 피드백 자동 요약, 코드 리뷰 보조 기능 등을 SpringBoot 백엔드에 OpenAI API를 연결해 간단히 구현할 수 있습니다.이번 포스팅에서는 SpringBoot + Java 환경에서 OpenAI의 GPT API를 연동하는 방법에 대해 알아보도록 하겠습니다. 1. OpenAI 모델OpenAI에서는 다양한 목적에 맞는 AI 모델을 ..
[Java] 크롤링, Jsoup과 Selenium 중 어떤 도구를 선택해야할까?
[Java] 크롤링, Jsoup과 Selenium 중 어떤 도구를 선택해야할까?
2025.07.15웹 크롤링은 인터넷에 흩어진 정보를 자동으로 수집하고 분석하는 데 매우 유용한 기술입니다. 가격 비교, 뉴스 수집, 데이터 정제, 트렌드 분석 등 다양한 분야에서 활용되며, 반복적인 수작업을 자동화할 수 있다는 장점이 있습니다.Java 환경에서 웹 크롤링을 구현할 때 가장 많이 사용되는 Jsoup과 Selenium 두 가지 도구가 존재합니다. 이 두 도구는 목적과 특성에 따라 분명한 차이를 가지고 있어, 상황에 맞는 선택이 중요합니다.이번 포스팅에서는 Jsoup, Selenium의 특징, 실제 크롤링을 수행하는 예제를 통해 어떤 방식으로 동작하는지, 각 도구의 차이점에 대해 알아보도록 하겠습니다. SSR과 CSR의 개념Jsoup과 Selenium의 차이를 이해하기에 앞서, 웹 사이트가 데이터를 사용자에게..
[DB] 데이터베이스 정규화(Normalization)
[DB] 데이터베이스 정규화(Normalization)
2025.06.05데이터베이스를 설계할 때 가장 중요한 작업 중 하나는 `정규화(Normalization)`입니다. 정규화는 데이터의 중복을 제거하고, 데이터 무결성을 높이며, 유지보수를 용이하게 만드는 구조를 만들 수 있습니다.이번 포스팅에서는 제1정규화부터 제3정규화까지의 과정을 단계별로 알아보도록 하겠습니다. 정규화(Normalization)란?`정규화(Normalization)`는 관계형 데이터베이스에서 데이터의 중복을 줄이고, 데이터 일관성과 무결성을 보장하기 위해 테이블을 논리적으로 분해하는 작업입니다.정규화를 적용하지 않으면 데이터 삽입, 수정, 삭제 시 다음과 같은 다양한 `이상현상(Anomalies)`이 발생할 수 있습니다.동일한 정보가 여러 곳에 저장되어 불일치 발생일부 데이터를 입력하려면 불필요한 다른..
[SpringBoot] AWS S3 상품 이미지 등록과 고아객체 처리 구현 예제
[SpringBoot] AWS S3 상품 이미지 등록과 고아객체 처리 구현 예제
2025.05.06상품 이미지 업로드 기능을 개발할 때는 단순히 파일을 저장하는 것에서 끝나지 않습니다. 저장소 선택, 업로드 방식, 그리고 사용되지 않는 리소스`(고아객체)`의 정리까지 종합적으로 고려해야 합니다. 특히 AWS S3와 같은 외부 스토리지를 사용하는 경우, 고아 객체를 방치하면 스토리지 비용은 물론, 전체 시스템의 관리 복잡도까지 높아질 수 있습니다.이번 포스팅에서는 고아 객체란 무엇인지, 상품 등록 과정에서 발생할 수 있는 고아 객체를 어떻게 처리할 수 있는지 A부터 Z까지 상세하게 알아보도록 하겠습니다. 1. 고아 객체(Orphan Object)란?`고아 객체(Orphan Object)`란, 더 이상 애플리케이션에서 참조하지 않지만 스토리지에는 여전히 남아있는 데이터를 의미합니다. 다음과 같은 상황으로..
[Architecture] 멀티모듈(Multi-Module)이란?
[Architecture] 멀티모듈(Multi-Module)이란?
2025.03.23소프트웨어 개발이 복잡해지며, 하나의 거대한 코드베이스로 애플리케이션을 관리하는 모놀리식(monolithic) 구조는 초반 개발 속도는 빠르지만 규모가 커지며 배포, 유지보수, 협업 과정에서 병목 현상이 발생해 개발 생산성이 저하됩니다. 또한, 코드의 변경이 전체 시스템에 영향을 미치며 유지보수 비용이 증가하는 등의 여러 한계를 가지고 있습니다.이러한 문제를 해결하기 위한 방법 중 하나가 멀티모듈(Multi-Module) 구조입니다. 멀티모듈은 하나의 프로젝트를 여러 개의 모듈로 나누어, 각 모듈이 독립적으로 개발되고 유지보수될 수 있도록 합니다.이번 포스팅에서는 멀티모듈이란 무엇인지, 개념과 모듈을 나누는 기준, 멀티모듈 설계 시 주의할 점에 대해 알아보도록 하겠습니다. 멀티모듈(Multi-Module..
[Java] Stream이란? 사용하는 이유와 활용 방법
[Java] Stream이란? 사용하는 이유와 활용 방법
2025.03.04Java에서는 배열, 컬렉션, 리스트 등을 사용해 많은 데이터를 처리합니다.기존에는 반복문이나 반복자(iterator)를 사용해 데이터를 하나씩 꺼내 처리했지만, 이러한 방식은 코드가 길어지고 가독성이 떨어진다는 단점이 있습니다. 또한, 코드의 재사용성이 낮아 유지보수에도 어려움이 따릅니다.이러한 불편함을 줄이고 더욱 직관적이고 효율적으로 데이터를 처리할 수 있도록 도와주는 것이 Stream API입니다. Stream을 활용하면 더욱 간결하고 가독성 높은 코드로 데이터를 다룰 수 있습니다.이번 포스팅에서는 Java의 Stream이 무엇인지, 사용하는 이유와 활용 방법에 대해 알아보도록 하겠습니다. Java Stream이란?`Stream API는 JDK 8 부터 추가된 기능` 중 하나입니다. `컬렉션 데이..
[SpringBoot] Spring Docs + Swagger 적용하여 API 문서 자동화하기
[SpringBoot] Spring Docs + Swagger 적용하여 API 문서 자동화하기
2025.02.20API 문서화는 개발자들 간의 원활한 협업을 위한 필수 요소입니다. 명확한 문서가 없다면 API 사용법을 제대로 전달하기 어려워지고, 그로 인해 개발 과정에서 혼란이나 유지보수에 어려움을 겪을 수 있습니다.특히, API의 변경 사항이 있을 때마다 문서도 수동으로 업데이트 해야 한다면, 번거롭고 오류가 발생할 위험 또한 증가하게 됩니다. 이런 문제를 `Swagger`를 통해 해결할 수 있습니다.이번 포스팅에서는 Swagger란 무엇인지, 적용하는 방법, 사용되는 어노테이션에 대해 알아보겠습니다. Swagger란?`Swagger`는 웹 서비스 명세를 문서화 해주는 OpenAPI기반의 프레임워크로, 웹 서비스의 로직 수행, 요청 데이터, 응답 데이터가 무엇인지 정리해서 문서화를 자동화 해주는 기술입니다.웹 애..
[SpringBoot] Scale-out 환경에서 발생하는 Scheduler 중복 실행 문제 Shedlock으로 해결하기
[SpringBoot] Scale-out 환경에서 발생하는 Scheduler 중복 실행 문제 Shedlock으로 해결하기
2025.02.06스케줄러(Scheduler)를 사용해 정해진 시간에 반복 작업을 실행하고자 할 때, 다중 인스턴스 환경에서는 같은 작업이 여러 인스턴스에서 동시에 실행되는 상황이 발생하게 됩니다.이번 포스팅에서는 `ShedLock`의 개념과 라이브러리를 활용하여 여러 인스턴스에서 Scheduler 사용 시 발생하는 문제를 해결하는 방법에 대해 알아보도록 하겠습니다. 문제 상황Scheduler를 적용하면 지정한 일정 시간마다 실행하게 됩니다.그런데 만약 여러 인스턴스 서버(Scale-out)를 띄울 경우 각 서버마다 존재하는 Scheduler가 동작하게 될 것입니다. @Scheduled(zone = "Asia/Seoul", cron = "*/1 * * * * *") // 1초 간격으로 실행public void run() ..
[SpringBoot] 트랜잭션 전파 속성 (Transaction propagation)
[SpringBoot] 트랜잭션 전파 속성 (Transaction propagation)
2025.02.02애플리케이션을 개발할 때 데이터의 일관성을 유지하고 안정적인 동작을 보호하기 위해 트랜잭션 관리가 필수적입니다.트랜잭션은 데이터를 처리하는 동안 발생할 수 있는 오류나 시스템 장애에 대비해 작업을 `롤백(rollback)`하거나 `커밋(commit)`하는 중요한 역할을 합니다. `트랜잭션 전파(Transaction Propagation)`는 여러 개의 트랜잭션이 서로 어떻게 상호작용하고, 하나의 트랜잭션이 다른 트랜잭션에게 어떻게 영향을 미칠지 결정하는 중요한 개념입니다.이번 포스팅에서는 트랜잭션 전파에서 각 속성들의 개념과 동작과정에 대해 알아보도록 하겠습니다. 트랜잭션 전파 속성(Transaction Propagation)이란?Spring이 제공하는 선언적 트랜잭션(@Transactional)은 여러..
[MySQL] 트랜잭션의 격리 수준 (Transaction Isolation Level)
[MySQL] 트랜잭션의 격리 수준 (Transaction Isolation Level)
2025.01.28트랜잭션의 격리 수준 (Transaction Isolation Level)은 데이터베이스에서 동시에 실행되는 여러 트랜잭션 간의 상호작용을 제어하여 데이터의 일관성을 유지하고 충돌을 방지하는 데 중요한 역할을 합니다. SQL 표준에서 정의된 격리 수준은 트랜잭션 간의 격리 정도와 성능의 균형을 결정하며, 데이터베이스 설계 및 운영에 있어 핵심적인 요소입니다. 이번 포스팅에서는 트랜잭션의 격리 수준 `Read Uncommitted, Read Committed, Repeatable Read, Serializable`에 대한 특징과 동작 방식에 대해 알아보도록 하겠습니다. 트랜잭션의 격리 수준 (Transaction Isolation Level)트랜잭션의 격리 수준(Transaction Isolatio..
[DB] 트랜잭션이란?
[DB] 트랜잭션이란?
2025.01.24많은 애플리케이션과 서비스는 데이터를 효과적으로 저장하고 관리하기 위해 데이터베이스를 사용합니다. 사용자가 동시에 데이터를 처리하는 상황에서 데이터의 무결성과 일관성을 유지 문제를 해결하기 위해 트랜잭션이 사용됩니다.이번 포스팅에서는 트랜잭션의 개념과 특징, 동작원리에 대해 알아보도록 하겠습니다. 트랜잭션(Transaction)트랜잭션(Transaction)은 데이터베이스 관리 시스템(DBMS)에서 데이터를 처리하기 위해 사용되는 작업의 단위입니다.
데이터 처리로는 `INSERT, SELECT, UPDATE, DELETE`와 같은 쿼리를 통한 연산 수행을 의미합니다. 사전적 의미로는 `거래`를 뜻하며, 데이터베이스에서 트랜잭션은 하나의 거래를 안전하고 일관성 있게 처리하도록 보장해 주는 것이라고 할 수 ..
[SpringBoot] AWS S3 다중 이미지 파일 업로드 및 삭제 구현하기 (feat. MultipartFile)
[SpringBoot] AWS S3 다중 이미지 파일 업로드 및 삭제 구현하기 (feat. MultipartFile)
2025.01.17이미지와 같은 정적 파일을 효율적으로 관리하는 것은 웹 애플리케이션 개발에서 자주 마주하게 됩니다. 이때, 클라우드 기반 저장소인 `AWS S3 (Simple Storage Service)`는 높은 확정성과 안정성을 제공합니다. 이번 포스팅에서는 Java 기반 Spring Boot 환경에서 `MultipartFile`방식을 활용하여 다중으로 `AWS S3`에 이미지파일을 업로드하는 방법과 업로드된 이미지파일을 삭제하는 방법에 대해 알아보도록 하겠습니다. MultipartFile 업로드 방식 개념시작하기에 앞서 `MultipartFile 업로드 방식의 개념`에 대해 먼저 알아보도록 하겠습니다. `MultipartFile`은 Spring에서 제공하는 인터페이스로, 파일 업로드를 간편하게 처리할 수 있도록..