본문 바로가기

Spring

[Spring]Spring 시작해보기 - Setting / Mapping / Session

start.spring.io를 통해 프로젝트를 생성해주었다.

Project Setting

  • Project : Gradle
  • Language : Java
  • Spring Boot Ver. 2.7.2
  • project name : com.ll.exam.demo
  • Packaging : jar
  • Java Ver. : 17

 

dependencies

  • Spring Web
  • Thymeleaf
  • Spring Boot Dev Tools
  • H2 DataBase
  • Lombok

 

Main Controller class 생성

URL 매핑을 위한 Controller를 추가해 보았다.

 

 

컨트롤러 생성

sbb라는 URL이 온다면, index라는 함수를 실행한다.

 

 

실행결과는 500이 출력된다.

500이 출력되는 이유는 파일은 존재하지만, 아무것도 출력할 것이 없기 때문에 500이 출력된다.

 

 

@ResponseBody annotation 추가

 - URL 요청에 대한 응답으로 String 값 반환

ResponseBody 어노테이션을 통해 String으로 반환되고, 반환 값이 RequestMapping 어노테이션으로 매핑된 web에 출력된다.

 

테스트로 MainController class에 /test를 매핑해주었다.

잘 나온다!

 

GetMapping과 PostMapping

 1. PostMapping

일반적으로 URL을 입력해서 web으로 들어갔을 경우 GET 방식으로 들어간다.

form을 생성해 input을 해줄때 POST방식으로 넣어서 출력시켜 보기로 했다.

출력은 input box와 submit 버튼이 있다.

 

input box에 원하는 숫자를 입력할 경우

해당 PostMapping을 통해 page2로 이동, 그리고 원하는 파라미터를 출력시킨다.

추가로 이 부분은 값의 default를 설정해 준다.

 

결과는 잘 출력된다!

 

 2. GetMapping

같은 입력에서

 

GET방식을 통해 입력을 받아왔을 경우 출력이다.

URL 뒤쪽의 파라미터를 주어 입력값을 받아와 출력시킬 수 있다.

 

 

비교

    @GetMapping("/plus2")
    @ResponseBody
    public void showPlus2(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        int a = Integer.parseInt(req.getParameter("a"));
        int b = Integer.parseInt(req.getParameter("b"));

        resp.getWriter().append(a + b + "");
    }

이렇게 어렵고 복잡한 코드를 spring을 통해

    @GetMapping("/plus")
    @ResponseBody
    public String showPlus(@RequestParam(defaultValue = "0") int a, int b) {
        return """
                <h1>계산기 - 덧셈</h1>
                <h1>결과 값은 : %d</h1>
                """.formatted(a + b);
    }

쉽고 간결하게 만들 수 있다. 바로바로 java를 출력시킨다.

 

 

세션 저장 방법

값을 저장하고 싶을 때 웹은 기억을 잘 하지 못한다. 기억을 하기 위해 쿠키를 사용하는데, 쿠키는 내용을 다른사람이 조작할 수 있다(보안에 취약한다). 쿠키를 대신해서 사용하는 것이 바로 세션인데, 세션은 민감한 정보를 숨긴다(보안에 강하다). 세션을 적용할 수 있는 방법을 알아보자.

 

처음에 입력값이 들어왔을 경우 HttpServletRequest를 통해 세션을 선언한다.

그 후 setAttribute(이름, 값)을 통해 해당 값에 대한 이름을 지정하고, 세션에 저장한다.

 

세션 출력 방법

저장한 세션을 불러오기 위해 다시한번 httpServletRequest를 통해 세션을 선언한다.

그 후 getAttribute(이름)을 통해 세션에 저장되어 있는 이름에 대한 값을 가져온다. 여기서 session.getAttribute는 객체로 이루어져 있어 casting을 진행해야 한다.

 

하지만 세션은 기억력이 굉장히 좋지 않기 떄문에 세션을 계속 사용하면 안된다.

그래서 세션을 만들 때 세션 ID를 응답쿠키에 넣어준다. 쉽게 다른사람이 사람의 세션ID를 찾을 수 없도록 길게 생성한다.