Java/Spring 조각 기록(1)

ivor·2021년 11월 24일
0

spring

목록 보기
1/3

강의나 책 등으로 공부한 java, spring에 관한 내용들을 가볍게 정리해보려고 한다.
(정리하며 복습도 하고 혹여 나중에 까먹더라도 필요한 내용을 쉽게 찾고 쉽게 사용하기 위해😎)

mapping

내가 특정 url을 입력하여 웹페이지에 접속한 사용자들에게 특정 파일들(.html, .java 등)을 보여주고자 한다면 논리적 주소물리적 주소를 서로 연결해주는(mapping하는) 작업이 필요하다.

예를 들어 '네이버 스포츠 홈화면'의 url은 https://sports.news.naver.com/index인데 이는 '네이버 스포츠의 홈화면에 해당하는 url이 입력되면 index와 관련된 실질적인 파일들을 이용하여 화면을 띄워주겠다'라는 의미가 된다.

즉 어떠한 웹 페이지를 만들고 싶다면 해당 페이지에 관한 물리적 파일을 만들어 해당 웹 페이지로 접속한 사용자에게 보여줄 것을 설계해야 한다.

😳 그러면 어디서, 누가 매핑을 하는 것인가?

Java/Spring의 경우 크게 보아 세 가지(클래스, 속성, 메소드)가 가능하다고 한다.

클래스로 매핑을 관리한다면 주소가 하나 추가될 때마다 클래스 파일이 최소 하나씩 추가되어야 한다. 남은 두가지 속성, 메소드 중에서 웹 페이지 화면에서 구현되어야 할 다양한 동작들을 정의하기엔 메소드가 조금 더 알맞다고 볼 수 있다.

그렇다면 구체적으로 어떻게 메소드를 통해 매핑을 수행할까?
→ Spring의 annotation을 이용한다.

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller // annotation. 이 클래스가 control을 담당하는 클래스라는 것을 Spring이 인식하게끔
public class MainPage{
    @RequestMapping("/") // annotation.'/'는 root를 의미한다.
    public void index(){
    }
}

만약 root url로 사용자가 접속을 한다면 MainPage라는 클래스의 index()라는 메소드를 실행시키겠다는 뜻이다. 해당 메소드를 어떻게 작성하냐에 따라서 root url에 해당하는 메인 페이지에서 보여줄 수 화면이나 동작이 달라지게 될 것이다.

root가 아닌 다른 url에서도 가능하다.

    @RequestMapping("/abc")
    public void abc(){
    }

이 경우 맨 뒤에 '/abc'를 붙인 url로 접속했을 때 abc라는 메소드를 수행하겠다는 뜻이 된다.

응용해보면 '메소드 안에서 html 파일을 참조'하는 방식을 이용한다면 해당 url 접속 시 원하는 화면을 보여줄 수 있다.

Spring에는 MVC라는 패턴이 있다.
이 중 V(View)가 화면에 출력되는 내용과 연관되어 있다.

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class MainPage{

    @RequestMapping("/")
    public void index(){
    
    }
    
    @RequestMapping("/abc")
    public String abc(){
    
    return "abc" //이는 templates/abc.html 을 의미한다.
    }

abc 메소드는 return으로 "abc"라는 문자열을 반환한다. @Controller 등의 annotation을 이용했을 때 Spring은 abc 메소드를 "abc"라는 문자열 그대로가 아닌 templates 디렉토리 속 "abc"라는 파일과 매칭시킨다.

즉,

@RequestMapping("/abc")
public String abc(){

return "abc"
}

의 의미는 '~/abc'라는 url로 접속했을 때 'resources/templates/abc.html' 파일에 해당하는 내용을 웹페이지에 출력하겠다는 뜻이다.

(thymeleaf default 설정은 DEFAULT_PREFIX = "classpath:/templates/";, DEFAULT_SUFFIX = ".html";로 되어 있다.
return "abc";는 곧 return "classpath:/templates/abc.html"l;을 의미한다고 볼 수 있다.

따라서 만약 해당 디폴트 경로를 바꾸고 싶다면(예를 들어 html 파일을 보관하는 디렉토리명을 'templates'가 아닌 다른 것으로 하고 싶다던지, .html 파일이 아닌 것으로 웹페이지를 표현하고 싶다던지) application.properties 파일 내에서 다음의 코드를 추가하고 수정하면 된다.

spring:
    thymeleaf:
        prefix:
        suffix:

prefixsuffix 값을 원하는대로 변경해주면 된다.)

참고로 디폴트 경로의 classpath는 jar, war 파일 등의 말려있는(?) 리소스에 접근할 때 꼭 사용해야 한다고 한다.


참고

인프런 질문 : templates path

joont92님 github.io : RequestMapping

profile
BEST? BETTER!

0개의 댓글