일정관리 프로젝트 트러블슈팅

kinkin_a·2025년 2월 3일

내일배움캠프 TIL

목록 보기
51/100

1. 트러블슈팅1)-JAVA버전 충돌로 실행 안됨

배경: Spring 실습이 실행이 안된다!

런타임 아이콘이 main 옆에 떠야하는데 안뜨는 상황.
튜터님 도움으로 오래시간 끙끙대던걸 금방 해결했다.

발단: 자바 버전 확인하기

나는 프로젝트를 제출해야하므로 캠프에서 정해준 17로 해야하는데, 프로그램을 23으로 받아서 version이 23으로 뜰 때가 있다.

자바 버전 확인 명령어 : java --version

전개:

일단 과거에 했던 방법으로

  • File-ProjectStructure에서 corretto-17, SDK Defalut로 바꿔주기

추가적으로 edit에 들어가 17외의 다른 것들은 -를 눌러 삭제하는 것이 좋다.

그리고 File-Setting- Build, Execution, Deployment에서 gradle JVMcorretto-17로 바꿔주기(혹은 settings 검색창에 gradle검색하면 바로 뜸)

위기: 😱그래도 안된다면?

절정- 결말: 파일 디렉토리가 제대로 있는지 확인

잘은 모르겠지만, 이 루트가 잘못되면 실행이 안되니,
최대한 폴더를 바깥으로 빼내서 open하는 것이 좋다고 한다.
나는 기존 폴더 안의 안에 넣었다가 바깥으로 옮기니 실행이 됐고, 또는 새 폴더에 clone 으로 전부 다운 받았는데도 되질 않아, 기존에 프로젝트 했던 폴더로 옮기니 실행이 됨.


2. 트러블슈팅2)- MySQL 비밀번호 재설정

배경: MySQL 비밀번호 재설정

강의 실습을 따라하던 중 인텔리제이와 mysql을 연동해야하는데, 접속이 안되는 문제가 발생. 분명히 비밀번호를 적어둔대로 했으니 비밀번호가 틀린 게 아니라면 다른 게 원인인데 결국 무엇이 원인인지 정확히 모르겠지만 일단 비밀번호를 재설정해서 다시 연동시도해보기로 함.

검색을 아무리 하고 따라해도 안되다가 youtube 에서 어느 고수분의 영상을 보고 한번에 해결.

https://youtu.be/aUpsnwG7zOQ?si=TS9eGF7pkcV2x5Ol

영상보고 하는게 제일 빠르지만, 혹시 모르니 글로 한 번 정리해둔다.

  1. 작업관리자를 열고(alt+ctrl+del) 서비스-MYSQL80을 찾고 시작을 눌러 실행시킨다.
  1. 명령 프롬프트(cmd) 실행 후 mysqld.exe 파일이 있는 경로로 이동한다.
    기본 경로로 sql을 설치했다면 아래와 같을 것.
cd C:\Program Files\MySQL\MySQL Server 8.0\bin

  1. dir mysql.exe로 파일이 있는지 확인 후 비밀번호로 접속 명령어로 접속시도해본다. 성공한다면 여기서 끝내면 된다.
dir mysql.exe
mysql -root -p비밀번호

<실패화면>


잘못된 비밀번호를 입력하면 뜨는 에러메세지. using password: YES 는 비밀번호가 존재하는데, 잘못된 비밀번호를 입력했다는 뜻

  1. 다시 작업관리자- 서비스로 가서 MySQL80을 중지시킨다. 오른쪽 버튼 클릭 후 중지

  2. 메모장 파일을 열어 다음과 같이 입력후 mysql_init.txt로 저장(다른 파일명도 상관없음)

ALTER USER 'root'@'localhost' IDENTIFIED BY '새로운 비밀번호';

  1. 명령프롬프트 창을 관리자 권한으로 하나 더 연다.
  1. 다시 작업관리자 - 서비스로 가서 MYSQL80에서 서비스 실행 후 새창에서 더블클릭해 실행파일경로를 확인한다. 마지막 MYSQL80 전까지의 경로를 복사하면 해결.

  1. 메모장을 새로 열어 위에서 복사한 경로를 붙여 넣고 --init-file= 을 추가로 적은 후 조금 전에 저장한 mysql_init.txt의 경로를 추가해 적는다.
--init-file="저장한 메모장의 경로명"

  1. 아까 전에 실행한 관리자 권한 명령프롬프트 창을 열어 복붙하고 엔터를 친다. 아무 화면도 뜨지 않는다면 정상적으로 실행된 것.

10.다시 처음에 열었던 명령프롬프트 창을 열어서 다시 sql 접속 명령어를 입력해본다.

mysql -root -p새로운 비밀번호


위와 같은 창이 뜬다면 재설정 성공.

exit 를 눌러 종료하면 끝!

다행히 IntelliJ에서 새로운 비밀번호로 연결하니 한 번에 연결.

그 후에 console 창 찾기랑 db연결에 조금 헤맸지만 결국은 잘돼서 다행(mysql80 서비스가 중단된 상태라 연결이 안됐던거라 허무..;)

오류 한 번 날 때마다 해결에 시간이 너무 걸려서 고생이다.

3. 트러블슈팅 3)-> 외래키 설정

배경: 작성자 테이블을 추가하는 조건에 외래키를 설정해야 한다는 것이 있어서, 내가 알고 있는 지식대로 했으나 실행이 안됨.

<초기 명령문>

검색을 해보니 외래키인 writer_id는 index 추가 설정이 필요.

CREATE INDEX idx_writer_id ON schedule (writer_id);

이 명령문을 작성하니 해결되었다. 더해서 writerid을 중복을 허용하면, writer 테이블을 작성한 의미가 없어지므로 UNIQUE 를 붙임

<최종 명령문>

4. 트러블슈팅 4) -> postman에서 에러 처리를 못함

배경: 왜인지 다른 에러처리를 모두 postman상태메시지로 뜨는데, 비밀번호만 유독 에러가 안됨. 로그는 정상적으로 작동하지만 postman에서는 비밀번호가 틀려도 200ok로 뜨고 에러상태메시지가 뜨질 않음. 몇시간을 고민하다 튜터님들의 도움으로 해결.

<초기 repository 코드>

  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 생성자 필드 수 맞추기 등 각종 에러에 시간을 잡아먹음.

  • 가장 기본적인 것을 실수했는데 url의 단어를 모두 복수로 작성해야하는데, 단수로 작성한 것
    schedule-> schedules
    user-> users

다시 복습

0개의 댓글