작업 하다가 어느 순간 page_stand_alone에서 오류가 발생하는 이유 #14
gabrielyoon7
started this conversation in
3. 이슈
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
어떤 문제인지는 정확하게 파악이 되지 않지만
제가 경험했던 문제가 #13 의 글과 같은 문제라면, 다음과 같은 원인과 해결책이 있을 것 같아요.
평소에 잘 돌아가던 학과 홈페이지가, 작업 도중 page.jsp의 구조에 갇혀있는 페이지만 뜨지 않는 현상들이 있었는데요, 당시 단톡방에서 있던 대화와 캡쳐가 몇 개 있어서 참고 자료를 복원할 수 있게 되었습니다.
혹시 @hyeonjun-Hev 이 2022년 1월 28일 단톡방 대화 내용이 있다면 오후 5시 38분 경에 @wwwls99 가 보낸 사진과 문제 제기를 확인해주시면 감사하겠습니다.
다만 학과 홈페이지가 java 8 버전으로 작성되어있고, swaig 홈페이지는 16 버전으로 작성되어 있으므로 감안해서 확인해주셔야 합니다.
오류가 어떻게 발생했는가?
당시 출력 된 오류 메시지 중 일부 발췌
위 자료는 사진을 OCR로 돌린거라서 오류가 있을 수 있습니다 ^^
(혹시 위 자료가 보안에 위험이 된다면 제거 하겠습니다.)
당시에 위 오류 메시지를 보고 원인을 파악하고자 했을 때 다음과 같은 특징이 보였습니다.
을 봤을 때 이 page.jsp가 과도한 메모리를 사용하는게 아닌가 하는 추정이 들게 됐습니다.
과거에 제가 공부했던 jsp는 모든 jsp 파일은 사실 java 코드로 변환되는 것이고 include된 부분은 한 파일로 합쳐서 작업한다고 기억하는데,
이게 맞는 정보인지는 확실하지 않지만아무튼 파일을 합치는 과정에서 코드가 너무 길어져서 발생하는 문제로 파악됩니다.예를 들면 page.jsp 하위에 include 되어있는 include.jsp, notice.jsp 등 여러 자식들을 하나로 합친 후, 부모로부터 받은 키워드 (ex. String jsp = (String) request.getAttribute("jsp");)를 참고하여 어떤 jsp를 보여줄 지 결정하게 됩니다.
이 부분이 제가 swaig 프로젝트에 처음으로 도입한 아이디어이기도 합니다.
당시에는 이런 문제가 발생할 줄 모르고 해당 구조로 프로젝트를 작성했어요.
이후에 학과 홈페이지에도 해당 구조를 역으로 이식했었고, 레거시 코드가 많이 있는 학과 홈페이지는 2022년 1월에 이미 해당 문제가 발생하여 업데이트를 하였고 그 해결방법에 대해서 공유하고자 합니다. (swaig 코드는 그 이후로 손을 놔서 업데이트가 되지 않았습니다 ^^)
당시에 파악했던 추정되는 원인
물론 java 전체의 코드가 길어서 발생하는 문제는 절대 아니고, 한 개의 파일(page.jsp)이 코드가 너무 길어져서 발생하는 문제라는 것 입니다.
2008년에 어떤 블로그에 작성된 글을 참고해보면 include file은 정적인 지시문을 사용하고, include page는 동적인 지시문을 사용합니다.
위 글을 읽어보시면 대충 감이 오시겠지만, include page는 자바로 바뀌고 컴파일 된 이후에 실행중에 값을 삽입할 수 있는 지시어 입니다.
추가 참고 글도 읽어보시면 좋을 것 같습니다.
근데 이렇게 하면 아주 중대한 문제가 발생하게 되는데, 동적으로 호출하게 되면 부모가 가진 속성 값을 사용할 수 없게 됩니다.
예를 들면
레이아웃을 잡고 있는 부모 파일이 현재 최상단에서
을 설정해주면, 그 자식들은 해당 값을 상단에서 굳이 선언하지 않아도 자유롭게 사용할 수 있었지만
include page를 사용하게 된다면 동적으로 바뀌기 때문에 컴파일 과정에서 분리되어 그 자식들이 부모가 뭘 가지고 있는지 참고하기 어려운 것 같습니다.
따라서 자식들이 필요한 값을 직접 상단에 호출해서 사용해야합니다.
해결책
기존 학과 홈페이지에서 해결한 커밋을 확인해보시면,
물론 이게 가능한 이유는, 현재 attribute 값은 어느 파일에서든 불러올 수 있기 때문이구요.
기존 학과 홈페이지에 이어서 swaig 홈페이지에도 적용했어야 했는데, 당시에 바빠서 미뤘던 일이 이제 터진 것 같아서 정리해서 알려드립니다.
한번 적용해보시고 확인해주시면 감사하겠습니다.
Beta Was this translation helpful? Give feedback.
All reactions