1. 강의 질문
  2. 개발/데이터

course 3 게시글 생성 500 에러 발생

2026.08.12 19:46 작성

코드도 다 똑같이 한 상태에서 게시글 생성을 누르면 500에러가 뜨고 인텔리제이에서

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.dao.InvalidDataAccessApiUsageException: The given id must not be null] with root cause

이 오류 문구 발생합니다.


찾아보니 게시글 작성할 때 json에 board_id가 없다는 이유로 오류가 뜬거라는데, PostRequest 클래스에서는 board_id = 1L로 해놨고, 강의에서도 따로 boartd_id를 json에 넣어 요청하지 않아도 잘 만들어 졌는데 제 환경에서는 저런 오류가 뜨네요.




package com.example.simpleboard.post.model;



import jakarta.validation.constraints.Email;

import jakarta.validation.constraints.NotBlank;

import jakarta.validation.constraints.Size;

import lombok.*;

import tools.jackson.databind.PropertyNamingStrategies;

import tools.jackson.databind.annotation.JsonNaming;



Getter

Setter

ToString

Builder

NoArgsConstructor

AllArgsConstructor

JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class)

public class PostRequest {


private Long boardId = 1L;


NotBlank

private String userName;


NotBlank

Size(min = 4, max = 4)

private String password;


NotBlank

Email

private String email;


NotBlank

private String title;


NotBlank

private String content;



}



package com.example.simpleboard.post.service;



import com.example.simpleboard.board.db.BoardRepository;

import com.example.simpleboard.post.db.PostEntity;

import com.example.simpleboard.post.db.PostRepository;

import com.example.simpleboard.post.model.PostRequest;

import com.example.simpleboard.post.model.PostViewRequest;

import jakarta.validation.Valid;

import lombok.RequiredArgsConstructor;

import org.springframework.stereotype.Service;


import java.time.LocalDateTime;

import java.util.List;


RequiredArgsConstructor

Service

public class PostService {


private final PostRepository postRepository;


private final BoardRepository boardRepository;



public PostEntity create(

PostRequest postRequest

) {

var boardEntity = boardRepository.findById(postRequest.getBoardId()).get();


PostEntity entity = PostEntity.builder()

.board(boardEntity)

.userName(postRequest.getUserName())

.password(postRequest.getPassword())

.email(postRequest.getEmail())

.status("REGISTERED")

.title(postRequest.getTitle())

.content(postRequest.getContent())

.postedAt(LocalDateTime.now())

.build();


return postRepository.save(entity);





}



public PostEntity view(

Valid PostViewRequest postViewRequest

) {

return postRepository.findFirstByIdAndStatusOrderByIdDesc(postViewRequest.getPostId(), "REGISTERED")

.map(

it-> {

// entity 존재

if(!it.getPassword().equals(postViewRequest.getPassword())) {

var format = "패스워드가 맞지 않습니다 %s vs %s";


throw new RuntimeException(String.format(format, it.getPassword(), postViewRequest.getPassword()));

}


return it;

}

)

.orElseThrow( // 해당 데이터가 없다면

() -> {

return new RuntimeException("해당 게시글이 존재하지 않습니다 : " + postViewRequest.getPostId());

}

);

}


public List<PostEntity> all() {

return postRepository.findAll();

}


public void delete(Valid PostViewRequest postViewRequest) {

postRepository.findById(postViewRequest.getPostId())

.map(

it-> {

// entity 존재

if(!it.getPassword().equals(postViewRequest.getPassword())) {

var format = "패스워드가 맞지 않습니다 %s vs %s";


throw new RuntimeException(String.format(format, it.getPassword(), postViewRequest.getPassword()));

}


it.setStatus("UNREGISTERED");

postRepository.save(it);


return it;

}

)

.orElseThrow( // 해당 데이터가 없다면

() -> {

return new RuntimeException("해당 게시글이 존재하지 않습니다 : " + postViewRequest.getPostId());

}

);

}

}



PostRequest랑 PostService 코드도 첨부하겠습니다.

어노테이션은 금칙어라 제하고 올립니다.


답변 

연관 질문

커뮤니티 질문보기