일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 부정 선택자
- 가상요소 선택자
- EDWITH
- 가상클래스 선택자
- 속성 선택자
- HTML Templating
- 다시볼 것
- 즐거운자바
- 부스트코스
- jsp
- 복합 선택자
- 즐거운 자바
- vmax
- 김성박
- vmin
- 서블릿
- optgroup
- datalist
- spring
- nth-child()
- 상속
- 소스트리
- 보충필요
- ES6
- 자바
- 깃헙
- JavaScript
- 웹개발
- 다시보자
- nth-of-type()
- Today
- Total
기억의 DataBase
경로 본문
파일을 업로드 할 때 실제 파일이 올라가는 경로는 어디일까?
Local에서만 구동할 때는 정확한 차이를 못 느낄 수 있다.
하지만 실제 Server에 올라가는 어플리케이션의 경우 실제 파일은 Server에 저장되어야 한다.
(사용자는 개발자 Local PC에 접속하는 것이 아니라, Server에 접속하는 것이기 때문에)
그렇다면 이 Server에서의 파일 저장 경로는 어디일까?
이클립스와 같은 IDE에서 Run on Server를 실행한다는 것은 Build 된 jar나 war 파일을
Tomcat과 같은 서버 프로그램에 Deploy한다는 것을 의미한다.
그 Deploy한 jar나 war파일이 사용자가 제공받는 내용물이다.
(Workspace 내의 소스를 제공받는 것이 아니다!)
.metadata
이러한 파일의 경로가 .metadata 폴더내의 경로다.
(생각을 다시 해보니 여기에 파일을 직접 업로드하면, Deploy 할 때마다 이 파일들도 같이 Deploy해야 해서 용량이 너무 커질 듯...
실제 서비스는 외부경로에 파일을 저장하고 불러오는 형식일 것 같다.)
더 알아보니 정확히는 서버의 경로라기 보다는
이클립스를 활용해 변경사항을 편리하게 관리할 수 있는 경로라고 말하는 것이 맞을 것 같다.
(참고 : https://wanzargen.tistory.com/21?category=700064)
실 서버에 배포할 때는 톰캣의 wepapps 폴더에 war파일을 넣어주는 것이지
이클립스를 통해 빌드, 배포하는 것이 아니기 때문이다.
업로드 할 파일에서 getRealPath()를 활용해 실제 경로를 파악하면(상대경로)
C:\Users\Zester\Desktop\WorkSpace\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\SpringExample
다음과 같은 서버 폴더 경로를 얻을 수 있다.
여기에서부터 삽질을 좀 많이 했는데
path 뒤에 추가한 resources/uploadFiles/ 안으로 파일이 저장되는 것이 아니라
resources/ 안으로 파일이 저장되었다.
마지막 "/" 문자가 trim( ) 되는지 인식되지 않았다.
그래서 결국 하드코딩했다... (이유는 아직도 모르겠다...)
역슬래쉬를 쓸꺼면 2개써야 한다 ex) \\ (java를 비롯한 C 계열 언어에서는 \ 하나는 escape 문자열로 인식)
서버에서 파일을 불러올 때는 다음과 같이 경로를 찾으면 된다.
위의 경로로 바로 파일을 이미지 파일을 불러올 수 있었던 것은
위와 같은 설정이 servlet-context.xml에 존재했기 때문이다.
(해당 요청(/resources/**)이 들어오면 location에 해당하는 경로를 탐색)
위와 같은 설정이 없다면 들어온 url("/")을
DispatcherServlet이 바로 가져가서 Controller에서 Mapping하려 하기 때문에
(/resources/를 Controller에서 찾음)
404 Error가 발생한다.
번외로 오늘 뉴스에 수능성적 발표 2일전에 성적을 미리 확인하는 방법으로 Elements 조작이 올라왔는데
이것도 원리는 비슷한 것 같다.
위와 같이 Elements 탭에서 값을 변경해주면
해당 서버 폴더 위치에 있는 파일을 가져올 수 있다.
(수능성적표 파일은 서버 경로에 저장되어 있었나??)
평소와는 좀 다른 글인 것 같은데 가끔 이렇게 삽질의 기록을 남기는 것도 좋을 것 같다.
나도 같은 삽질은 방지하고, 보는 사람도 삽질을 줄이고...
삽질하며 배운다지만 같은 삽질은 지양하자
이상 삽질의 기록 끄읏