JPA의 Entity에서 1대N 관계를 설정하기 위해서는 @ManyToOne과 @OneToMany를 사용한다. 예를들어, 게시판에는 여러 개의 댓글을 달 수 있으므로 둘은 1대N 관계이다. * cascade = CascadeType.All, orphanRemoval = true 이 둘을 모두 설정하면 부모 엔티티로 자식 엔티티의 생명주기를 관리할 수 있다. public class Board { ... @OneToMany(mappedBy = "board", cascade = CascadeType.ALL, orphanRemoval = true) private List comments; } public class Comment { ... @ManyToOne @JoinColumn(name = "board_sn"..
Oracle에서의 계층형 쿼리는 START WITH와 CONNET BY를 중심으로 구성된다. 하지만 MariaDB의 경우 WITH RECURSIVE ~ 라는 WITH 구문 형태로 계층형 쿼리를 작성한다. RECURSIVE라는 이름에서 알 수 있 듯, 재귀 쿼리를 의미한다. WITH RECURSIVE comments AS ( SELECT *, 1 AS LEVEL FROM comment WHERE target_comment_sn IS NULL UNION ALL SELECT c.*, cs.LEVEL + 1 AS LEVEL FROM comment c INNER JOIN comments cs on c.target_comment_sn = cs.co..
macos의 터미널에서 MariaDB를 사용하기 위한 명령어를 정리 mysql 또는 mariadb- mariadb 시작 use [데이터베이스 이름];- 해당 데이터베이스를 선택한다. show databases;- 데이터베이스 목록 조회 create database [데이터베이스 이름];- 새로운 데이터베이스 생성 show tables;- 테이블 목록 조회 create user '[사용자 이름]'@'[주소(localhost 등)]' identified by '[사용자 비밀번호]';- MariaDB에 사용자를 추가한다.* '[사용자 이름]'@'[주소(localhost 등)]' 형식은 반드시 지켜야 한다. 주소 부분을 생략할 경우 일부 시스템에서 데이터베이스 접속 시 Access Denied 에러가 발생할 수..
JPA라는 카테고리를 따로 만들어 정리해야할 것 같지만 일단 스프링 부트와 함께 진행하기 때문에 스프링 부트 카테고리에 정리하기로 했다. 1. @Embeddable 우선 복합키 역할을 할 클래스를 생성한다. @Data @Embeddable public class CommentKey implements Serializable{ @Column(name = "board_sn") private Long boardSn; @Column(name = "comment_sn") private Long commentSn; } 그리고 엔티티에 복합키 역할을 하는 클래스를 변수로 선언해 @EmbeddedId를 사용해 연결한다. @Data @Entity @Table(name = "comment") public class Com..
요청을 받았을 때 각 상황에 따라 예외를 발생시키고 처리하고자 한다. 요청에 대해 처리할 때 다양한 문제가 발생할 수 있는데 이를 예외를 발생시켜 catch에서 처리하는 것이 낫다고 생각했다. 그래서 Service 클래스에 throws 키워드를 사용해 Controller에서 예외에 맞게 응답을 반환할 수 있도록 했다. 여기서 예외는 각 Http 상태 코드에 맞추어 발생시킬 수 있도록 ResponseStatusException을 사용했다. 이 예외 클래스에 getStatus() 메서드가 있는데 이 메서드를 사용해 예외에 해당하는 Http 상태 코드를 HttpStatus 타입으로 반환할 수 있다. catch 문에서는 이 상태 코드를 비교해 알맞은 클라이언트에게 응답을 전달한다. @PutMapping("/{b..
Spring Boot에서 MariaDB를 사용하기 위해서는 드라이버, URL, 사용자 아이디, 비밀번호가 필요하다. 하지만 URL, 아이디, 비밀번호는 민감한 정보이므로 해당 정보를 작성한 properties 파일을 프로젝트 폴더 밖에 저장하려고 한다. 이 경우 @PropertySource 어노테이션을 사용해 해당 파일 경로를 작성해야 한다. package com.chordncode.springboard.config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotat..
0. Quartz Quartz는 스케줄러를 위한 라이브러리이다. 일정한 시간이나 날짜마다 작업을 수행하기 위해 사용한다. 1. 의존 라이브러리 추가 pom.xml에 다음과 같이 라이브러리를 추가한다. org.quartz-scheduler quartz 2.3.2 org.springframework spring-context-support 5.2.5.RELEASE 2. Quartz 스케줄러 설정 root-context.xml에서 Quartz 스케줄러를 설정한다.
0. Controller Controller는 클라이언트로부터 들어온 요청을 알맞은 Service로 연결하고 응답을 보내주는 역할을 한다. 다음은 Get, Post, Put, Delete 방식을 사용한 RestController이다. package com.web.springtest00.product.controller; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; impor..