분류 전체보기 289

Query 어노테이션 및 JPA의 Specification

서비스 interface 를 통해 DB의 내용을 조회 해 올때, 복잡한 쿼리문을 직접 작성해야 할 경우가 있다. 직접 쿼리문을 작성하려면 @Query 어노테이션을 이용하여, Repository에 선언을 해주고, 코드로 구현한다면, Service 에 Specification을 이용해 작성해 준다.   @Query 어노테이션 유의점쿼리문 작성시, 실제 DB 테이블의 컬럼명이 아닌, 엔티티의 변수명을 기준으로 작성해야 한다. 쿼리 작성시 인자값where 절 등 인자값을 통해 쿼리문을 완성해야 할 필요가 있는데, 이때에는 @param 어노테이션을 이용한다. //Repository interface 에서, public interface repo extends JpaRepository{ ..... @Que..

Backend/SpringBoot 2024.10.25

Bean 어노테이션 (W.Configuration, Component 어노테이션)

Bean 어노테이션은 DI 를 위해 사용되는 어노테이션으로, 스프링부트 내부에 해당 어노테이션이 있는 클래스 내 함수를 등록해 두고, 사용처에서 @Autowired 등으로 인젝션 받아 사용할 수 있도록 한다. Bean 어노테이션만 사용하면 안되고, @Component 나 @Configuration 어노테이션과 같이 사용해야 한다.@Component 나 @Configuration 어노테이션이 있는 클래스 내부 함수에 @Bean 어노테이션을 붙인다.요약하자면,Bean으로 등록할 대상이 되는 일반 클래스 선언@Component 또는 @Configuration 어노테이션이 붙은 클래스 선언@Bean 어노테이션이 붙은 맴버함수 구현일반 클래스를 리턴하는 함수로 구현사용처에서 @Autowired 혹은 생성자 자동 ..

Backend/SpringBoot 2024.10.25

Spring Security (Configuration, EnableWebSecurity 어노테이션)

인증 (Auth) 기능 및 보안기능을 사용하기 위한 프레임 워크이다.간략 요약build.gradle 에서 프레임워크 추가@Configuration, @EnableWebSecurity 어노테이션을 사용하는 config용 클래스 생성클래스에서 각종 시큐리티 관련 세팅 진행 설치 (build.gradle) implementation 'org.springframework.boot:spring-boot-starter-security'@Configuration 어노테이션스프링 환경설정임을 알리는 어노테이션Security 관련 환경설정 뿐 아니라 AWS 연동, 구글 API 연동등의 환경설정도 할 수 있다.@EnableWebSecurity모든 API 통신에 스프링 시큐리티를 활성화 함SecurityFilterChain..

Backend/SpringBoot 2024.10.25

DTO (W. Data, Build 어노테이션)

Data Transfer Object의 약자로서, 데이터만 전달 해준다.기본적으로 entity 항목은 DB 테이블과 매핑이 되므로 특정 항목을 제거하고 클라이언트에 전달 할 수 없다.따라서 entity를 DTO로 한번 더 감싼 후 원하는 항목들만 조합하여 클라이언트에 전달하기 위해 사용한다.혹은 다양한 entity 항목들을 하나의 DTO로 조합할 수도 있다.물론 관심도 분리등 다른이유도 있지만, 이 부분은 개발자 입장에서만 유효한 의미라 건너 뛴다.정의는 class 로 정의하고, controller 에서 DTO 생성 및 함수호출을 하여 동작한다.  정의 간단하다. DTO로 사용할 클래스를 만들고, entity로 전환하는 함수, entity를 받아 DTO를 설정하는 함수를 만들면 된다. Data 어노테이션..

Backend/SpringBoot 2024.10.24

Paging

다수의 데이터가 있을 경우, 전부를 보내주지 않고 Paging 하여 리턴 할 수 있도록 한다. 기본구조 4개중 Repository Service, Controller 세곳 모두 연관이 있다.  import org.springframework.data.domain.Page;import org.springframework.data.domain.Pageable; 두개를 import 해야 한다. RepositoryPage 를 리턴하는 함수를 하나 생성한다.인자값으로는 Pageable을 받는다. package com.example.test1.test1;import java.util.List;import org.springframework.data.jpa.repository.JpaRepository;import o..

Backend/SpringBoot 2024.10.24

[기본구조4] 서비스

Repository Interface 를 컨트롤러 클래스에서 직접 제어 하는것은 보안측면에서 좋지 않다. 또한 코드 중복을 막기 위해서도 서비스 클래스를 이용하여 DB 처리 하는것이 좋다. 서비스 클래스를 따로 두면 엔티티를 DTO 적용하여 데이터 처리를 분리 할 수 있다.  컨트롤러 클래스 -> 서비스 클래스 함수 호출 -> 서비스 클래스에서 Repository Interface 조작@Service 어노테이션을 사용한다.  package com.example.test1.test1import org.springframework.stereotype.Service//코틀린에서는 클래스 생성시 (안에 변수 선언을 바로 할 수 있다)@Servicepublic class ServiceClass(val _repo ..

Backend/SpringBoot 2024.10.23

응답으로 템플릿 리턴하기 (model, 타임리프, layout)

보통 api 응답으로는 json 형식을 리턴하는것이 일반적이고 바람직한 방식이라고 생각한다. 그러나 가끔 html을 이용해야 할 때가 있다. (예 : 가입환영 이메일, 비밀번호 확인 이메일 등) 특정 API로 해당 요청을 받음 -> DB 에서 해당 내역 조회 -> 템플릿으로 DB 내용을 담아 전달 의 프로세스가 필요할 때가 있다. 참고로 오브젝트를 리턴하면 Json으로 변환하여 리턴하게 된다템플릿을 이용하기 위해 보통 타임리프 라이브러리를 사용한다. 다음의 순서로 동작한다 ***코틀린을 이용하여 VSCode 에서 구동시 ./gradlew bootrun 으로 실행해야 한다. build.gradle 설치resource 폴더 -> templates 폴더 -> html 파일 추가Controller 클래스 함수에..

Backend/SpringBoot 2024.10.23

의존성 주입

Repository 의 interface를 활용하기 위해서, 각 클래스에서 의존성 주입을 통해 DB 연동을 해야 한다. @Autowired 어노테이션을 통해 자동으로 의존성 주입을 하는데, 여러 방법이 있으나 생성자에서 주입하는 방식을 원칙으로 한다.   생성자 주입@Autowired 어노테이션을 사용하지 않아도 된다.클래스의 생성자에 인자값 형식으로 받는다.public class 클래스명 { private final 리파지토리interface명 _repoValue; public 클래스명(리파지토리interface명 _repo) { this._repoValue = _repo; } .... }@ RequiredArgsConstructor 어노테이션..

Backend/SpringBoot 2024.10.23

[기본구조3] Repository with JPA (DB CRUD동작,Interface, findby)

앞에선 DB와 매칭되는 클래스인 엔티티를 정리 하였다. 엔티티로 매핑해 놓으면 해당 테이블과 연결된 항목들을 쉽게 가져올 수 있고, 설정할 수 있다. 그러나 프로그램 상에서만 그러할 뿐 실제 DB에 반영하기 위해선 Repository를 이용해야 한다.  구현interface 형식으로 구현을 한다. 엔티티가 아래와 같다면, package com.example.test1.test1;import jakarta.persistence.Column;import jakarta.persistence.Entity;import jakarta.persistence.GeneratedValue;import jakarta.persistence.GenerationType;import jakarta.persistence.Id;imp..

Backend/SpringBoot 2024.10.23