스프링부트 기본동작

1 minute read

폴더 설명

  • controller : 컨트롤러 파일들을 모아 놓음
  • domain : 레퍼지토리에 사용되는 회원과 같은 객체들을 만들어 놓는다.
  • repository : DB와 주고받는 로직들을 만들어 놓는다
  • service : 레포지토리의 메소드를 기반으로 회원가입과 같은 서비스 로직을 만든다.

정적컨텐츠

  • static 폴더 안에 html파일로 저장
  • temlplates들과 달리 controller가 필요없다.
  • 정적컨텐츠를 호출할때는 /정적파일이름 을 호출
  • 동작원리 : 웹 브라우저에서 내장 톰켓 서베에 호출을 하게되면 관련 컨트롤러를 찾게되는데 만약 없다면 정적폴더인 static에서 찾아 반환한다.

기본 동작(Get요청)

Get요청은 클라이언트에서 서버로 어떠한 리소스로 부터 정보를 요청하기 위해 사용되늰 메서드이다. Url에 정보가 담겨진걸 확인 가능

방식1 : 직접 model객체에 데이터를 저장하여 전달

    @Controller 
    public class HelloController {
        @GetMapping("hello") 
        public String hello(Model model) {
            model.addAttribute("data", "hello!!"); 
            return "hello"; 
        }
    }
  • controller : 웹에서 /hello와 같이 url이 호출되면 해당 컨트롤러가 작동된다.
  • GetMapping : 웹에서 /hello가 호출되면 해당 함수로 매핑된다.
  • Model : html파일에 전달되는 객체로 data란 변수에 hello란 값을 저장하여 전달한다.
  • return “hello” : 실제로는 templates/hello.html로 변화되어 반환되므로 hello.html 뷰를 보여준다.

방식2 : 웹에서 데이터를 전달받아 전달한다 전달 방식 예로 /hello?name=spring!!!

    @Controller 
    public class HelloController {
        @GetMapping("hello") 
        public String hello(@RequestParam("name") String name, Model model) { 
            model.addAttribute("data", name); 
            return "hello"; 
        }
    }
  • RequestParam : url에서 넘어온 데이터를 받는다. 처음에는 requires가 default값으로 True가 되있으므로 값을 전달받지 못하면 에러 페이지가 뜬다. 이것을 헤제하려면 @RequestParam(value=”name”,required=false)로 설정한다.

아래는 hello.html이다.

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>Hello</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
        <body>
            <p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p> 
        </body>
</html>
  • html xmlns:th=”http://www.thymeleaf.org” : thymeleaf엔진을 호출하여 th란 약어로 사용가능하다.
  • th:text=”‘안녕하세요. ‘ + ${data}” : th약어로 thymleaf를 사용할 수 있으며 ${data}는 model에 전달된 data변수를 가리키므로 hello!!로 치환된다.

기본 동작(Post요청)

Post는 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용되는 메서드다. Get요청과 다르게 HTTP메시지 body부분에 담아서 서버로 보내게 되며 Url에서는 보여지지 않는다.

Post요청 매핑 예시

    @Controller 
    public class HelloController {
        @PostMapping("/members/new") 
        public String hello(MemberForm form,Model model) { 
            model.addAttribute("data", form.getName()); 
            return "redirect:/"; 
        }
    }
  • redirect:/ : 작업을 처리한 후 다시 처음 페이지로 돌아가는것을 의미한다.

 <form action="/members/new" method="post">
    <div class="form-group">
        <label for="name">이름</label>
            <input type="text" id="name" name="name" placeholder="이름을
            입력하세요">
    </div>
        <button type="submit">등록</button>
 </form>

  • action : 매팽될 url 지정
  • method : get과 post로 구분

API

  • 함수위에 ResponseBody를 붙여준다. return 값으로 데이터만 전달해주며 객체를 전달할때는 josn형태로 반환한다.
@Controller
public class HelloController {
    @GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name) {
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }
    static class Hello {
    private String name;
    public void setName(String name) {
        this.name = name;
    }
 }
}

-> /hello-api?name=changmin 을 호출하면 json 형태로 {‘name’:’changmin’}이 반환된다.

Leave a comment