Lecture/스프링 입문

[스프링 입문] 스프링 웹 개발 기초

Soo_buglosschestnut 2023. 1. 9. 22:18

스프링 웹 개발 기초


 

 

.idea: IntelliJ가 사용하는 설정 파일

 

 

gradle/wrapper: gradle과 관련해서 쓰는 폴더

 

 

 

src/main/resources: 실제 Java 코드파일을 제외한 xml, html, Properties 설정 파일이 들어가 있음.

(요즘 개발 트렌드에서 test 코드가 중요함.)

 

build.gradle: 버전을 설정하고 라이브러리를 가져오는걸로 이해(중요!)

 

 

 

 

스프링 웹 개발 기초

 

- 정적 컨텐츠: 파일을 웹브라우저에 그대로 내려주는 방식

- MVC와 템플릿 엔진: 서버에서 html을 바꿔서 해주는 방식, 템플릿엔진을 Model, View, Controller방식으로 나누어서 View를 템플릿엔진으로 렌더링이된 html으로 고객에게 전달

- API: JSON데이터 구조 포맷으로 클라이언트에게 전달하는 방식, 객체를 반환해서 HttpMessageConverter로 JSON형식으로 반환 시켜주는 방식

 

@Controller
public class HelloController {
    @GetMapping("hello")
    public String hello(Model model){
        model.addAttribute("data","hello!!");
        return "hello"; // resources/templates/hello.html에 가서 실행시키라는 것
    }
}

// hello가 들어오면 line 5 출력
// attributeName("data")은 Key느낌, attributeValue("hello!")는 값

 

 

 

 

 

코드 실행시키고, 

localhost:8080/hello 쳐주면 왼쪽과 같은 결과!

 

${data} 부분에 model.addAttribute("data","hello!!"); 이 코드에 썻던 hello가 들어간것이다.

 

@Controller
public class HelloController {
    @GetMapping("hello-mvc")
    // @RequestParam(value = "name", required = false 이런식으로 써주면 웹페이지에 null이라고 뜬다
    public String helloMvc(@RequestParam("name") String name, Model model){
        model.addAttribute("name",name);
        return "hello-template";
    }
}

name을 지정안해주면 에러가 난다. ?name=summer 이런식으로 작성해주어야한다. 

 

@Controller
public class HelloController {
    @GetMapping("hello-string")
    @ResponseBody // http에서 header부와 body부가있는데 body부에 return 내용을 넣어주겠다.
    public String helloString(@RequestParam("name") String name){
        return "hello " + name; // if name spring > "hello spring" / 페이지 소스보면 html소스없음!!! 그냥 저 문자만!
    }
}

 

 

@Controller
public class HelloController {
    @GetMapping("hello-api")
    @ResponseBody 

    //Json 방식으로 출력됨 key : value
    public Hello helloApi(@RequestParam("name") String name){
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }

    static class Hello {
        private String name; // private 외부에서 접근 X, so method로 접근(getter setter) > 프로퍼티 접근방식이라 부름!
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }
}

line 4dp @ResponseBody가 오면 hello 객체를 넘기는것! 대신에 JSON형식으로 넘어감!

-> 객체는 JSON으로  반환!