문제1
중복된 이메일이 생성은 되는데 이후에 로그인 하려고 하니까 NonUniqueResultException 예외가 뜸

해결과정
@Column(unique = true)
email 은 로그인할때 고유하게 사용되어야하는 값이기 때문에 unique 로 만들어줬습니다.

이제 중복된 이메일이 등록되진 않는데 500 error 가 발생하고 뭐때문에 발생했는지 알 수 없음...
400 + 중복된 이메일입니다 를 출력해주고싶어요
-> 새로 exception 만들어주기

결론
나이 등 일상생활에서 중복을 허용하는 필드를 제외하곤 unique 를 달아주도록 하자!
문제2
댓글 전체조회와 일정 단건을 조회하면 모든 댓글이 출력되어야하는데 처음 넣은 댓글 하나만 출력된다.
해결과정
Comment 는 Schedule ID 를 갖고있는게 아니라 schedule 을 갖고있었음
근데 나는 아래처럼 commentList 를 받아오고 있었다....
List<Comment> commentList = commentRepository.findAllById(schedule.getId());
근데 또 어이없었던건... 하나만 조회되던가 아예 조회 안되어야하는거 아닌가?
-> 아님!!!!
findAllById 메서드는 엔티티의 PK 를 기준으로 조회하는 메서드
-> findAllById 는 댓글의 id 가 schedule.getId() 인 댓글을 찾는 의미이다....
즉 내가 찾던건 comment.id == schedule.id 인 댓글이었기때문에 schedule.id 가 1이면 첫번째 댓글만 조회되는 것이었다.. 바보!
List<Comment> commentList = commentRepository.findAllBySchedule(schedule);
아래처럼 고쳐주니 정상적으로 동작한다.
결론
findAllById 는 엔티티의 PK 를 기준으로 조회
JPA repository 가 자동으로 만들어주는 메서드를 사용할때는 주의하기
문제3
password encoding 을 하려고 하니까 크기가 6에서 20 사이어야한다는 오류메시지가 출력됨
ConstraintViolationException


해결과정
기준이 DB 에 저장되는 기준인듯하다.
column 의 사이즈 어노테이션을 entity 가 아니라 request 로 옮겨주어 저장해야할것같다.
수정해주니까 정상적으로 동작한다.

해시를 사용해서 암호화하면 얼마나 pw 가 길어지는지 궁금해서 print 해서 확인해봤더니

a 가 이렇게나 많은데 중복되는 부분이 없어서 뭐지? 했는데 hash 는 원래 복호화가 안 되는 단방향 암호화 라고 한다 신기
결론
작성한 코드는 암호화 -> DB에 저장 순서로 이루어짐
Entity 에 어노테이션으로 길이를 지정해주는건 DB에 저장할때 확인하므로 DB 입장에선 이미 암호화 된 pw 인 엄청 긴... 해시값을 받게 되므로 오류가 발생함
request DTO 에서 입력값을 검증하고 넘겨야함
문제4
작성하면서 생각났는데 그럼 엔티티에 어노테이션으로 체크를 해줘야하는지 DTO 에 어노테이션으로 체크를 해줘야하는지 모르겠다... 입력값은 DTO 에서 확인을 먼저 하고 request 로 보내는 게 맞는거같기도 하고 NotBlank 같은건 NOT NULL 로 ERD 에도 적어줬던 거 같아서 더 헷갈림
해결과정
일단 방금 문제를 해결하며 입력값 검증은 DTO 에 붙이는게 맞는 것 같음
잘못된 입력이 들어오면 사용자 잘못이니까 DB 까지 안보내고 바로 오류메시지를 @Valid 를 사용해서 출력해줄 수 있으니까...
Entity 에는 다른거 붙이지말고 아래 코드정도만 붙여주는 게 좋을듯 하다
@Column(nullable = false, length = 255)
수정지옥에 빠짐 - _ -
Schedule DTO
이상하게 이건 entity 와 request 에 똑같은 어노테이션 (@Size(max = 30) 같은거...) 를 다 넣어뒀다
불안했나보다... entity 만 수정해줌!
Comment DTO
여긴 아예 request DTO 에 어노테이션이 없길래 새로 만들어줬다
댓글은 생성과 삭제밖에 안 돼서 DTO 가 하나! 넘 좋다
User DTO
login 할 때는 일부러 email 과 pw 의 입력값 검증을 넣어주지 않았다 (@NotBlank 만 넣음)
어차피 틀리면 로그인이 안 되는거니까...
회원가입, 수정 할때는 @NotBlank @Size @Pattern 을 꼼꼼히 넣어줬다
엔티티 제약조건은 이후에 ERD 에 꼼꼼히 그려넣어보도록
결론
어노테이션도 잘 구분해서 붙여주자~
| DTO | Entity |
| @Size @Max @Min @NotBlank @Pattern . . . |
@Column @Id @GeneratedValue @ManyToOne @JoinColumn . . . |
'SPARTA 과제 > SPRING' 카테고리의 다른 글
| 숙련) 일정관리앱 트러블슈팅 (4) (0) | 2026.02.13 |
|---|---|
| 숙련) 일정관리앱 트러블슈팅 (3) (0) | 2026.02.12 |
| 숙련) 일정관리앱 트러블슈팅 (1) (0) | 2026.02.11 |
| 숙련) 일정관리앱 업그레이드 초기설정 (1) | 2026.02.10 |
| Schedule README (0) | 2026.02.05 |