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

mj·2023년 3월 21일

Spring 스프링

목록 보기
1/5

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
https://inf.run/qg3d
위 강의를 보며 공부한 내용을 작성함.


🌀프로젝트 환경설정

[오류 해결] 사용중인 특정 포트 종료하기

MAC 사용중인 특정 포트 종료 하고, 포트 열기

1) 포트를 사용(점유)하고 있는 프로세스 확인하기

sudo lsof -i :[포트번호]
PID : 현재 사용중인 프로세스의 고유번호. 이 프로세스를 강제로 종료시켜야 함.

2) 해당 프로세스를 강제 종료시키기

sudo kill -9 [PID]


🌀스프링 웹 개발 기초

정적 컨텐츠

서버에서 하는 것 없이 파일을 그대로 보여주는것

MVC와 템플릿 엔진

Jsp, php… -> 템플릿엔진
html을 동적으로 바꿔서 내리는것?
Model View Controller

정적 - 파일을 그대로 전달해주는거
MVC, 템플릿 - 서버에서 변형해서, html변형해서 내려주는 방식

API

json 이라는 데이터 포맷으로 클라이언트에게 데이터 전달하는 방식
서버끼리 통신할때에도 json…


1. 정적 컨텐츠

  • 폴더 위치 : main > resources > static
    다음 폴더 안에 hello-static.html 파일을 생성
  • Html 작성
  • http://localhost:8080/hello-static.html 로 접근하면 작성했던 html파일을 동작시켜 띄워줌.
    -> 그냥 띄우기만 함. 정적임.
    -> 어떤걸 동작시키게 하지는 못함. html을 띄우기만 함.

정적 콘텐츠 동작 방식

  1. Localhost:8080/hello-static.html
  2. 내장 톰켓 서버가 요청을 받음.
  3. 컨트롤러에서 hello-static 컨트롤러가 있는지 확인함. (-> 컨트롤러가 우선순위에 있다는 뜻)
  4. 내부 resources에서 static/hello-static.html이 있는지 찾음.
  5. 있으면 hello-static.html을 띄움

2. MVC와 템플릿 엔진

MVC : Model, View, Controller

  • 과거에는 controller와 view가 따로 구분되지 않았었음.
    View에서 모든것을 다 했었음. Jsp를 가지고. -> Model1방식

  • 현재는 -> MVC 스타일로 주로 많이 함.
    View : 화면을 그리는데 모든 역량을 집중해야 함.
    Controller : 내부 처리에 집중. 서버 뒷단, 비즈니스 로직 처리

  • 옛날 : View 파일(jsp파일) 하나 안에 화면도 그리고, DB도 접근하고, 비즈니스 로직도 들어있고… 복잡함.

  • 요즘 : Model, View, Controller로 구분하여 씀.

MVC, 템플릿 엔진 작동 방식

  1. localhost:8080/hello-mvc
  2. 내장 톰켓 서버가 hello-mvc가 왔음을 스프링에게 알림.
  3. helloController에서 hello-mvc 메서드에 매핑이 되어있으면 그 메서드를 호출해줌.
  4. Hello-template를 return, model(name:spring) key는 name, 값은 spring
  5. viewResolver (뷰를 찾아주고 템플릿 엔진과 연결시켜줌.)
  6. templates/hello-template.html을 찾아서 Thymleaf 템플릿 엔진 처리
  7. 템플릿 엔진이 렌더링 해서 변환 후 웹 브라우저에 반환한다. (정적일때는 변환을 하지 않았음. 템플릿 엔진에서는 변환을 해서 반환해줌.)
  8. http://localhost:8080/hello-mvc?name=Spring 으로 들어가면 hello Spring이라고 화면에 출력됨. 그냥 hello-mvc로 접속하면 error.
    /Users/minju/Desktop/study/hello-spring/src/main/resources/templates/hello-template.html
    주소창에 이렇게 입력하면(정적인 방식) hello! empty가 뜬다.
    hello-template.html에서 <p>hello! empty</p>

3. API

@GetMapping("hello-string)
@ResponseBody
http(통신 프로토콜)에서 header와 body부분으로 나뉘는데 이때 body부분에 return한 내용을 직접 넣어준다.
앞의 템플릿 엔진과의 차이점 : View가 있는것이 아니라 문자 그대로를 전달한다.

템플릿 엔진 : View를 조작하는 방식
API : 데이터를 그대로 내려줌.

http://localhost:8080/hello-string?name=minju 이렇게 하면 화면에 hello minju라고 뜬다. 이 페이지에서 오른쪽클릭해서 소스보기를 누르면 html페이지가 나오는게 아니라 텍스트 hello minju만이 뜬다.

@GetMapping("hello-api)
@ResponseBody

Json : key-value로 이루어진 구조

최근에는 xml보다 json쓰는 추세.

Getters and Setters
자바 빈 규약, 프로퍼티 접근 방식
메서드를 통해 name에 접근.

@ResponseBody 사용 원리

  1. http://localhost:8080/hello-api
  2. 내장 톰겟 서버가 hello-api가 왔어! 하고 스프링에 던짐.
  3. hello-api 있네!
  4. @ResponseBody가 붙어있네! (템플릿엔진의 경우엔 ViewResolver에게 던져서 맞는 view를 찾아줌. )
  5. @ResponseBody니까 http응답에 그대로 이 데이터(return )를 넘겨야 겠구나!
  6. 데이터가 문자인 경우 : hello-string처럼 문자로 넘겨주면 끝임.
  7. 데이터가 객체인 경우 : json방식으로 데이터를 만들어 반환.

@ResponseBody

  • HTTP의 BODY에 문자 내용을 직접 반환
  • viewResolver대신에 HttpMessageConverter가 동작
  • 기본 문자 처리 : StringHttpMessageConverter
  • 기본 객체 처리 : MappingJackson2HttpMessageConverter
    Jackson - 객체를 json으로 바꿔주는 라이브러리

참고) 기본 객체 처리는 json으로 함. 하지만 xml 등 다른 방식으로 accept 하길 원하는 경우에는 다른 HttpMessageConverter가 선택된다.

profile
일단 하자.

0개의 댓글