Backend/SpringBoot 60

[기본구조4] 서비스

Repository Interface 를 컨트롤러 클래스에서 직접 제어 하는것은 보안측면에서 좋지 않다. 또한 코드 중복을 막기 위해서도 서비스 클래스를 이용하여 DB 처리 하는것이 좋다. 서비스 클래스를 따로 두면 엔티티를 DTO 적용하여 데이터 처리를 분리 할 수 있다.서비스는 비즈니스 로직을 담당한다. 컨트롤러 클래스 -> 서비스 클래스 함수 호출 -> 서비스 클래스에서 Repository Interface 조작@Service 어노테이션을 사용한다. Service 에는 @Transactional 메소드 어노테이션을 통해 DB 트랜잭션 작업을 하는 메소드를 작성 할 수 있다.@Transactional 어노테이션이 붙은 경우, 스프링 컨테이너는 Controller 에서 Service를 이용할때, 바..

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

의존성 주입 (List, Map 포함)

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: datasource: url: ${DB_URL} username: ${DB_USERNAME} password: ${DB_PASSWORD} driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: update # 운영 환경에서는 validate 또는 none 권장 show-sql: true ..

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

[기본 구조1] 컨트롤러 (@controller) 및 각종 매핑

Url 을 매핑할때 사용되는 어노테이션으로 반드시 필요하다. 스프링에서 요청이 왔을때 소스코드로 연결을 해주기 위한 어노테이션이다.  클래스 선언부 위쪽에 작성한다.  **참고 @RestController 어노테이션 사용시 @ResponseBody를 쓸 필요가 없음. (자동으로 리턴형을 보고 처리해줌)  import org.springframework.stereotype.Controller...@Controllerpublic class 클래스명(){ ...}  간단하게 Get 요청이 왔을때 문자열을 리턴하는 함수를 작성해보면 다음과 같다import org.springframework.stereotype.Controllerimport org.springframework.web.bind.annotation...

Backend/SpringBoot 2024.10.21

[VSCode] 코틀린 기반 SpringBoot 설정 (윈도우)

자바 기반으로 되어 있는것은 간편하게 설정이 가능하나, 코틀린 기반으로 된 스프링부트 설정하는데에 애를 먹었다.  굳이 VSCode가 아닌 다른 IDE를 사용하면 되는데 VSCode를 쓴 이유는, 범용적이고 여러 방면에서 쓸 수 있기 때문이다.프론트엔드 개발을 하든지, 기타 다른 개발을 할때도 사용이 가능하고 무료이기 때문에 기를 쓰고 VSCode 세팅법을 찾았다. VSCode를 쓰지 않아도 된다면, 무료툴인 https://spring.io/tools 를 쓰는걸 추천한다 이 중 spring tools for eclipse 버전을 설치하면 된다. Spring | Tools spring.io물론 코틀린 기반이 아닌 Java 기반은 VSCode에서도 매끄럽게 잘 동작 한다. 기본적인 VSCode 설치나 JDK..

Backend/SpringBoot 2024.10.21