런타임 아이콘이 main 옆에 떠야하는데 안뜨는 상황.
튜터님 도움으로 오래시간 끙끙대던걸 금방 해결했다.
나는 프로젝트를 제출해야하므로 캠프에서 정해준 17로 해야하는데, 프로그램을 23으로 받아서 version이 23으로 뜰 때가 있다.
자바 버전 확인 명령어 : java --version
일단 과거에 했던 방법으로
추가적으로 edit에 들어가 17외의 다른 것들은 -를 눌러 삭제하는 것이 좋다.
그리고 File-Setting- Build, Execution, Deployment에서 gradle JVM을 corretto-17로 바꿔주기(혹은 settings 검색창에 gradle검색하면 바로 뜸)
잘은 모르겠지만, 이 루트가 잘못되면 실행이 안되니,
최대한 폴더를 바깥으로 빼내서 open하는 것이 좋다고 한다.
나는 기존 폴더 안의 안에 넣었다가 바깥으로 옮기니 실행이 됐고, 또는 새 폴더에 clone 으로 전부 다운 받았는데도 되질 않아, 기존에 프로젝트 했던 폴더로 옮기니 실행이 됨.
강의 실습을 따라하던 중 인텔리제이와 mysql을 연동해야하는데, 접속이 안되는 문제가 발생. 분명히 비밀번호를 적어둔대로 했으니 비밀번호가 틀린 게 아니라면 다른 게 원인인데 결국 무엇이 원인인지 정확히 모르겠지만 일단 비밀번호를 재설정해서 다시 연동시도해보기로 함.
검색을 아무리 하고 따라해도 안되다가 youtube 에서 어느 고수분의 영상을 보고 한번에 해결.
https://youtu.be/aUpsnwG7zOQ?si=TS9eGF7pkcV2x5Ol
영상보고 하는게 제일 빠르지만, 혹시 모르니 글로 한 번 정리해둔다.
cd C:\Program Files\MySQL\MySQL Server 8.0\bin
dir mysql.exe
mysql -root -p비밀번호
<실패화면>
잘못된 비밀번호를 입력하면 뜨는 에러메세지. using password: YES 는 비밀번호가 존재하는데, 잘못된 비밀번호를 입력했다는 뜻
다시 작업관리자- 서비스로 가서 MySQL80을 중지시킨다. 오른쪽 버튼 클릭 후 중지
메모장 파일을 열어 다음과 같이 입력후 mysql_init.txt로 저장(다른 파일명도 상관없음)
ALTER USER 'root'@'localhost' IDENTIFIED BY '새로운 비밀번호';
--init-file="저장한 메모장의 경로명"
10.다시 처음에 열었던 명령프롬프트 창을 열어서 다시 sql 접속 명령어를 입력해본다.
mysql -root -p새로운 비밀번호
위와 같은 창이 뜬다면 재설정 성공.
exit 를 눌러 종료하면 끝!
다행히 IntelliJ에서 새로운 비밀번호로 연결하니 한 번에 연결.
그 후에 console 창 찾기랑 db연결에 조금 헤맸지만 결국은 잘돼서 다행(mysql80 서비스가 중단된 상태라 연결이 안됐던거라 허무..;)
오류 한 번 날 때마다 해결에 시간이 너무 걸려서 고생이다.
<초기 명령문>
검색을 해보니 외래키인 writer_id는 index 추가 설정이 필요.
CREATE INDEX idx_writer_id ON schedule (writer_id);
이 명령문을 작성하니 해결되었다. 더해서 writerid을 중복을 허용하면, writer 테이블을 작성한 의미가 없어지므로 UNIQUE 를 붙임
<최종 명령문>
배경: 왜인지 다른 에러처리를 모두 postman상태메시지로 뜨는데, 비밀번호만 유독 에러가 안됨. 로그는 정상적으로 작동하지만 postman에서는 비밀번호가 틀려도 200ok로 뜨고 에러상태메시지가 뜨질 않음. 몇시간을 고민하다 튜터님들의 도움으로 해결.
public int deleteSchedule(Long id, String password) {
int deletedRow= jdbcTemplate.update("delete from schedule where id = ? and password= ? ", id, password);
return deletedRow;
}
....
public void deleteSchedule(Long id, Map<String, String> password) {
int deletedRow = scheduleRepository.deleteSchedule(id, password.get("password"));
...
if (deletedRow == 0) {
throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "Failed to delete user.");
}
결론부터 말하자면 내가 controller에서 try-catch문으로 에러를 통틀어 log 처리를 하고, return 값에 HttpStatus.OK로 고정시켰기 때문.
그래서 try-catch문을 없애니 간단히 해결 됨.
그 외에도 groovy->java 로 바꾸기, LocalDateTime 형 변환, response 생성자 필드 수 맞추기 등 각종 에러에 시간을 잡아먹음.
다시 복습
