[트러블슈팅] 일정develop과제

wonyeol shin·2026년 7월 8일

트러블슈팅

목록 보기
2/4

생성일 수정일이 null임

    @Transactional
    public CreateUserResponse createUser(CreateUserRequest request) {
        User savedUser = userRepository.save( new User(
                request.getUserName(), request.getEmail(), request.getPassword()));

        return new CreateUserResponse(
                savedUser.getId(),
                savedUser.getUserName(),
                savedUser.getEmail(),
                savedUser.getCreateDate(),
                savedUser.getModifiedDate()
        );
    }

getCreateDate, getModifiedDate 모두 Null인 상황

@SpringBootApplication
public class SchdeduledevelopApplication {

    public static void main(String[] args) {
        SpringApplication.run(SchdeduledevelopApplication.class, args);
    }

}

스프링 main에 @EnableJpaAuditing 이 빠져있었음


Unsupported Media Type

Json으로 보내지 않고 text 타입으로 보냈음


@Max 잘못사용

@Getter
public class CreateUserRequest {
    @NotBlank(message = "이름, 이메일, 패스워드는 필수값이며 공백은 사용 불가능합니다.")
    @Size(min = 2, max = 20, message = "사용자 이름은 2~20 글자까지 입력 가능합니다.")
    private String userName;
    @NotBlank(message = "이름, 이메일, 패스워드는 필수값이며 공백은 사용 불가능합니다.")
    @Email(message = "이메일 형식이 아닙니다.")
    @Max(value = 50, message = "이메일은 최대 50 글자까지 입력 가능합니다.")
    private String email;
    @NotBlank(message = "이름, 이메일, 패스워드는 필수값이며 공백은 사용 불가능합니다.")
    @Max(value = 50, message = "패스워드는 최대 50 글자까지 입력 가능합니다.")
    private String password;
}

Max가 최대값을 의미하는 줄 알았음
@Size(min = 4, max = 50) 형식으로 변경


패스워드 암호화 저장을 하여 패스워드 불일치

   @Transactional
    public CreateUserResponse createUser(CreateUserRequest request) {
        User savedUser = userRepository.save( new User(
                request.getUserName(), request.getEmail(), passwordEncoder.encode(request.getPassword())));
        return new CreateUserResponse(
                savedUser.getId(),
                savedUser.getUserName(),
                savedUser.getEmail(),
                savedUser.getCreateDate(),
                savedUser.getModifiedDate()
        );
    }

    @Transactional(readOnly = true)
    public LoginUserForSession userLogin(LoginUserRequest request) {
        System.out.println(passwordEncoder.encode(request.getPassword()));
       User user = userRepository.findByEmailAndPassword(
               request.getEmail(), passwordEncoder.encode(request.getPassword())).orElseThrow(
               () -> new LoginFailureException("email 또는 password가 틀렸습니다.")
       );
        return new LoginUserForSession(user.getId(), user.getUserName());
    }

encode() 를 하면 값이 같을 경우 항상 같은 해시 값을 주는것으로 오해했음
할때마다 결과가 달리지기 때문에 단순히 DB에 저장된것 decode하고 나서
입력값의 password를 match로 비교해야 됐음


생성일, 수정일이 나오지 않음

@Getter
@Entity
@Table(name = "comments")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Comment extends CommonEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String comment;

    @ManyToOne
    @JoinColumn(name = "schedule_id")
    private Schedule schedule;

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;

    public Comment(String comment, Schedule schedule, User user) {
        this.comment = comment;
        this.schedule = schedule;
        this.user = user;
    }

    public void updateComment(String comment) {
        this.comment = comment;
    }
}

댓글 엔티티를 만들었는데 get생성일, get수정일이 나오지 않음
@Getter는 잘 있고 다른 엔티티들의 생성일, 수정일은 아무 문제 없었음

그런데 Auditing 의 클래스 이름이 CommonEntity가 아니라 BaseEntity 였음
CommonEntity는 패스워드 암호화를 위해 만들었던 클래스임

클래스 이름이 명확하지 않았던것이 문제라
다음 프로젝트에는 공통 클래스 이름을 조금 더 명확하게 할 필요가 있어보임

profile
백앤드 개발자 준비생

0개의 댓글