Blog

[Spring]18 404 Error에 대한 트러블슈팅

Author
Summary
오류 접근 방법에 대한 과정과 회고
Category
Study
Tags
Spring
Favorite
Memory Date
2023/08/30
Cross Reference Study
Related Media
Related Thought
Related Lessons
tag
날짜
작성자
진행상황
진행 전
태그구분
6 more properties
큰일났다. 갑자기 API 요청이 안된다.
불과 5분전에 정상적으로 Create, Read, Delete 기능이 작동하고 있었는데, Update기능을 작성하다가 잠시 테스트하려고 Create 기능을 수행하는데 작동이 안된다??
내가 무엇을 잘못 건들였을까. 이미 Update문을 수행하면서 이것저것 코드를 수정하긴 했지만 기억이 나질않는다. 컨트롤 Z로 계속 돌려본다.. 뭐지? 이것저것 파일을 이동하면서 수정했기 때문에 꼬이기 시작한다. Timestamp랑 문제가있을까? 아닌데, 이게 무슨상관이지. 갑자기 API요청에서 왜 페이지를 찾기 시작하는거지??
분명히 이 테스트 컨트롤러는 @RestController를 통해 모든 요청 메서드에@ResponseBody역할이 주입되어있다. 이 말은 이 컨트롤러 자체는 뷰페이지를 찾을 리 없다는 것이다. 그런데 왜 갑자기 404에러로 페이지를 찾기 시작하는거야..
코드는 문제가 없어보였다, 서버 실행은 정상적으로 작동하는데 서버에서 요청에 대한 오류조차 나타나지않는다? DB는 정상적으로 연결되어있다. 무슨 문제일까?
난 여기서 @RestController부터 의심하기 시작했다. 이 말은 곧 Spring을 믿지 않는 것이다. 내가 어노테이션을 타고 들어가서 Spring 인터페이스를 잘못건들였나? 그럴리 없지만 찾아 들어가본다. 가끔 실수로 블록으로 감싸진 것을 스페이스라던지 다른 키를 누르면서 잘못 덮혀질 가능성을 체크한 것이다. 이럴 일은 없겠지만.. 오류 해결을 위해서는 모든 케이스를 생각해야 한다.
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Controller @ResponseBody public @interface RestController { /** * The value may indicate a suggestion for a logical component name, * to be turned into a Spring bean in case of an autodetected component. * @return the suggested component name, if any (or empty String otherwise) * @since 4.0.1 */ @AliasFor(annotation = Controller.class) String value() default ""; }
Java
복사
하지만 이 접근 자체가 잘못되었다. 내가 어노테이션 링크를 타고 들어온적이 없다는것은 확실히 기억하기 때문에 여기까지 들어올 문제가 아니었다. 하지만 이 문제를 직면한 당시 당황했기 때문에 시작부터 너무 깊은 범위까지 고려해버린 것이다. 여기부터 일이 꼬이기 시작한것이다.
여기서부터 Spring은 신뢰했고, 그럼 Java를 믿지 않기 시작했다. class파일들을 뒤져보기 시작했다. 뭔가 빌드시 컴파일러가 내 소스코드랑 다르게된 상태로 저장하고 갱신을 안하고있는거 아니야? 라는 의심을 시작했다.
하지만 어노테이션으로 생략된 부분들을 하나하나 따져보면서 확인했지만, 역시 컴퓨터가 잘못 했을리는 없었다.
(예를 들어 @Getter, @Setter 처럼 소스파일은 어노테이션만 작성해도 실제 컴파일로 javac이 .class 파일을 생성 할 땐, 템플릿화 된 코드를 자동입력해준다. 마치 기본 생성자를 생성하지 않아도 알아서 해주는 것도 마찬가지 관점)
ChatGPT와 구글링
동일한 오류를 찾기 시작했다. ChatGPT에게 모든 소스를 제공하면서 왜 그런지 물어보았다. 계속 URL이 적합한지, 컨트롤러 어노테이션을 잘보라는지 나는 계속 체크하고있던 상황이다. 큰일이다. 너무 많은 입력으로 https://openai.com/로 부터 계정 블록을 당해버렸다. 이미 시간은 새벽을 향해 가고있고, ChatGPT 임시 차단이 해제되는데 몇시간이 걸린다고 한다. 도와줄사람이 필요한데..
우선 구글링으로 동일한 문제를 찾기 시작했다. StackOverFlow, 각종 블로그 모두 비슷한 이야기를 한다.
가끔 잘못된 정보를 만나서 시도하다가 일이 더꼬여버리기도 했다. 계속 복구하고 저 방법도 사용해보고 너무 많은 시도로 이제 뭐가 문제인지 내가 뭘하고있는지도 가물가물해지고 있다.
모두고려의 늪과 휴식, 팀에게 문의하기
우선 할 수 있는 모든 시도를 다해보고자 했다.
예전 과정에서 가끔 캐시와 관련된 문제도 오류가 발생하던 상황이 있었다. 뭐 500대 에러와 관련되었던 것들이긴 한데 이것도 그 문제의 일환이라 생각하고 프로젝트 캐시를 모두 삭제하고 재빌드. 이것도 안된다.
프로젝트를 아예 새로 생성하고 복사해보기도 시도했다. 똑같은 오류. 이제는 JDK와 IDE, 아니면 내 MacOS 시스템까지 의심하기 시작했다. 뭔가 잘못된 빌드 정보가 덮어씌워지고 있는건가? 왜냐하면 이전에 JDK17버전 환경 변수를 올바르게 설정했는데도 계속 터미널을 새로 키면 11버전으로 초기화되던 문제가 있었다. SDKMAN이라는 JDK11버전 환경 변수가 마지막 줄에서 계속 덮어버리고 있었던 것으로 JDK라는 이름이 보이지 않아서 상당히 고생한 기억이 있었다 해당 부분을 제거하면서 해결되었던 기억이 있다. 아무튼, 이것과 유사한 상황인가? 라는 의심으로 OS자체를 하나씩 꺼내보느니 포맷을 하는것이 빠를지도 몰라 라는 판단까지 이어졌다. 하지만 새벽이되어서 일단 자고 일어나서 해결하자고 생각했다.
일단 내 문제 상태를 공유하기 위해 질문을 올려두었다. 하지만 새벽이라 당장 답장은 어렵기 때문에 빨리 자고 일어나서 다시 생각하려했다. 너무 몰입됫고, 자야 할 시간이 지나서 판단력이 흐려진 상태이다. 지금 너무 주변이 안보이는 상황이라 휴식으로 다시 생각을 차분히 해야했다.
4시간 딥 슬립 이후 바로 이어가기
원래 어떤 이유로도 오전 운동을 절대 쉬지않는데, 지금 이것을 해결하는게 더 큰 문제이다. 난 이걸 해결해야 한다.
6시에 일어나자마자 곧바로 사무실로 향했다. 이미 자면서도 계속 이 생각 뿐이었나보다 분해서 잠이안온다.(근대 5분만에 잘잤다ㅋㅋ)
똑같은 것을 반복하고 있다. 뭔가 잘못됨을 느꼈다. 프로젝트를 새로 생성하고 뭐 깔끔히 실행한다 해도, 똑같은 반응이다. 뭘까?
다시 검색을 시작했다. 나랑 완전히 똑같은 케이스를 찾기 시작했다.
당연히 없을 것이다. 다른 개발자 공부하던 사람들이나, 뭐 테스트환경이 다를 수도 있기 때문에 완벽하게 일치하는 경우는 드물다. 그럼 방법은 무엇인가?
그나마 가장 근접하게 진입하고, 그 안의 핵심 키워드를 찾아내야 한다. 그 블로그는 별 내용이 없지만 크리티컬하게 머리를 탕 쳐버린 아래 블로그이다.
물론 이 블로그는 이미 어제 새벽에 몇번이고 들락날락했던 곳이다. 그런데 왜 치명적인가? 근본적인 문제해결법이었기 때문이다.
404에러에 대해 가져야 할 생각
404 error 메시지 자체가 해당 경로로 '맵핑된 URL이 없다', 'view 페이지가 없다'는 큰 힌트였는데, URL이 맞다고 계속 판단한 제가 잘못생각한 것이다.
내 테스트 과정 중에 문제가 있었다.
DELETE기능 수행 시 패스를 넘겨주기 위해 .../api/posts/22처럼 숫자까지 입력하고 테스트
다시 READ, CREATE 기능을 테스트 하려고 숫자만 지운 상태로.../api/posts/ 처럼 "/”가 남은 상태로 계속 테스트하고 있던 것
앞으로 404 error에 대해서 클라이언트측 요청 URL, 또는 view페이지로 연결된 실제 파일, 폴더 경로, 컨트롤러의 맵핑URL 위주로 주의깊게 봐야겠다는 트러블슈팅 접근 방법을 배우게 되었다.