TIL 2021.03.03

Kyu·2021년 3월 3일
0

TIL

목록 보기
52/322

1. heroku 서버이용

원격 서버에 소스 코드를 배포하기 위해서 heroku를 통해 서버를 만들어서 하라는대로 했다. 근데 spring-boot-qna 요거는 이상하게도 git clone 으로 모든 브랜치를 다 가져와서 하면 잘되는데 내 브랜치인 kyu-kim-kr 로 가져와서하면 안된다. 화면은 뜨는데 코드에서 구현한게 안뜨고 그냥 간단하게 웰컴투헤로쿠 요게 뜨는데 어떻게해야하지?

슬랙에 올린 질문
원래 git push heroku main 하면 여러 안내문구가 나오면서 막 배포&빌드하는 과정이 나오잖아요
근데 저희 미션저장소 포크해서 제 브랜치만 클론해서 똑같이하니까 remote: Pushed to branch other than [main, master], skipping build. 라고 뜨네요.
heroku open 이라고 하면 새로만든 heroku 앱은 url을 통해 접속이 되는데 포크해온게 안뜨네요. 혹시 왜그런지 아시나요?

Deploying from a branch besides master
If you want to deploy code to Heroku from a non-master branch of your local repository (for example, testbranch), use the following syntax to ensure it is pushed to the remote’s master branch:
$ git push heroku testbranch:master

git push heroku step1:main
step1브랜치를 heroku의 main으로 보낸다 -> 잘 작동함

2. MVC 간단설명

모델(Model), 뷰(View), 컨트롤러(Controller)와 같은 세 가지 역할의 컴포넌트로 구성되어 클라이언트의 요청을 처리

https://changrea.io/spring/spring-mvc/

컴포넌트설명
모델(Model)애플리케이션 상태(데이터)나 비즈니스 로직을 제공하는 컴포넌트
뷰(View)모델이 보유한 애플리케이션 상태(데이터)를 참조하고 클라이언트에 반환할 응답 데이터를 생성하는 컴포넌트
컨트롤러(Controller)요청을 받아 모델과 뷰의 호출을 제어하는 컴포넌트로 컨트롤러라는 이름처럼 요청과 응답의 처리 흐름을 제어한다.

영상을 통해서 MVC를 배워보려했으나 아직 MVC가 뭔진 모르겠다.
검색해보니까 MVC패턴이라고 나온다. 어떤 개념이 아니라 패턴이다.

지금까지 이해한걸 바탕으로 정리해보자면 MVC는 위에 작성한 저것들이고.
스프링 웹어플리케이션에서 웹이 작동하기 위해서는 저 세가지 컴포넌트들이 엮여서 코드를 웹에 나타낼수있게 된다.

예를 들어서 URL에 www.example.com/test라고 입력하면 먼저 @Controller에서 @GetMapping을통해 test를 찾고 test이면 그 메서드가 작동한다. 그 메서드에서 String을 return 하도록 되어있는데 return 값은 리턴값.html 파일을 static 패키지 내에서 찾아서 html을 내보내준다.

그 외에도 예를 들어 www.example.com/test?name=testname&age=30 이라고 입력하면 예상할수있듯이 name이랑 age가 변수처럼 작동하는데 실제로 요청이 들어오면 name과 age, 그리고 Model 클래스를 파라미터로 받는 메서드를 이용해서 템플릿엔진의 문법을 html파일에 적용해서 변수를 원하는 곳에 잘 버무려서 출력할수있따다.

3. 회원가입 기능 구현

  1. 미션 저장소에 있는 템플릿 엔진확인 -> handlebars
  2. 회원 가입기능은 resources/static/form.html 의 회원가입이라고 적힌 버튼 부분이라는 것을 확인 <button type="submit" class="btn btn-success clearfix pull-right">회원가입</button>
  3. 회원가입기능을 구현하기위해 새로운 컨트롤러를 만들었는데 이걸 어떻게 연결시켜서 작동시키는거지?
  4. html의 action 부분의 경로를 @Controller의 @GetMapping 경로랑 같이하면 그 메서드를 읽는다
  5. 비밀번호가 url에 노출됨
  6. 아 자꾸 서버다시시작해야해서 프레디가 공유한거 설치하기로
  7. 설치함
  8. POST 방식으로하니까 URL에 비번 노출되는거 사라짐
  9. 근데 사용자가 입력하는게 많아지면 많아질수록 메서드의 파라미터도 굉자히 길어지기때문에
  10. User에 대한 클래스를 따로만들어서 name,email,age 등등 파라미터로 받았던 메서드를 User로 바꾸면됨
  11. User에 클래스를 만들고 메서드이름을 컨벤션에 따라 잘지켜야 스프링이 자동으로 setter를 이용할수있다
  12. 리스트에 생성한 유저를 넣는다.
  13. redirect:/user/list.html

기억하기
URL이 추가되면 항상 그에 상응하는 Controller가 있어야한다.

4. 회원 목록 기능 구현

  1. redirect:경로 시험.
  2. list.html에 들어가면 그냥 정적으로 하드코딩되어있는데 동적으로 추가할때마다 어떻게 추가하도록나오게할까?
  3. 음..이부분은 어렵다
  4. 여러 템플릿엔진이있는데...
    스프링부트의 기본설정이 있다 그걸 사용한다고 명시만 해주면
    자동적으로 뷰리졸버를 연결해주고 다 해준다.
    그런데 거기에 없는 다른 것 handlebar를 써야해서 따로 디펜던시에 추가해줘여한다.
  1. URL에 localhost:8080/list 를 입력하면 /list와 를 맵핑해서 맞는 메서드를 실행하게된다. return "list"; 라는 의미는 templates에 있는 list.html 을 리턴하게 된다.
// 5.

@GetMapping("/list")
public String list(Model model) {
	model.addAttribute("users", users);
    return "list";
   }
}
  1. redirect? 리다이렉트를 하면 서버 내부적으로 처리해서 그 맵핑된 경로로 가라는 게 아니라 클라이언트에게 그 경로로 다시 접속하라고 리다이렉트하고, 클라이언트가 다시 그것을 서버에게 요청한다.
profile
TIL 남기는 공간입니다

0개의 댓글