Backend/SpringBoot 23

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

[기본구조2] JPA 초기 설정 (DB 관리) 및 Entity 예제(validation 포함)

spring boot 에서 DB 연계를 위해서는 JPA를 통해 진행해야 한다.  build.gradle 에 다음을 추가implementation 'org.springframework.boot:spring-boot-starter-data-jpa' appication.yml 설정 추가spring: jpa: hibernate: ddl-auto: update update : 엔티티 변경부분을 db에 반영none : 엔티티가 변경되어도 아무것도 안함validate : 실제 DB와 엔티티에 차이점이 있는지만 검증create : 서버가 시작될때 DB를 새로 생성create-drop : 서버가 종료될때 DB를 삭제개발환경에서는 update를 사용하고, 실제 운용에선 none 이나 ..

Backend/SpringBoot 2024.10.22

프로젝트 설정파일 application.properties (또는 application.yml)

프로젝트 내 각종 설정정보를 모아두는 파일이다.  위치는 resources 폴더 내부에 위치하고 있다. 기본적으로 프로젝트를 생성하면 (spring initalzr 을 통해) application.properties 가 생성이 되나, application.yml을 많이 쓰는 모양이다. 변경은, rename을 통해 확장자를 yml로 변경하면 된다.  주로, DB 접속 정보, 각종 서버 접속 정보, PG사 정보, API Key 값 등 연동 정보 및 설정 옵션들을 지정한다.실행 포트번호, 이름 등도 설정한다.  설정파일 분리dev 환경, 배포환경 등 설정을 나눠서 해야 할 경우가 있다. 파일 자체를 분리하는법, 한 파일에서 나눠 작성하는법이 있다.VSCode 에서는 1개의 설정파일에 dev 환경, 배포환경을 ..

Backend/SpringBoot 2024.10.22

[VSCode] 코틀린 + 자바 섞어서 쓰기

https://dean83.tistory.com/272 [VSCode] 코틀린 기반 SpringBoot 설정 (윈도우)자바 기반으로 되어 있는것은 간편하게 설정이 가능하나, 코틀린 기반으로 된 스프링부트 설정하는데에 애를 먹었다.  굳이 VSCode가 아닌 다른 IDE를 사용하면 되는데 VSCode를 쓴 이유는, 범용적dean83.tistory.com여기서 코틀린 기반 VSCode 초기 프로젝트 생성을 다뤘었다. 코틀린 기반으로 시작을 하니 안되는게 너무 많았다. 대표적으로 spring boot dashboard 가 안되었었다.  그래서, 기본 프로젝트 설정은 Java로 설정하여 메인Class 는 자바로 동작하되, (즉 껍데기는 자바) 나머지 항목들은 코틀린으로 구현하면 될거 같아서 그렇게 구성을 하였고..

Backend/SpringBoot 2024.10.21