서연씨가 써준 코드 기반으로 코드를 수정했어요.
기존에는 조회수, 저자를 추가한 버전이었습니다.
그런데 오류가 났습니다.
1. 가장먼저 그 이유는, 생성자 오류였습니다.
제가 설정한 모든 필드는 id, title, content, author,views였고, 이번에 createdAt이라는 새로운 값이 생겼습니다.
기존의 코드에서는 5개의 속성(view)까지만 넘겨줬기에 생긴걸로 예상됩니다.
그래서 생성자 추가해줬어요.
원래 추가 안해도 된다는데 @AllargsConstructor 어노테이션은 모든 변수를 가지는 기본생성자를 만들기에, createdAt은 필수적으로 들어가야만 하더라구요.
package com.example.backend_B.dto;
import com.example.backend_B.entity.Article;
import lombok.AllArgsConstructor;
import lombok.ToString;
import java.time.LocalDateTime;
@AllArgsConstructor
@ToString
public class ArticleForm {
private Long id;
private String title; // 제목을 받을 필드
private String content; // 내용을 받을 필드
private String author; // 작성자명 받을 필드
private Integer views; // 기본형 -> Wrapper형으로 변경
private LocalDateTime createdAt;
public Article toEntity() {
int safeViews = (views == null )? 0 : views;
return new Article(id, title, content, author, safeViews,createdAt);
}
HTTP status 500 : 서버 '내부' 오류

그 이유는 무엇인가?
1. 서연씨가 알려준 createdAt (생성시각)에 따른 값이 더미데이터 1~6에 설정되어있지않았습니다. 이를 mysql에서 설정해주었습니다.
기존
mysql> SELECT * FROM article ;
+----+--------------+---------------------+--------+-------+----------------------------+
| id | content | title | author | views | created_at |
+----+--------------+---------------------+--------+-------+----------------------------+
| 1 | 1111 | 가가가가 | 이시은 | 4 | NULL |
| 2 | 2222 | 나나나나 | 이시은 | 1 | NULL |
| 3 | 3333 | 다다다다 | 시혜 | 0 | NULL |
| 4 | 댓글 고 | 당신의 인생 영화는? | 이시은 | 1 | NULL |
| 5 | 댓글 고 | 당신의 소울 푸드는? | 이시은 | 1 | NULL |
| 6 | 댓글 고 | 당신의 취미는? | 이시은 | 1 | NULL |
| 7 | 집가고싶어염 | 힘들다 | 시은 | 2 | NULL |
| 8 | NULL | NULL | NULL | 1 | 2025-07-02 16:51:17.261139 |
+----+--------------+---------------------+--------+-------+----------------------------+
수정버전. null인거에 정보추가
mysql> UPDATE article SET created_at = NOW() WHERE created_at IS NULL;
Query OK, 7 rows affected (0.01 sec)
Rows matched: 7 Changed: 7 Warnings: 0
그리고 8번 행에도 null로 생성된 것이 있길래 수정해주었습니다.
mysql> UPDATE article SET title='시간값을넣었어요', content = 'sql에 더미값이없었어요', author = '24컴공' WHERE id = 8;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT * FROM article;
+----+------------------------+---------------------+--------+-------+----------------------------+
| id | content | title | author | views | created_at |
+----+------------------------+---------------------+--------+-------+----------------------------+
| 1 | 1111 | 가가가가 | 이시은 | 4 | 2025-07-02 17:04:52.000000 |
| 2 | 2222 | 나나나나 | 이시은 | 1 | 2025-07-02 17:04:52.000000 |
| 3 | 3333 | 다다다다 | 시혜 | 0 | 2025-07-02 17:04:52.000000 |
| 4 | 댓글 고 | 당신의 인생 영화는? | 이시은 | 1 | 2025-07-02 17:04:52.000000 |
| 5 | 댓글 고 | 당신의 소울 푸드는? | 이시은 | 1 | 2025-07-02 17:04:52.000000 |
| 6 | 댓글 고 | 당신의 취미는? | 이시은 | 1 | 2025-07-02 17:04:52.000000 |
| 7 | 집가고싶어염 | 힘들다 | 시은 | 2 | 2025-07-02 17:04:52.000000 |
| 8 | sql에 더미값이없었어요 | 시간값을넣었어요 | 24컴공 | 1 | 2025-07-02 16:51:17.261139 |
+----+------------------------+---------------------+--------+-------+----------------------------+
8 rows in set (0.00 sec)
모든 데이터 값이 알맞게 들어갔습니다.

생성시각을 추가하는 김에 mustache파일에도 추가한 속성(시간) 추가해주었습니다.


**새로 배운 어노테이션
@PrePersist
:db 저장(insert) 직전에 자동으로 실행된다. 즉, 엔티티 생성시점에 자동으로 값 초기화된다.
(글을 작성할때, 제목, 내용, 저자만 써서 submit 눌렀을 때 시점에 자동으로 시간값초기화되는 것!)
@Column(updatable = false) //수정시 변경안되도록
private LocalDateTime createdAt; //
@PrePersist //db 저장(insert) 직전에 자동실행. 엔티티 생성시점에 자동으로 값 초기화
public void prePersist(){
this.createdAt = LocalDateTime.now();
}
'백엔드 공부(BE, AWS)' 카테고리의 다른 글
| [Spring] AOP, 직렬화, 람다식 (0) | 2025.11.03 |
|---|---|
| [SpringBoot3]JPA - fetch 타입 (0) | 2025.09.24 |
| 게시판 CRUD 인기순 정렬(조회수기반) (0) | 2025.07.02 |
| Article 파일 수정(오류수정) (0) | 2025.06.30 |
| 기존 mysql 수정 (0) | 2025.06.29 |