TIL3 [김영한의 스프링입문]

givemacdonalds·2023년 11월 27일
0

TIL

목록 보기
4/16

빌드 하기

어제 진행했던 프로젝트에 이어서 빌드를 하려고 함

  • 개발환경 : 윈도우 10 pro, Java17
  • IDE : IntelliJ
  1. cmd창을 open
  2. 빌드하고 싶은 프로젝트로 이동
>>> cd [hello-spring]    
  1. 빌드 명령어(dir 명령어를 이용해서 gradle 파일이 있는 디렉토리인지 확인 할 것)
>>> gradlew build    
  1. ./build/libs로 이동
>>> cd build/libs
  1. hello-spring-0.0.1-SNAPSHOT.jar 실행
>>> hello-spring-0.0.1-SNAPSHOT.jar 
  1. 웹 브라우저에서 localhost:8080

인텔리제이 코드를 실행시키지 않아도 해당 url이 유효함
+인텔리제이에서 코드를 실행하면 포트가 중복되기 때문에 인텔리제이는 실행되지 않음


스프링 웹 개발 기초

1. 정적 컨텐츠

  • HTML 파일을 그대로 웹브라우저에게 넘겨주는 방식

정적 페이지로 작성한 .HTML 파일을 웹브라우저가 톰켓 서버에 전달
1. 톰켓 서버는 스프링 컨테이너 안에 있는 controller에게 전달
해당 HTML이 존재하지 않기 때문에 다음 과정으로 이동
2. 톰컷 서버는 resource/static/안에 들어있는 .HTML파일을 찾음
이후 웹브라우저에게 그대로 전달함

2. MVC와 템플릿 엔진

MVC

  • Model : 화면에서 필요한 것을 담는다
  • View : 화면과 관련된 일
  • Controller : 비즈니스 로직 처리나 서버 뒷단(DB)에 집중

템플릿 엔진

분리되어 있는 HTML코드와 로직코드를 결합시켜준다.

  • 서버사이드 템플릿 엔진 : 서버에서 가져온 데이터를 이미 존재하는 템플릿에 넣어 화면을 완성시켜줌
    Thymeleaf 템플릿 엔진이 속함

  • 클라이언트 템플릿 엔진 : 화면을 만들고 서버에서 데이터를 받아와 동적인 화면은 구성함

기존 소스코드에 위 코드 내용을 추가하고 빌드한 후에 해당 URL을 방문하면 없는 페이지가 발생하는데 그 이유는 바로

18번 : @RequestParam에서 required의 디폴트 값이 true임으로 name에 해당하는 값을 추가해야한다. 만약 false였다면 값을 입력하지 않아도 에러 페이지가 발생하지 않는다.

그 결과 HTTP GET방식을 이용해서 name의 값을 입력해주면 다음과 같은 결과 페이지가 나온다.

  • 지금까지 과정을 그림으로 나타내면 다음과 같다.

  • viewResolver : 뷰를 찾아주고 템플릿을 연결해줌

정적컨텐츠와 달리 동적컨텐츠는 스프링부트가 템플릿을 건내줄때 변환하고 나서 웹브라우저에게 전달하게 된다.


[오늘의 error 모음]

cmd창에서 프로젝트를 빌드하고 cmd 창을 그대로 닫아버렸다. 그 결과 다음 번에 포트를 사용하려고 하니까 중복돼서 아래와 같은 멘트가 나오면서 error가 발생했다.

해결방안

  1. 실행중인 port의 pid를 찾기
>>> netstat -ano | find "8080"
  • netstat: 네트워크 통계를 조회하는 명령어입니다. 이 명령어는 현재 활성화된 네트워크 연결 및 리스닝 포트를 나열합니다.
  • -ano: 옵션으로, 각 연결의 상세 정보를 표시합니다. 여기서 a는 모든 연결을 나타내고, n은 주소와 포트를 숫자로 표시하라는 옵션입니다. o는 연결에 대한 프로세스 ID를 표시하도록 하는 옵션입니다.
  • |: 파이프라인(|)은 명령어의 출력을 다른 명령어의 입력으로 전달하는데 사용됩니다.
  • find "8080": find 명령어를 사용하여 출력에서 "8080"이라는 문자열을 찾습니다. 즉, 포트 번호가 8080인 연결을 찾습니다.
  1. 해당 프로세스 종료
>>> taskkill /pid 14692 /f
  • taskkill: 프로세스를 종료하는 명령어입니다.
  • /pid 14692: 종료하려는 프로세스의 PID를 지정합니다. 여기서 14692는 종료하려는 프로세스의 PID입니다. 실제로는 사용 중인 프로세스의 PID로 변경해야 합니다.
  • /f: 강제 종료 옵션으로, 프로세스를 물어보지 않고 강제로 종료합니다.
    주의: taskkill 명령어를 사용하여 프로세스를 종료하면 해당 프로세스

0개의 댓글