과제 2. 키오스크 트러블슈팅

kinkin_a·2025년 1월 19일

내일배움캠프 TIL

목록 보기
44/100

트러블슈팅1) 에러 처리

  • 개요: 과제 요구사항대로 사용자 입력 문자에 따라 에러 처리를 하려고 했으나, 의도한 대로 되지 않음.
  • 트러블 슈팅
    • 배경 : 키오스크 필수과제 Level.3에서 요구하는 유효하지 않은 입력에 대해 오류메시지 출력하기 코드 구현을 시도함.

    • 발단 :

      처음 구현 한 코드->


 k = sc.nextInt();
...

else if (k >= num) {
        throw new IllegalArgumentException("메뉴에 있는 번호를 입력하세요); }
자료형역할
k : int입력 변수
num : int마지막 메뉴 번호 변수

사용자에게 입력받은 번호를 정수형 k 변수에 넣어, 마지막 메뉴번호 이상을 입력하면 오류메시지를 출력하는 예외처리를 구현하려 했으나 실패.

  • 전개 : 에러의 원인 검색 후, 메인에서 kiosk.start()를 try-catch문으로 감쌌으나 일시적으로 해결, 하지만 에러 처리 후 프로그램이 바로 종료되었고, 과제 요구 사항과 맞지 않았음.

  • 위기 : 단순히 에러를 if문으로 처리하기보다 다른 구현방식이 있나 찾아보기로 함.

  • 절정 : 에러 원인보다 에러 개념과 종류를 공부해보기로 함. 그 중 나한테 필요한 예외처리는, 프로그램이 요구하는 것은 nextInt() 정수형이지만 문자형을 입력한 경우의 InputMismatchException 라는 에러였고, 애초에 내가 구현하고자 하는 예외처리는 사용자가 프로그램의 요구에 맞게 정수를 입력했으므로, 프로그램상 에러가 아니었음.

  • 결말 :
    최종 구현 코드-> 메뉴번호 이상을 입력한 경우는 단순한 출력문으로 오류메시지를 띄우고, 정수가 아닌 문자를 입력했을 경우는 try- catch문으로 InputMismatchException 예외처리를 함.

트러블슈팅2) git을 잘 못 썼더니 파일 증발

  • 개요 : github에 중간 저장 파일을 올리려 했으나 충돌이 발생했고, 충돌을 해결하려던 중 작업한 파일이 모두 사라짐
  • 배경 : 기존 github main 브런치에 현재 작업한 과제2 파일들을 폴더 째로 올리려 했으나 에러가 뜸.
! [rejected] main -> main (non-fast-forward)
  • 발단 : 에러 검색을 하니, 원격 저장소의 commit과 내가 작업한 로컬 저장소의 commit 내역이 달라 충돌이 발생한 것.
    github가 하나의 디렉토리와 파일에서 시작하는 건데, 나는 원격 저장소에는 다른 디렉토리의 다른 파일을 쓰고, 현재 작업은 다른 디렉토리의 다른 파일을 쓰니 충돌이 생길 수밖에 없었음.
  • 전개 : 가장 기본적인 명령어 pull과 push를 반복해 봄.
  • 위기 : pull을 하니 내가 작업한 파일들이 모두 사라지고 원격 저장소의 파일이 덮어씌어짐. 내가 원하던 것은 merge였는데, 왜 작업파일이 사라졌는지 이해할 수가 없었음.
  • 절정 : 당황했지만 침착하며 git 복원 방법을 검색해 보니

    git reflog

라는 명령어가 있음. git log와 비슷하지만 좀 더 상세하게 브런치 변경 등 git 작업 변경 내역을 보여주는 명령어임.
git reflog 로 파일이 사라지기 직전이 어느 위치인지 확인 후 ,

git checkout 헤드주소(ex)HEAD@{2})

명령어를 입력하니 그 커밋 시점으로 돌아가서 파일이 다시 원상복구됨. head@{숫자}가 0에 가까워질수록 좀 더 과거 이력으로 돌아감.

  • 결말 : 파일 복원 후, 원격 저장소에서 새 브런치를 생성해 그곳에 따로 push해서 해결.

(+나중에 main과 병합하려 했지만, 시간낭비가 심할 것 같아, 새 레포지토리를 생성 후 새 폴더에 복붙해 main 에 push함. 하지만 이곳에도 두 저장공간이 commit 이력이 다르다는 이유로 충돌이 발생했고,

git pull origin main --allow-unrelated-histories

명령어로 병합해 push해서 해결.
새 레포지토리에도 commit이력이 생길수가 있을까?; read me파일생성 체크박스를 클릭한 게 일을 더 복잡하게 만든지도 모르겠다.)

0개의 댓글