25.07.02 생성시각 삽입

2025. 7. 2. 17:20·백엔드 공부(BE, AWS)

서연씨가 써준 코드 기반으로 코드를 수정했어요.

기존에는 조회수, 저자를 추가한 버전이었습니다.

그런데 오류가 났습니다.

 

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
'백엔드 공부(BE, AWS)' 카테고리의 다른 글
  • [Spring] AOP, 직렬화, 람다식
  • [SpringBoot3]JPA - fetch 타입
  • 게시판 CRUD 인기순 정렬(조회수기반)
  • Article 파일 수정(오류수정)
sihyes
sihyes
24학번 컴퓨터공학과
  • sihyes
    시혜적으로개발
    sihyes
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (104) N
      • 단순 설정 (9)
      • 백엔드 공부(BE, AWS) (8)
        • 로그인&회원가입 (3)
        • 파일업로드&GPT (2)
      • 개인 프로젝트 (2)
        • 알바솔로몬 (1)
        • PLACO 프로젝트 (0)
      • 도서 공부(정리) (20)
        • 알고리즘 코딩 테스트 자바 편 (1)
        • SQL첫걸음 (8)
        • 코딩 자율학습 스프링 부트 3 자바 백엔드 개발 .. (6)
        • Do it! 지옥에서 온 문서 관리자 깃&깃허브 .. (5)
      • 컴퓨터공학과 (51)
        • Python - 문해프 (1)
        • Java 1 & 2 (23)
        • 컴퓨터네트워크 (3)
        • 모앱JavaScript (0)
        • Data structures (9)
        • 소프트웨어공학 (5)
        • 오픈SW플랫폼 제출용 (5)
      • 개인공부정리페이지 (8)
        • 백준 (2)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ㅇ
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
sihyes
25.07.02 생성시각 삽입
상단으로

티스토리툴바