[Spring] 내 로컬에서는 잘 되던데..? (내로잘 체험기 feat.ddl-auto)
3줄 요약
1. main 병합 후 서버에서 404 Not Found 오류 발생
2. ddl-auto : none 설정 발견
3. MySQLWorkbench로 외부키 설정 후 오류 해결
사이드 프로젝트를 무사히 마치고 유지 보수를 진행하며..
스터디 댓글 권한 기능을 추가하고 main 브랜치로 병합하면서 지옥문이 열렸다 🤡
나는 댓글 삭제 부분만 건드렸고 로컬에서도 제대로 작동했기에 main 브랜치로 병합했는데..
서버단에서.. 댓글 삭제는 무슨.. 댓글 작성부터 에러가 발생했다 하하 나한테 왜 이런 시련이
Language : JAVA
Framework : SpringBoot
Database : MySQL
Test : Postman
Tools : AWS, Github Actions
일단 서버에서 무슨 문제가 생겼는지 알아보기 위해 EC2 내 로그 파일을 확인하기로 했다
$ cd ubuntu/action/build/libs
$ sudo tail -f nohup.out
로그 기록도 끊겨있고.. 산 넘어 산이다..
백엔드 팀원분에게 에러 내용을 공유하고 얘기를 나눴는데..
추가 에러 발생
와우.. Comment 뿐만 아니라 Task 도메인도 Study Not Found 404 에러가 발생했다..
원인 분석
연관 관계를 대충 설명하자면
Study(상위) > Task > StudyComment(하위)로 설계되어 있다
Task에서 발생한 에러는 내가 main으로 병합한 후에 생긴 문제라 StudyComment 에러로 인해 발생한 것 같다
병합 시 브랜치들 간의 충돌이 있었나 ?
: NO
병합 후 코드 중복이 있었나?
: NO
파라미터 변수를 잘못 입력했나?
: NO
Study 객체? 에 Null 값으로 들어왔나?
: NO, BreakPoint를 걸어 디버깅한 결과 정상적으로 값이 들어오는 걸 확인했다
백엔드 팀원분과 에러에 관해 얘기를 나누다 한 가지가 번뜩 떠올랐다.
나 : 스터디 댓글을 작성하려면 로직 상 StudyId를 알아야 하는데 Task 만 매핑되어있고 Study와는 연관 관계 매핑이 안되어 있더라. 그래서 Study와 1대다 매핑을 해주었다. 그리고 로컬에서 테스트해봤을 땐 문제가 없었다.
팀원 : ❗️JPA ddl-auto 문제인 것 같다. 배포 후 ddl-auto를 create -> none 으로 변경했다. 로컬에서는 create로 설정되어 있기 때문에 변경 부분이 DB에 바로 반영되었지만, 서버에서는 none으로 설정되어 있기 때문에 외부키 참조를 직접 설정해줘야 할 거다.
유레카.. 까맣게 잊고 있던 ddl-auto.. 원인도 파악했겠다.. 이제 외부키 참조만 해주면 된다
해결
MySQLWorkbench를 이용해 foreign-key를 추가해 줬다.
1. foreign-key로 사용할 컬럼을 추가한다
2. foreign-key를 지정해 준다 (+ 스터디가 삭제되면 스터디 댓글도 삭제되어야 하므로 on delete cascade 옵션을 추가해 줬다)
alter table test.study_comment add study_id bigint(255);
alter table test.study_comment add foreign key(study_id) references test.study(study_id) on delete cascade;
Postman으로 테스트해본 결과.. 캡처는 등록 / 조회만 했지만 CRUD 전부 제대로 작동하는 것을 확인했다
조금만 생각했다면 금방 해결했을 문제지만 나는 Spring / JPA 초보자.. 공부의 필요성을 느꼈다
아직 많이 부족한 실력이지만.. 한 단계 성장한 것 같다
OAuth, CI/CD, 회고 블로깅은 언제쯤?..
참고한 블로그.. 존경하고 항상 감사합니다 !
https://happylulurara.tistory.com/127
[mySQL]컬럼 추가삭제, 외래키 지정/삭제, 제약조건확인
CREATE TABLE ids_info( GTIN_13 varchar(14), PRIMARY KEY(order_id), FOREIGN KEY (product_id) REFERENCES products ); 외래키를 처음부터 이렇게 잘 만들어놨다면 상관없지만, 중간에 외래키를 추가/변경해야 할 때가 있다. 난
happylulurara.tistory.com