전체 글 267

CI/CD 도입 기능 설계 문서

kkrap 프로젝트에서 EC2에 docker-compose와 docker를 사용하여 elasticsearch, postgreSQL, spring boot, redis, kafka, react/vite를 띄우고 있다. 각 프론트엔드 백엔드에서 수동으로 배포를 해서 쓰고 있었는데 자동화를 위해 CI/CD를 도입하는 과정의 문서이다. 개요무엇을 위한 기능인가?Kkrap 프로젝트는 EC2 환경에서 docker-compose를 기반으로 Elasticsearch, PostgreSQL, Spring Boot, Redis, Kafka, React/Vite 등 여러 서비스를 동시에 운영하고 있다. 지금까지는 프론트엔드와 백엔드를 각각 수동으로 빌드 및 배포했기 때문에, 배포 과정에서 많은 시간이 소요되고 환경별 일관성을..

CI/CD란?

CI(Continuous Intergration, 지속적 통합)→ 개발자들이 작성한 코드를 자주(하루에도 여러 번) 중앙 저장소에 통합하고, 자동 빌드/테스트를 거쳐 코드 충돌, 버그를 빠르게 발견하는 과정CD(Continuous Dlivery/Deployment, 지속적 제공/배포)→ CI에서 검증된 코드를 자동으로 스테이징 환경 → 운영 환경에 배포하는 과정Continuous Delivery: 자동 배포 준비까지 하고 실제 배포는 사람이 승인Continuous Deployment: 운영까지 완전 자동 배포 왜 이게 필요한가?빠른 피드백 → 코드 푸시하였을 때 버그나 성능 이슈를 즉시 확인배포 속도 향상 → 사람이 수작업으로 할 때는 실수가 잦지만 CI/CD는 코드 merge만 해도 자동으로 빌드 및 ..

[Spring boot] DAO 연동을 위한 컨트롤러와 서비스 설계

서비스 클래스 만들기서비스 레이어에서는 도메인 모델을 활용해 애플리케이션에서 제공하는 핵심 기능 제공import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;import lombok.ToString;@Data@NoArgsConstructor@ToString@Builderpublic class ProductDto { private String name; private int price; private int stock; public ProductDto(String name, int price, int stock) { this.name = na..

[Spring boot] DAO 설계

DAO(Data Access Object)는 DB에 접근하기 위한 로직을 관리하기 위한 객체비즈니스 로직의 동작 과정에서 데이터를 조작하는 기능은 DAO 객체가 수행but 스프링 데이터 JPA에서 DAO의 개념은 레포지토리가 대체규모가 작은 서비스에서는 DAO를 별도로 설계하지 않고 바로 서비스 레이어에서 DB에 접근해서 구현하기도 한다.단 실제로 업무에 필요한 비즈니스 로직을 개발하다 보면 데이터를 다루는 중간 계층을 다두는 것이 유지보수 측면에서 용이한 경우가 많다.DAO 클래스 생성DAO 클래스는 일반적으로 ‘인터페이스-구현체’ 구성으로 생성DAO 클래스는 의존성 결합을 낮추기 위한 디자인 패턴서비스 레이어에 DAO 객체를 주입받을 때 인터페이스를 선언하는 방식으로 구성밑과 같이 data 기본적인 ..

[Spring boot] 리포지터리 인터페이스 설계 - 실습

Spring Data Jpa는 JpaRepository를 기반으로 더욱 쉽게 DB를 사용할 수 있는 아키텍처 제공리포지터리 인터페이스 생성리포지터리는 Spring Data JPA가 제공하는 인터페이스import entity.Product;import org.springframework.data.jpa.repository.JpaRepository;// 예제 6.7public interface ProductRepository extends JpaRepository {}JpaRepository를 보면 밑 코드와 같이 되어있다.//// Source code recreated from a .class file by IntelliJ IDEA// (powered by FernFlower decompiler)//pac..

카테고리 없음 2025.08.17

[Spring boot] 엔티티 설계 - 실습

Spring Data Jpa를 사용하면 DB에 테이블을 생성하기 위해 직접 쿼리 작성 필요 XJPA에서 엔티티는 DB의 테이블에 대응하는 클래스import java.time.LocalDateTime;import jakarta.persistence.*;import lombok.*;@Entity@Getter@Setter@NoArgsConstructor@AllArgsConstructor@EqualsAndHashCode@ToString(exclude = "name")@Table(name = "product")public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long number; @Co..

[Spring boot] 영속성 컨텍스트

영속성 컨텍스트(Persistence Context)는 애플리케이션과 데이터베이스 사이에서 엔티티와 레코드의 괴리를 해소하는 기능과 객체를 보관하는 기능을 수행엔티티 객체가 영속성 컨텍스트에 들어오면 JPA는 엔티티 객체의 매핑 정보를 DB에 반영하는 작업 수행엔티티 → 영속성 켄텍스트에 들어와 JPA의 관리 대상이 되는 시점붙너는 영속 객체(Persistence Object)라고 한다 영속성 컨텍스트세션 단위의 생명 주기를 가진다.DB에 접근하기 위한 세션이 생성되면 영속성 컨텍스트가 만들어지고 세션이 종료되면 영속성 컨텍스트도 없어진다.엔티티 매니저는 이러한 일련의 과정에서 영속성 컨텍스트에 접근하기 위한 수단으로 사용 엔티티 매니저(EntityManager)엔티티를 관리하는 객체DB에 접근해서 CR..

[Spring boot] 하이버네이트

하이버네이트는 자바의 ORM 프레임워크로 JPA가 정의하는 인터페이스를 구현하고 있는 JPA 구현체 중 하나Spring Data JPAJPA를 편리하게 사용할 수 있도록 지원하는 스프링 하위 프로젝트 중 하나CRUD 처리에 필요한 인터페이스를 제공하며, 하이버네이트의 엔티티매니저(EntityManager)를 직접 다루지 않고 리포지토리를 정의해 사용함으로써 스프링이 적합한 쿼리를 동적으로 생성하는 방식으로 데이터베이스를 조작

카테고리 없음 2025.08.17

[Spring boot] JPA

JPA란?Java Persistence(영속성) API는 자바 진영의 ORM 기술 표준으로 채택된 인터페이스의 모음ORM이 큰 개념이라면 JPA는 더 구체화된 스펙을 포함 즉, JPA 또한 실제로 동작하는 것이 아니고 어떻게 동작해야하는지 메커니즘을 정리한 표준 명세로 생각하면 된다. JPA의 메커니즘은 내부적으로 JDBD를 사용JDBD 구현하면 SQL에 의존하는 문제 등이 있어 이 문제점을 보완하는 게 JPAJPA 기반의 구현체는 대표적으로 3가지