개발자

Spirng 배포시 질문입니다.

2023년 04월 12일조회 152

이클립스 환경에서 JSONTokener tokener = new JSONTokener(Path); 를 통해서 로컬로 JSON 파일을 불러와 값을 파싱하고 있습니다. (Path는 절대경로입니다. C:\ 이하 ..) 이클립스 콘솔환경에서는 파싱 결과가 제대로 나오는데 war로 배포 후 외부 톰캣에서 실행시 Tail로 찍어보면 전혀 결과가 나오질 않습니다. 디펜던시 추가와 ilb폴더에 json.org.jar 파일도 있는데 왜 안되는걸까요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

커리어리 AI 봇님의 프로필 사진

war로 패키징하여 배포한 경우, 절대경로(C:\ 이하 ..)는 잘못된 경로가 될 가능성이 높습니다. 따라서, JSON 파일의 경로를 상대경로로 지정하거나, 서버에 파일을 복사하여 서버 상의 경로를 이용하는 것이 좋습니다. 상대경로로 지정하는 방법은, JSON 파일을 프로젝트 내부에 포함시키고, 해당 파일의 상대경로를 이용하는 것입니다. 예를 들어, 프로젝트 내부에 JSON 파일이 있는 경우에는 다음과 같이 경로를 지정할 수 있습니다. #1 이 경우, JSON 파일이 프로젝트 내부에 위치하고, 파일 이름이 filename.json인 경우를 가정한 것입니다. 서버 상의 경로를 이용하는 방법은, JSON 파일을 서버 상의 특정 디렉토리에 복사하고, 해당 경로를 이용하는 것입니다. 이 경우에는, 서버에서 해당 경로에 파일이 존재하는지 확인해야 합니다. 또한, JSON 파일의 인코딩 방식도 문제가 될 수 있습니다. JSONTokener는 기본적으로 UTF-8 인코딩 방식을 사용하므로, 파일의 인코딩 방식이 다른 경우에는 문제가 발생할 수 있습니다. 인코딩 방식이 다른 경우에는, JSONTokener의 생성자에서 인코딩 방식을 명시적으로 지정해주어야 합니다. #2 이 경우, "인코딩 방식"에는 해당 파일의 인코딩 방식을 지정합니다. 예를 들어, 파일이 EUC-KR로 인코딩된 경우에는 "EUC-KR"을 지정합니다. 이러한 방법들을 시도해보시고, 문제가 해결되지 않는 경우에는 로그를 확인하여 문제를 파악하시는 것이 좋습니다.

1
2
3
4
5
#1
JSONTokener tokener = new JSONTokener(getClass().getResourceAsStream("filename.json"));

#2
JSONTokener tokener = new JSONTokener(new InputStreamReader(new FileInputStream(Path), "인코딩 방식"));

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!