
🔥 프로젝트 생성
Spring initializer 를통해 버전 정보, 언어, 이름, 의존성 등을 설정하고 프로젝트를 생성해줍니다.

💡 Dependencies
Lombok : 어노테이션을 사용하여 getter, setter와 같은 반복되는 형식적인 코드를 줄이기 위해 의존성 설정합니다.
Spring Web : Spring MVC, Apache Tomcat 등 웹개발에 필요한 의존성을 제공합니다.
Thymeleaf : Thymeleaf 템플릿 엔진 사용하여 View를 렌더링 하기위해 의존성 설정합니다.Spring Data JPA : JPA를 사용하기 위해 의존성 설정합니다.( 🚨 아직 Spring Data JPA를 배우지 않았기 때문에 JPA만으로 개발하도록 하겠습니다. )
MariaDB Driver : mariaDB를 사용하기 위해 의존성 설정합니다.Validation : 입력 데이터를 미리 검증(Validation) 하기위해 설정합니다.
Spring Boot DevTools: 애플리케이션을 다시 시작하지 않고 수정된 부분을 반영하여 리로딩 하거나 설정 파일의 변경을 감지하고 반영 하는 등 개발할 때 편의 기능을 제공한다.
생성한 프로젝트를 build.gradle을 통해 불러옵니다.바로 실행하게되면 아래와같은 에러가 뜨게되는데 데이터베이스의 소스를 설정해 주지 않아 발생한 에러입니다.

application.yml 데이터베이스 초기 설정을 해줍니다. ( 처음에는 properties지만 yml이 더 보기편해 변경하였습니다.)


추가적으로 개발을 위해 DDL 자동생성 기능을 활성화 하여 어플리케이션 실행 시점에 자동으로 테이블을 만들 수 있도록 합니다.
데이터베이스로 요청하는 sql쿼리문을 로그로 확인 할 수 있도록 로깅 레벨을 debug로 설정해줍니다.
✔ Domain 생성, 연관관계 매핑
📁 디렉토리 구조

Member.java
package com.project.board.domain;
import jakarta.persistence.*;
import lombok.Getter;
@Entity
@Getter
public class Member extends BaseEntity{
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String password;
private String name;
@Embedded
private Address address;
@Enumerated(EnumType.STRING)
private Gender gender;
}
@Entity : JPA가 Entity클래스라는 것을 알 수 있도록 어노테이션을 사용하여 표시합니다.
@Id : 엔티티의 PrimaryKey값을 설정합니다.
@GeneratedValue : JPA가 Sequence를 사용하여 id값을 설정하도록 합니다
@Embeded : 값 타입의 사용을 표시합니다.
@Enumerated : Enum타입을 표시합니다 (EnumType.STRING)속성을 통해 저장될 때 Enum타입의 이름으로 저장 될 수 있도록 설정합니다.
Post.java
package com.project.board.domain;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
@Entity
@Getter @Setter
public class Post extends BaseEntity{
@Id @GeneratedValue
@Column(name = "POST_ID")
private Long id;
private String title;
private String content;
@ManyToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
}
@ManyToOne : Post와 Member는 N : 1 즉, ManyToOne 의 관계이기 때문에 어노테이션을 사용하여 관계를 매핑합니다.
@JoinColumn : 대상 테이블(Member)의 PK를 설정 테이블(Post)의 FK로 설정합니다, name 속성은 FK컬럼의 이름을 설정합니다.( 이는 단순히 이름을 설정해주는 것이고 사용할 외래키를 설정하는 것이 아닙니다, 또한 생략하더라도 내부적으로 매핑 규칙과 컬럼명 'Entity이름_id'와 같은 형식으로 정의하는 규칙이 존재하기 때문에 가능합니다.
그리고 명시적으로 컬럼명을 기제함으로써 가독성을 높일 수 있습니다. )
📌
모든 프로젝트 소스코드는 깃허브를 통해 올리고 점점 더 추가해 나가겠습니다.
GitHub - Rookie8294/project_board: SpringBoot + JPA 를 활용하여 CRUD 게시판 프로젝트
SpringBoot + JPA 를 활용하여 CRUD 게시판 프로젝트. Contribute to Rookie8294/project_board development by creating an account on GitHub.
github.com
'Project > SpringBoot+JPA 게시판' 카테고리의 다른 글
[SpringBoot + JPA 게시판 만들기] 게시판 페이징 및 N+1문제 최적화 ( Pageable, join fetch ) (0) | 2024.04.25 |
---|---|
[SpringBoot + JPA 게시판 만들기] 로그인, 로그아웃 기능 구현 및 타임리프 적용 (+스프링 시큐리티) (0) | 2024.03.31 |
[SpringBoot + JPA 게시판 만들기] 게시판CRUD 서비스 로직 작성 + 테스트 코드 추가 (0) | 2024.03.09 |
[SpringBoot + JPA 게시판 만들기] 개발 과정에서 만난 고민 builder?, Spring Data JPA?, DTO? (0) | 2024.02.19 |
[SpringBoot + JPA 게시판 만들기] 요구사항 및 프로젝트 설계 - 1 (0) | 2024.02.08 |

🔥 프로젝트 생성
Spring initializer 를통해 버전 정보, 언어, 이름, 의존성 등을 설정하고 프로젝트를 생성해줍니다.

💡 Dependencies
Lombok : 어노테이션을 사용하여 getter, setter와 같은 반복되는 형식적인 코드를 줄이기 위해 의존성 설정합니다.
Spring Web : Spring MVC, Apache Tomcat 등 웹개발에 필요한 의존성을 제공합니다.
Thymeleaf : Thymeleaf 템플릿 엔진 사용하여 View를 렌더링 하기위해 의존성 설정합니다.Spring Data JPA : JPA를 사용하기 위해 의존성 설정합니다.( 🚨 아직 Spring Data JPA를 배우지 않았기 때문에 JPA만으로 개발하도록 하겠습니다. )
MariaDB Driver : mariaDB를 사용하기 위해 의존성 설정합니다.Validation : 입력 데이터를 미리 검증(Validation) 하기위해 설정합니다.
Spring Boot DevTools: 애플리케이션을 다시 시작하지 않고 수정된 부분을 반영하여 리로딩 하거나 설정 파일의 변경을 감지하고 반영 하는 등 개발할 때 편의 기능을 제공한다.
생성한 프로젝트를 build.gradle을 통해 불러옵니다.바로 실행하게되면 아래와같은 에러가 뜨게되는데 데이터베이스의 소스를 설정해 주지 않아 발생한 에러입니다.

application.yml 데이터베이스 초기 설정을 해줍니다. ( 처음에는 properties지만 yml이 더 보기편해 변경하였습니다.)


추가적으로 개발을 위해 DDL 자동생성 기능을 활성화 하여 어플리케이션 실행 시점에 자동으로 테이블을 만들 수 있도록 합니다.
데이터베이스로 요청하는 sql쿼리문을 로그로 확인 할 수 있도록 로깅 레벨을 debug로 설정해줍니다.
✔ Domain 생성, 연관관계 매핑
📁 디렉토리 구조

Member.java
package com.project.board.domain;
import jakarta.persistence.*;
import lombok.Getter;
@Entity
@Getter
public class Member extends BaseEntity{
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String password;
private String name;
@Embedded
private Address address;
@Enumerated(EnumType.STRING)
private Gender gender;
}
@Entity : JPA가 Entity클래스라는 것을 알 수 있도록 어노테이션을 사용하여 표시합니다.
@Id : 엔티티의 PrimaryKey값을 설정합니다.
@GeneratedValue : JPA가 Sequence를 사용하여 id값을 설정하도록 합니다
@Embeded : 값 타입의 사용을 표시합니다.
@Enumerated : Enum타입을 표시합니다 (EnumType.STRING)속성을 통해 저장될 때 Enum타입의 이름으로 저장 될 수 있도록 설정합니다.
Post.java
package com.project.board.domain;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
@Entity
@Getter @Setter
public class Post extends BaseEntity{
@Id @GeneratedValue
@Column(name = "POST_ID")
private Long id;
private String title;
private String content;
@ManyToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
}
@ManyToOne : Post와 Member는 N : 1 즉, ManyToOne 의 관계이기 때문에 어노테이션을 사용하여 관계를 매핑합니다.
@JoinColumn : 대상 테이블(Member)의 PK를 설정 테이블(Post)의 FK로 설정합니다, name 속성은 FK컬럼의 이름을 설정합니다.( 이는 단순히 이름을 설정해주는 것이고 사용할 외래키를 설정하는 것이 아닙니다, 또한 생략하더라도 내부적으로 매핑 규칙과 컬럼명 'Entity이름_id'와 같은 형식으로 정의하는 규칙이 존재하기 때문에 가능합니다.
그리고 명시적으로 컬럼명을 기제함으로써 가독성을 높일 수 있습니다. )
📌
모든 프로젝트 소스코드는 깃허브를 통해 올리고 점점 더 추가해 나가겠습니다.
GitHub - Rookie8294/project_board: SpringBoot + JPA 를 활용하여 CRUD 게시판 프로젝트
SpringBoot + JPA 를 활용하여 CRUD 게시판 프로젝트. Contribute to Rookie8294/project_board development by creating an account on GitHub.
github.com
'Project > SpringBoot+JPA 게시판' 카테고리의 다른 글
[SpringBoot + JPA 게시판 만들기] 게시판 페이징 및 N+1문제 최적화 ( Pageable, join fetch ) (0) | 2024.04.25 |
---|---|
[SpringBoot + JPA 게시판 만들기] 로그인, 로그아웃 기능 구현 및 타임리프 적용 (+스프링 시큐리티) (0) | 2024.03.31 |
[SpringBoot + JPA 게시판 만들기] 게시판CRUD 서비스 로직 작성 + 테스트 코드 추가 (0) | 2024.03.09 |
[SpringBoot + JPA 게시판 만들기] 개발 과정에서 만난 고민 builder?, Spring Data JPA?, DTO? (0) | 2024.02.19 |
[SpringBoot + JPA 게시판 만들기] 요구사항 및 프로젝트 설계 - 1 (0) | 2024.02.08 |