본문 바로가기

Development/Spring

(40)
[Spring] Controller와 API 구현하기 Controller 컨트롤러는 비즈니스 로직과 클라이언트의 요청을 연결하는 역할을 한다. 즉 컨트롤러는 클라이언트로부터 받은 요청에 대해 서비스 레이어에 구현된 적절한 메서드를 호출해서 결괏값을 받는다. @Controller와 @RestController @Controller와 @RestController는 Spring Framework에서 웹 컨트롤러를 만들 때 사용되는 어노테이션이다. 두 어노테이션 모두 컨트롤러 역할을 수행하지만 작동 방식과 처리하는 요청 유형에 있어 차이가 있다. * 아래는 Google Gemini 답변입니다. 기능 @Controller @RestController 기능 웹 요청 처리 웹 요청 처리 및 JSON 응답 자동 생성 반환 값 View 객체, ModelAndView, St..
[Spring] 빌드 관리 도구,Gradle과 Maven 빌드 관리 도구 빌드 관리 도구는 소스 코드에서 실행 가능한 애플리케이션을 자동으로 생성하는 데 도움을 주는 프로그램입니다. 이름에서 알 수 있듯이, 이는 다양한 작업을 개발하거나 스크립팅하는 데 중요합니다. 빌드 관리 도구는 다음과 같은 프로세스에 필요합니다. 빌드 툴은 임의의 명령을 실행합니다: 각 배포 시나리오는 독특하며, 각자가 파일을 다른 폴더로 복사하거나, 다른 형식으로 압축하거나, 다른 방식으로 정리해야 할 필요가 있습니다. 한 명령의 결과를 다른 명령에 적용합니다: 빌드는 거의 항상 여러 단계의 과정입니다. 소스 코드에서 문서를 생성합니다 . 소스 코드를 컴파일합니다 수집된 코드를 JAR 파일로 패키징합니다 패키지된 코드를 로컬/중앙 리포지토리 또는 서버에 설치합니다. 빌드 관리 도구에는 ..
[Spring] Spring Data JPA에서 getReferenceById vs findById (지연로딩과 즉시로딩) Spring Data JPA로 데이터의 조회를 구현할 때, 사용할 수 있는 메서드중, getReferenceById와 findById 두 메서드가 있습니다. 이 글에서는 이 둘의 차이점을 비교해보려 합니다. getRefereceById (구: getOne(ID), findOne(ID), getById(ID)) 내부적으로 EntityManager의 getReference() 메서드를 호출합니다. getReference() 메서드를 호출하면 Proxy 객체를 리턴합니다. 실제 쿼리는 Proxy 객체를 통해 최초로 데이터에 접근하는 시점에 실행됩니다. (지연 로딩(Lazy Loading)) 이때 데이터가 존재하지 않는 경우에는 EntityNotFoundException이 발생합니다. 아래는 실제 구현체 코드입..
[Spring] DAO (Data Access Object), DTO (Data Transfer Object) DAO(Data Access Object) 데이터베이스에 접근하기 위한 로직을 관리하기 위한 객체 비즈니스 로직의 동작 과정에서 데이터를 조작하는 기능은 DAO 객체가 수행함 단, Spring Data JPA에서 DAO의 개념은 Repository(레포지토리)가 대체 규모가 작은 서비스에서는 DAO를 별도로 설계하지 않고 바로 서비스 레이어에서 데이터베이스에 접근해서 구현하기도 함 하지만 DAO를 서비스 레이어와 리포지토리 중간 계층을 구성하여 사용하면, 비즈니스 로직을 개발할 때 유지보수 측면에서 용이한 경우가 많음 서비스와 비즈니스 레이어 객체지향적인 설계에서는 서비스와 비즈니스 레이어를 분리해서 서비스 레이어에서는 서비스 로직을, 비즈니스 레이어에서는 비즈니스 로직을 수행해야 한다는 의견이 많다. ..
[Spring] Spring Data JPA, Repository Spring Data JPA Spring Data JPA는 JpaRepository를 기반으로 더욱 쉽게 데이터베이스를 사용할 수 있는 아키텍처를 제공 Springboot로 JpaRepository를 상속하는 인터페이스를 생성하면, 기존의 다양한 메소드를 손쉽게 활용할 수 있음 Repository Spring Data JPA가 제공하는 인터페이스 엔티티가 데이터베이스의 테이블과 구조를 생성하는 데 사용했다면, 리포지토리(Repository)는 엔티티가 생성한 데이터베이스에 접근하는 용도로 사용 리포지토리를 생성하려면 테이블과 엔티티에 대한 인터페이스를 생성하고, 아래 코드와 같이 JpaRepository를 상속받으면 됨 package org.spring.study.data.repository; impor..
[Spring] 영속성 컨텍스트 (Persistence Context) 영속성 컨텍스트(Persistence Context) 영속성 컨텍스트는 애플리케이션과 데이터베이스 사이에서 엔티티와 레코드의 괴리를 해소하는 기능과 객체를 보관하는 기능을 수행 엔티티 객체가 영속성 컨텍스트에 들어오면 JPA는 엔티티 객체의 매핑 정보를 데이터베이스에 반영하는 작업을 수행함 이처럼 엔티티 객체가 영속성 컨텍스트에 들어와 JPA의 관리 대상이 되는 시점부터는 해당 객체를 영속 객체(Persistence Object)라고 부름 영속성 컨텍스트는 세션 단위의 생명주기를 가짐 데이터베이스에 접근하기 위한 세션이 생성되면 영속성 컨텍스트가 만들어지고, 세션이 종료되면 영속성 컨텍스트도 없어짐 엔티티 매니저는 이러한 일련의 과정에서 영속성 컨텍스트에 접근하기 위한 수단으로 사용됨 엔티티 매니저(En..
[Spring] Springboot Swagger 3 적용하기 (Springdoc-OpenAPI3) Springdoc-OpenAPI3 springdoc-openapi 자바 라이브러리는 스프링 부트 프로젝트를 사용하여 API 문서화를 자동화하는 데 도움을 줍니다. springdoc-openapi는 런타임에서 애플리케이션을 검사하여 스프링 구성, 클래스 구조 및 여러 주석을 기반으로 API 의미를 추론하는 방식으로 작동합니다. springdoc-openAPI 라이브러리는 다음 기능을 제공합니다. OpenAPI 3 Spring-boot v3 (Java 17 & Jakarta EE 9) JSR-303, specifically for @NotNull, @Min, @Max, and @Size. Swagger-ui OAuth 2 GraalVM native images Swagger-UI Swagger UI는 API..
[Spring] 엔티티 (Entity) Entity Spring Data JPA를 사용하면 데이터베이스에 테이블을 생성하기 위해 직접 쿼리를 작성할 필요가 없음 이 기능을 가능하게 하는 것이 Entity JPA에서 Entity는 데이터베이스의 테이블에 대응하는 클래스 Entity에는 데이터베이스에 쓰일 테이블과 칼럼을 정의함 Entity 관련 어노테이션 @Entity 해당 클래스가 Entity임을 명시하기 위한 어노테이션 클래스 자체는 테이블과 일대일로 매칭되며, 해당 클래스의 인스턴스는 매핑되는 테이블에서 하나의 레코드를 의미 @Table 클래스의 이름과 테이블의 이름을 다르게 지정해야 하는 경우 사용 이 어노테이션을 명시하지 않으면 클래스 이름과 테이블 이름이 일치하는 것으로 판단 @Table(name = "이름") 형태로 사용 @Id E..