삽추란 : 삽질의 추억
개발을 하면서 수많은 삽질을 하게 되는데 이 순간이 뙇 삽질이다!하며 오지 않고 가랑비에 옷 젖듯이 자연스럽게 찾아오는 것 같다
풀스택 개발자(라고 하고 백,프론트 둘다 무지렁이라고 읽는다)로 프로젝트를 하는 중 로그인 버튼을 누르면 화면이 reload가 되는 어처구니 없는 상황이 생겼다. (심지어 라우터간지 react인데!!)
실무를 하면서 느낀건데 jsp처럼 화면이 reload된다는건 약간 촌스러운(?) 상황으로 여겨지는 것 같다. (우리 회사 기준일 수 있음)
개발 고인물 사수님까지 붙어서 원인을 찾아냈다.
우리의 해결 flow는 아래와 같다.
1.
프론트 단의 button이 form안에 있어서 submit 된건가? (흔한 실수- 하지만 아니였음)
2.
axios를 써서 그런가? fetch를 써볼까 (아닌 것 같음)
3.
로그인 버튼을 누르고 성공이면 reload가 되지않음을 보고 사수님이 백단쪽 문제라는걸 발견하심 역시 갓사수님..
해결 - 백단에서 인증확인 메소드 catch문의 throw e; 라고 써있는 부분을 고쳐줬다.
이것은 security+jwt를 적용하면서 제대로 확인 안해서 생긴 문제 + 예외처리에 대한 무지의 결과였다
충격을 먹고 예외처리를 씹어 먹기로 했다.
try - catch
public void Test() {
try {
System.out.println( 10 / 0 ); // try안에 예외가 발생할 수도 있는 코드
System.out.println
( "catch 괄호 안의 예외가 catch될 경우 이 문구는 안나옵니다" );
} catch(ArithmeticException e) { //어떤 예외를 catch할지를 적어줌
System.out.println("0으로 나누어서 예외발생");
System.out.println("ArithmeticException 예외일 경우 출력돼요!");
} catch(Exception e) { //어떤 예외든 catch됨(위 catch에서 예외발생시 실행X)
System.out.println("예외 처리"); //catch된 후 실행할 코드
System.out.println("ArithmeticException 예외가 아닌 다른 예외일경우 출력돼요!");
}
}
Java
복사
try - catch - throw
throw : 예외를 인위적으로 발생시키는 것
반드시 처리해 줘야할 예외를 명시적으로 예외를 발생시켜 유지보수에 도움됨
public void Test() {
try {
throw new Exception();
}
catch(Exception e) {
System.out.println("Test 메소드에서 예외 처리됐어요!");
}
} // 출력 : Test 메소드에서 예외 처리됐어요!
Java
복사
throws
throws : 자신을 불러온 메서드로 예외를 던진다
"호출한 곳에서 처리해주겠다"
public void Test() {
try {
A();
}
catch(Exception e) {
System.out.println("Test 메서드에서 예외가 처리됐어요!");
}
}
public void A() throws Exception{ //throws에 명시된 예외가 발생할 경우
throw new Exception(); //A메서드를 호출한 메소드로 예외를 던진다
}
Java
복사
A메서드에는 try/catch문이 없기 때문에 예외를 발생시켜도 처리해줄 곳이 없다.
이런 경우 호출한 곳에서 처리해주겠다라고 생각하면 된다
finally
finally : Scanner같이 꼭 close를 해주어야한다면 finally가 없을 경우 모든
catch구문 끝에 써주어야한다
이럴 경우 finally에 close해주면 예외가 발생하든 안하든 반드시 수행한다.
public void Test() {
Scanner test = new Scanner(System.in);
try {
//~~~~~~~ 기타 구문 수행
test.close();
}
catch(Exception e) {
test.close();
}
}
Java
복사