[프로젝트] 게시판 프로젝트 - 1

DreamJJW·2023년 6월 2일
0

Spring

목록 보기
2/3

Java, Spring Boot를 이용하여 진행하는 게시판 프로젝트 진행 중, 중요한 내용이나 공부한 내용을 작성해보려 한다.



영속성(Persistence)이란?
데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 말한다


ORM이란?

자바의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것.
ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결해준다.
Persistent API라고도 함
ex) hibernate, JPA

ORM의 장점

ORM을 이용하면 SQL 쿼리가 아닌 직관적인 코드로 데이터를 조작할 수 있어 개발자가 객체 지향 프로그래밍하는 데 집중할 수 있도록 도와준다.
SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 인해 생산성이 증가한다.

ORM의 단점

프로젝트가 커질 경우, 부담감이 커질 수 있다.
-> SQL을 결국은 작성해야할 수 있다.


JPA Entity 매핑

JPA에서 엔티티란 쉽게 생각하면, DB 테이블에 대응하는 하나의 클래스.
@Entity가 붙은 클래스는 JPA가 관리해주며, JPA를 사용해서 DB 테이블과 매핑할 클래스는 @Entity를 꼭 붙여야만 매핑이 가능하다.

기본키(PK) 매핑


@Entity
	@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id; // 게시글 id

기본 키 생성을 데이터베이스에 위임
즉, id 값을 null로 하면 DB가 알아서 AUTO_INCREMENT 해준다

Table 매핑

@Table(indexes = {
        @Index(columnList = "title"),
        @Index(columnList = "hashtag"),
        @Index(columnList = "createdAt"),
        @Index(columnList = "createdBy"),

JPA Auditing이란?

ORM인 JPA로 데이터를 매핑할 때, 생성일자나 수정일자 같은 메타데이터를 처리해야할 때가 있다.
이 메타데이터들은 컬럼들이 대부분 공통적으로 가지고 있는 항목으로, Spring JPA에서 자동으로 시간을 매핑해주는 Auditing을 지원해 준다.

  • gradle에 의존성 추가해주기
compile('org.springframework.boot:spring-boot-starter-data-jpa')
  • @어노테이션들

@CreatedDate // 생성일자
@CreatedBy // 생성자
@LastModifiedDate  // 수정일자
@LastModifiedBy  // 수정자

Column 어노테이션

JPA에서 DB Table의 Column을 Mapping 할 때 @Column Annotation을 사용한다.

@Column(nullable = false) // null 여부 설정
@Column(unique = true) // unique 제약조건 설정
@Column(nullalbe = true, length = 100) // length도 설정 가능

@ManyToOne

게시글과 댓글의 관계를 보자면, 한 개의 게시글에는 여러개의 댓글이 달릴 수 있다.
고로 게시글 -> 댓글은 OneToMany이고, 댓글 -> 게시글은 ManyToOne이다.

@Setter @ManyToOne(optional = false) private Post post; // 게시글 id

여기서 optional은 값에 null이 들어갈 수 있다면 false, 아니라면 true이다.
게시글에는 댓글이 없을 수 있으므로, null이 들어갈 수 있다. 고로 false


AutoWirded(의존성 주입)


Repository


profile
간절한 사람

0개의 댓글