[Spring AI] Spring AI란? 개념부터 전체 구조까지 이해하기
·
개발/Spring
최근 LLM을 활용한 애플리케이션이 빠르게 늘어나면서 기존 웹 서비스에서도 ChatGPT, Claude, Gemini 같은 AI 모델을 사용하는 경우가 많아지고 있다. 예를 들자면 다음과 같은 기능을 생각해볼 수 있다.AI 챗봇문서 기반 질의응답사내 데이터 검색코드 분석문서 요약AI Agent외부 API 자동 호출 Spring Boot 애플리케이션에서도 OpenAI API를 직접 호출하면 이러한 기능을 구현할 수 있다.구조만 보면 간단하다.Spring Application │ │ HTTP Request ▼ OpenAI API │ │ Response ▼ LLM 하지만 실제 서비스를 만들기 시작하면 단순히 HTTP ..
[Spring] Spring Boot JPA 동작 원리와 CRUD 정리
·
개발/Spring
Entity 매핑부터 영속성 컨텍스트, 연관관계와 트랜잭션까지Spring Boot로 데이터베이스를 다루기 시작하면 보통 JpaRepository를 상속하고 save(), findById() 같은 메서드를 먼저 사용하게 된다.코드는 매우 간단하다.public interface ProductRepository extends JpaRepository {}하지만 JPA를 제대로 사용하려면 단순히 Repository 메서드를 외우는 것보다 다음 질문에 답할 수 있어야 한다.JPA는 객체를 어떻게 데이터베이스 테이블과 연결할까?save()를 호출하면 SQL이 즉시 실행되는가?조회한 Entity의 값만 바꿨는데 왜 UPDATE가 실행될까?@Transactional은 어떤 원리로 Commit과 Rollba..
[SKALA] 컴포넌트 스캔과 Spring 컨테이너, HTTP 요청 바인딩 정리
·
개발/SKALA 4기
https://daniellee09.tistory.com/56 [SKALA] 4주차 학습 정리 ②: Spring Boot 설정 관리와 MVC·Actuator 정리Configuration, Profile부터 Spring MVC 요청 처리와 운영 모니터링까지이전 글에서는 객체지향 프로그래밍과 REST API, Spring Boot의 기본 구조, IoC와 의존성 주입을 정리했다.이번에는 Spring Boot 애플리케이daniellee09.tistory.com Bean 등록부터 Lombok과 입력값 검증까지이전 글에서는 Configuration과 Profile, Spring MVC의 요청 처리 구조, Controller–Service–Repository 계층, Actuator를 이용한 운영 모니터링까지 정리했다..
[Spring] MVC 패턴과 Spring MVC 동작 원리 정리
·
개발/Spring
Controller, Service, RepositorySpring Boot로 REST API를 만들다 보면 자연스럽게 다음과 같은 구조를 사용하게 된다.Controller→ Service→ Repository→ Database처음에는 단순히 “Spring에서는 이렇게 폴더를 나누는구나”라고 생각하기 쉽다.하지만 이 구조는 파일을 보기 좋게 정리하기 위한 규칙이 아니라, 각 객체의 책임을 분리하여 변경과 테스트에 유리한 프로그램을 만들기 위한 설계 방식이다. 이번 글에서는 MVC가 무엇인지부터 시작해 Spring MVC가 HTTP 요청을 처리하는 실제 과정, @Controller와 @RestController의 차이, 그리고 간단한 상품 조회 API 예제까지 정리해 본다.1. MVC 패턴이란?MVC는 애..
[SKALA] 객체지향(OOP)과 Spring Boot 핵심 정리
·
개발/SKALA 4기
객체지향 프로그래밍부터 REST API, Spring Boot의 IoC·DI까지이번 학습에서는 Spring Boot로 REST API를 구현하기 전에 필요한 백엔드 개발의 기본 개념을 살펴보았다.처음부터 Controller 코드를 작성하는 것이 아니라, Java 객체지향 프로그래밍과 SOLID 원칙을 먼저 학습한 뒤 REST API의 설계 방식, Spring과 Spring Boot의 특징, 개발 환경 구성, 마지막으로 IoC와 의존성 주입까지 이어지는 흐름이었다.객체지향 프로그래밍→ RESTful API 설계→ Spring과 Spring Boot→ 개발 환경 구성→ Spring 컨테이너와 IoC·DI위 다섯 가지 흐름으로 내용을 정리해보겠다.1. 객체지향 프로그래밍과 SOLID 원칙절차적 프로그래밍과 객..
[Java] JPA란?
·
개발/java
자바의 객체지향 패러다임을 유지하면서 관계형 데이터베이스(RDB)를 효율적으로 다루는 건 현대 백엔드 개발의 핵심이다. 하지만 매번 반복되는 SQL 작성과 객체-테이블 간의 구조적 차이는 개발의 효율성을 떨어뜨리는 주범이 되곤 한다. 이 글에서는 이러한 '패러다임의 불일치'를 해결하고, 데이터 중심이 아닌 객체 중심의 개발을 가능하게 하는 JPA(Java Persistence API)의 기초를 정리해 보겠다. 1. 정의JPA란 무엇인가요? JPA는 Java Persistence API의 약자로, 자바 진영의 ORM(Object-Relational Mapping) 기술 표준이다. 이름 그대로, 자바의 객체와 관계형 데이터베이스의 테이블을 중간에서 매핑(연결)해 주는 인터페이스의 모음이다. 우리가 직접 JD..
[Spring] DTO는 무엇일까?
·
개발/Spring
Spring으로 웹 애플리케이션, 특히 REST API를 개발하다 보면 DTO라는 용어를 반드시 마주치게 된다.처음에는 "Entity가 있는데 굳이 왜 사용하는 걸까?" 라는 의문이 들었지만, DTO가 깔끔하고 안전한 애플리케이션을 만드는 데 핵심적인 역할을 한다는 걸 알았다. 이 글에서는 DTO의 정확한 개념과 Spring에서 DTO를 사용하는 이유를 정리해 보겠다. 1. 정의DTO란 무엇인가요?DTO는 Data Transfer Object의 약자로, 우리말로는 '데이터 전송 객체' 이다.이름 그대로, 계층(Layer) 간 데이터 교환을 위해 사용하는 객체를 의미한다. 보통 클라이언트(브라우저, 앱)가 서버에 요청을 보낼 때 보내는 데이터를 담거나,서버가 클라이언트에게 응답을 보낼 때 돌려줄 데이터를 ..
[Java] 게시판 만들기 - 1
·
개발/java
프로젝트 설계 부분은 이전 게시글을 참고하자. [Java] 게시판 만들기 - 0백엔드 공부용으로 CRUD 기능을 갖는 아주 간단한 게시판을 만들어보고자 한다. 본격적인 개발에 앞서 기본적인 서비스의 요구사항부터 정의해보자. 1. 요구사항로그인은 생략(나중에 추가) 메인daniellee09.tistory.com 설계해둔 Class Diagram을 참고하여 Bottom-up 방식으로 개발을 진행하고자 한다. 그 이유는 다음과 같다.의존성 방향: 상위 계층이 하위 계층에 의존하므로 하위부터 구현테스트 용이성: 각 계층 완성 후 즉시 테스트 가능안정성: 기반이 되는 부분부터 견고하게 구축가장 먼저 프로젝트의 초기 설정부터 진행해보자. 1. 초기 설정우선 Spring Initializer를 통해 프로젝트를 생성한..
[Java] 게시판 만들기 - 0
·
개발/java
백엔드 공부용으로 CRUD 기능을 갖는 아주 간단한 게시판을 만들어보고자 한다. 본격적인 개발에 앞서 기본적인 서비스의 요구사항부터 정의해보자. 1. 요구사항로그인은 생략(나중에 추가) 메인 화면에서 게시글 바로 확인 가능 (최대 5개까지) "글 목록" 에서 글 번호, 제목, 내용(미리보기), 작성일시, 작업(수정, 삭제) 확인 가능글들은 최신순 정렬"게시글 상세" 에서는 글 번호, 제목, 내용, 작성일시 확인 및 수정, 삭제 가능게시글 작성할 때 제목 또는 내용 미입력 시 글 생성 불가 간단하게 이 정도로 요구사항을 정하고 추후 로그인 기능까지 업데이트 해보고자 한다. 이제 위 요구사항이 반영된 Use Case Diagram을 만들어서 사용자 관점에서 시스템이 어떻게 작동하는지 확인해보자. 2. Us..
[Java] main method 분석
·
개발/java
Java의 메인 메서드를 보면public static void main(String[] args) { } 이런 식으로 되어 있는데, 왜 이렇게 작성되는지 궁금해서 한번 알아보았다. 하나씩 살펴보도록 하자. 1. Publicpublic은 접근 제어자이다. 단어 뜻에서 유추할 수 있듯, 자바 프로젝트 내 어디서든 main에 접근이 가능하다는 의미이다.JVM이 어떤 패키지(외부)에서든 main 메서드에 접근할 수 있어야 하기 때문에 public으로 설정하는 것이라 볼 수 있다.*JVM(Java Virtual Machine)Java 프로그램을 실행하는 가상 컴퓨터다. "Write Once, Run Anywhere"라는 Java의 핵심 철학을 실현하는 핵심 기술이다. 각 운영체제마다 다른 기계어를 사용하기 때문에..