개발일지 82

[개발] intellij - h2 DB에서 MySQL로 변경하기

🛤️상황 처음에 이 프로젝트(한이음)를 시작할 때 가볍게 h2 DB를 사용하다가 추후에 MySql로 변경하기로 했다. 지금 시점에서 곧 서버에 올려 배포를 해볼 예정이라 오늘 변경하기로 하였다. 이미 내 컴퓨터에는 mysql이 설치된 상태 프로젝트도 h2로 잘 구동되고 있는 상태 connector는 내가 따로 프로젝트에 import 한 기억은 없지만 프로젝트 생성 시에 다른 백엔드 팀원이 import 한 것으로 추정됨. (connector 없이 구동되지는 않을 테니까) 🌸과정/해결 application.properties 파일에 설정 정보를 확실하게 기입하기 build.gradle에 필요한 의존성 확실히 기입

[개발] 기능추가 - school 데이터의 추가(dept, tag 테이블)

🛤️상황 기존에 학교에 대한 정보에 해당 학교에 대한 학과나 태그에 대한 정보는 반환하지 않았다. 하지만 반드시 필요한 정보들이기 때문에 그 부분을 내가 개발하기로 하였다. 학과나 태그는 하나의 학교에 여러 가지 값들을 갖는 테이블이기 때문에 school 테이블의 입장에서 학과와 tag는 @OneToMany 관계이다. 🗝️과정/해결 @OneToMany(mappedBy = "schoolId", cascade = CascadeType.ALL) private List tag; tag는 여러 값들이 하나의 school에 존재하니 List 형태로 저장하기로 했다. school 테이블의 깔끔함(?)을 위해서 db에 직접 저장되는 방식이 아닌 것으로 선택했다. (학과(dept)도 동일한 방식으로 진행) @ManyTo..

[개발]🚨ERROR -java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row:

외래 키 제약 조건을 위반하여 자식 행을 추가하거나 업데이트할 수 없을 때 발생하는 예외로 데이터베이스에서 외래 키 관계를 갖는 테이블 간의 일관성을 유지하기 위해 발생합니다. 일반적인 해결방법 외래 키 또는 유니크 제약 조건을 확인하고, 데이터베이스 스키마를 수정하여 제약 조건을 준수하도록 조정 작업 전에 데이터베이스 상태를 검사하여 제약 조건을 위배하지 않는지 확인 참조하는 테이블에 레코드를 먼저 추가한 후, 참조받는 테이블에 레코드를 추가 내가 해결한 방법 참조하는 테이블의 레코드를 먼저 삽입한 뒤에 참조받는 테이블의 레코드를 삽입해봤지만 여전히 실패... 그래서.... DB에 있는 테이블을 한번에 동시에 삭제한다. 참조하는 테이블의 레코드를 먼저 insert 한다. 그 뒤에 참조받는 레코드를 in..

[개발]🚨ERROR - java.lang.IllegalArgumentException: rawPassword cannot be null

🛤️상황 회원가입/로그인이 기존에 GET방식이었어서 POST 방식으로 바꾸려 하는데 이러한 오류가 발생하였다. 🌸과정 401 Unauthorized는 클라이언트 요청이 필요한 인증 자격증명을 제공하지 않았거나 인증이 실패한 경우에 사용되는 HTTP 상태 코드입니다. 즉, 클라이언트는 요청한 리소스에 접근하기 위해 유효한 자격증명(사용자 이름과 비밀번호 또는 인증 토큰 등)을 제공해야 하지만, 제공하지 못하거나 인증에 실패한 상태입니다. 라는 이유로 BCryptPasswordEncoder도 수정해 보고, springSecurity 쪽도 이것저것 시도(코드추가, 클래스 추가) 하느라 3시간이 흘렀다... 🗝️해결 @RequestBody를 매개변수에 붙이니 바로 해결되었다.... 이러한 기초적인(?) 실수를 ..

[개발] [spring boot] 좋아요 기능 개수 제한하기_성공

🤔전 상황 / 원인분석 전전 글에서 좋아요 개수 제한하기에 성공했다고 했었는데 계속 다양한 경우의 수로 테스트를 해보니 중간에 제대로 List에 add가 안 되거나, 개수가 자기 마음대로 나오는 등 그 코드는 실패한 코드였다. 애초에 DB에 저장하는 게 아니라 그냥 로컬(?)에만 담겨있는 favoriteSchool 변수에 무결성을 유지하면서 잘 작동할 수 있는지도 미지수긴 하다. 🌸해결과정 생각해 보니 반드시 저 정보들은 DB에 있어야 언제든지 변경과 불러오기가 가능할 거 같았다. 개수를 제한하는 것도 그냥 테이블에 있는 유저 id를 조회해서 하나의 유저가 10 이상의 레코드를 가지지 못하게 개수를 세면 될 거 같았다. 🗝️해결 @PostMapping public ResponseDTO addHeart(H..

[개발] 🎁배운점 - Optional 클래스에서 getId() 사용하기

if (school.isPresent() && !user.getFavoriteSchool().contains(school.get())) { School newSchool = new School(); newSchool.setId(school.getId()); // newSchool에 다른 필드가 있다면 해당 필드도 설정해주세요. user.getFavoriteSchools().add(newSchool); } 3번째 줄에서 getId() 함수를 사용할 수 없었다. 그런데 나는 반드시 Id 값을 얻어와야 하는 상황이어서 꼭 해결을 해야 했다. school은 Optional 타입이기 때문에 .get()메서드를 호출하여 School 객체를 얻은 후에 getId()를 호출할 수 있다. 따라서, school.get()..

[개발]🚨ERROR - cannot find symbol(클래스) 에러

🛤️현상 여러 블로그들을 검색해서 각종 방법들을 시도/체크 해보았다. 해당 클래스가 존재하지 않는가? ➡️ NO❌ 해당 클래스를 사용할 때 철자를 틀리게 적었는가? ➡️ NO❌ Build > Rebuild Project 를 시도해보지 않았는가 ? ➡️ NO❌ File > Invalidate Caches... 를 시도해보지 않았는가 ? ➡️ NO❌ 클래스 패스를 정확하게 import 해보지 않았는가 ? ➡️ NO❌ ➡️한마디로 블로그에서 본 방법을 사용해도 해결되지 않았다는 것이다!! (이 문제 때문에 거의 하루동안 다른 개발을 진행할 수 없었다ㅠㅠ) 🗝️해결 프로젝트에서 HeartDTO를 찾지 못해서 발생한 일 같다. 그래서 자포자기하는 심정으로 HeartDTO ➡️ DTO로 클래스 이름을 바꾸니까 He..

[개발]🎁배운점 - @JoinColumn이 없다면??

🛤️현상 나는 userid 필드만 entity 클래스에 선언했지 userid_id는 만든 적도 사용한 적도 없는데 갑자기 DB에서 띠용~하고 나타난 것이다!!! 🤔 🌸과정 분명히 이렇게 된 데에는 이유가 있을 텐데... DB에 저런 식으로 속성이 생성됐다는 것은 entity 클래스에 원인이 있다고 유추할 수 있다. 그래서 검색해보 외래키를 사용하는 칼럼에 @JoinColumn를 사용하지 않아서 발생한 일일 수 있다고 했다. 🗝️해결 참고로 name을 지정할 때는 모두 소문자로 적어주는 것이 좋다고 한다. 일반적으로 데이터베이스에서는 소문자로 구성된 칼럼 이름을 사용하는 것이 일관성을 유지하고 가독성을 높이는 데 도움이 됩니다. 따라서 JPA에서도 칼럼 이름을 소문자로 작성하는 것이 권장되는 관례입니다.