티스토리 뷰

자바 backend 개발 시 URL 경로 설정.

지우 초이 2021. 3. 31. 21:03

자바로 백앤드 개발을 하다보면 컨트롤러에서 URL을 리턴해야할 일이 있다.

프론트부분 (JSP,HTML) 부분에서도 리소스를 로드할 때 , 경로를 쓰기 때문에 때문에 굉장히 많이 헷갈렸다.

이번 기회로 정리해보았다.

상대경로, 절대경로

1. 상대경로

상대경로는 현재 위치한곳을 기준으로 해서 위치를 의미한다.

- ./ : 현재 경로를 의미한다.

- ../ : 이전 경로를 의미한다.

 

., ..는 디렉토리를 만들면 파일시스템에서 만드는 일종의 파일이고, 이를 접근하면 

"." : 현재 폴더로 연결되는 참조를 가지고 있다.

".." : 부모 폴더로 연결되는 참조를 가지고 있다.

 

 

2. 루트경로

"/" : 루트 경로를 의미한다.

 

루트경로와 상대경로의 차이는 아래 사진에서 명확하게 알 수 있다.

 

https://css-tricks.com/quick-reminder-about-file-paths/

 

example.css 기준으로 

1. images/body-bg.png 는 ./images/body-bg.png 의미로 해석된다.

2. /images/body-bg.png는 root/images/body-bg.png 라는 의미로 해석된다.

 

3. 절대경로

절대경로는 웹페이지나 파일이 가지고 있는 고유한 경로를 의미한다.

정확하게 그 위치를 의미한다.

예를들어서  "C:\users\document\untitled.jpg" 같은 경로를 의미한다.


Java 개발 시 경로?

프론트, 백앤드 개발시에 여러가지 경로를 사용하게 되는데,

경로를 쓰다보면 헷갈리는 부분이 있다.

 

경로 기준이 다르기 때문인데, 경로 기준이 왜 달라지는지 알아보겠다.

 

프론트와 백앤드가 알고있는 앱 루트의 기준이 다르다.

일단 Java 서블릿 개발 환경을 보자.

Project - dynamic web project 폴더를 만든다.

https://myblog.opendocs.co.kr/archives/436

이를 빌드하면 위와 같이 폴더 구조가 변경된다.

https://myblog.opendocs.co.kr/archives/436

여기서 Service-root란, 

프로젝트 명 (혹은 context-path) 를 의미한다.

 

나는 톰캣을 쓰는데, .metadata/org.eclipse.wst.server.core라는 폴더에 보면, deploy된 폴더 구조를 볼 수 있다.

 

그럼 이 앱 내에서  루트는 바로 context-path가 될것이다.

그럼 백앤드 앱 내에서 최상위 루트는 http://localhost:8080/context-path/ 가 된다.

 

 

그에비해 프론트(브라우저)는 저런 앱의 구조에 대해서 모른다.

http://localhost:8080/context-path 로만 앱이 있는것도 아니고, 다양한 앱이 있을 수 있기 때문에 모르는건 당연하다.

 

프론트에서 명시해서 앱을 접근하고 싶으면 context-path를 붙여줘야 한다.

 

 

context-path를 붙여야 하는 경우와 붙이지 말아야 하는 경우를 구분해보겠다.

 

 

1. JSP에서 URL을 통해 컨트롤러에 접속하려는 경우.

context-path를 붙여줘야한다. JSP를 읽는건 결국 프론트 브라우저이기 때문이다.

2. Controller에서 forward를 통해 다른 JSP를 읽는 경우.

context-path를 붙여줄 필요가 없다. forward의 경우 java내부에서 처리되는 로직이라서, java 내부에서는 같은 루트 path를 공유한다.

2. Controller에서 redirect를 통해 다른 JSP를 읽게하는경우.

context-path를 붙여줘야한다. redirect는 브라우저에서 다시 요청을 보낼 수 있도록 요청하는 페이지 이동 동작이다. 따라서 브라우저가 정확한 URL을 알 수 있도록 미리 처리를 해줘야한다.

 

request.getServletPath() : 이 서블렛을 부른 URL (Path-matching된 주소)를 부른다. 다만 쿼리 스트링 등은 포함되지않는다. 

request.getContextPath() :  서블릿 context path가 주어진다. context-path가 web-app이라면 /web-app이다.

 

'' 카테고리의 다른 글

DNS  (0) 2021.06.02
세션과 쿠키  (0) 2021.04.04
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/05   »
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 31
글 보관함