내일배움캠프 #16 #Spring 2일차

김한준 Hanjun Kim·2023년 11월 1일
0

내일배움캠프

목록 보기
16/70

Spring 입문 2일차

잠을 못잔건지 몸에 피로가 쌓인듯 하다.

오늘은 일찍 자려고 노력해봐야겠다.

TIL에 올리려고 보니 깃허브 연동이 안되어있었다!

깜짝 놀라서 다시 연동중...

근데 커밋만 눌렀을 때 자동으로 깃허브에 올라가지 않는데.. 뭐지? 일부러 나중에 한번에 올리시려고 하는건가..?

  • 학습은 커밋들을 보면 어떤식으로 진행되었는지 알 수 있을것이다.

학습 정리

  • 키워드
    http 프로토콜
    싱글톤
    객체지향의 특성 4가지

  • 어제했던것

  • @GetMapping("/api/hello")

  • GitHub에 올리는법

  • Commit 메시지 작성해서 commit

  • 폴더/파일 만드는법 : alt + insert

프로젝트 만드는법

  • New - Project - Spring initializr - Create Git repository - Group명 Grrovy JDK 설정 - Spring Web + Lombok + Thymeleaf 추가

http

  • Header : 의사 표현을 위한 데이터
  • Payload(=body) : 실제 데이터
    GET method를 제외하곤 모두 Payload를 보낼 수 있다
    가장 많이하는 실수 : GET은 Payload가 없는데 서버에서 받겠다고 코드를 구현하면 오류가 남

테스트 코드

  • ctrl + shift + T
    또는 파일 안에서 우클릭 -> Generate
  • 테스트 하고자 하는 파일과 동일한 경로로 만들어 줌
  • 테스트코드는 main이 없고 Junit은 테스트 실행 환경을 따로 가지고 있음 = 기능별로 테스트 가능

@Test : Test 실행 환경에서 실행시킬 코드이다
@DisplayName("")

  • Assertions : 예측하기
    ex) Assertions.asserEqulas(expected:4,result);

Lombok

  • 코드를 절약할 수 있도록 도와주는 라이브러리

  • ctrl + alt + s -> Annotation Processors -> Enable
    또는 shift 2번 -> plugins 에서 Lombok 찾기

  • 코드에서
    @Getter / @Setter 에노테이션 을 달면 Lombok이 알아서 생성해줌
    alt + insert 해서 만들어도 됨

@AllArgsConstructor / No : 생성자를 자동으로 만들어준다
@RequiredArgsConstructor : final이 달린 field를 가지는 생성자를 만들어준다

application.properties

  • 스프링에 관련된 설정할 때 쓰임
    자동으로 설정되고 있던 값들을 쉽게 수정 가능, 데이터베이스의 정보 제공
    ex) 아파치 톰캣 포트 변경 등 server.port=2020

MVC

  • Spring에서 MVC 디자인 패턴을 적용하여 http 요청을 효율적으로 처리하고 있다..(?)
  • Servlet(서블릿) : 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측 프로그램

MVC - Controller

  • @WebServlet() 사용하면 되지만, 7개의 메서드를 다 만들어야되니까 효율적으로 사용하는 방법이 있다
@Controller
@RequestMapping("/user")

...
@Controller 달아주기
// 원래는 뷰 이름을 전달 해 줘야 함
// ResponseBody로 단순히 문자만 전달
  • Alt + 1 = 왼쪽 창 닫기

ex)

@GetMapping("/api/hello")
@ResponseBody
public String hello(){
    return "Hello World@";   // 원래는 뷰 이름을 전달 해 줘야 함
                            // ResponseBody로 단순히 문자만 전달
}

@GetMapping("/api/get")
@ResponseBody
public String get(){
    return "GET Method 요청";
}

이런식으로 메서드를 여러개 만들어도 되지만 하나로 묶으려면

@Controller 아래
@RequestMapping("/api") 하고 나머지거에서 api 빼면 됨

정적 웹 페이지, 동적 웹 페이지

  • 정적
    static을 활용하는데, 컨트롤러를 거칠 필요 없이 직접 접근해서 반환이 할 수 있다
    thymeleaf(Templete엔진) : 동적인 웹 페이지를 만들기 위한 라이브러리(프로젝트 만들 때 추가함)
    컨트롤러를 통해서 갈 순 있지만, thymeleaf가 있으니 굳이?
ex)
@GetMapping("/static-hello")
public String hello(){
    return "hello.html";
}

@GetMapping("/html/redirect")
public String htmlStatic(){
    return "redirect:/hello.html";  // 재호출
}

@GetMapping("/html/templates")
public String htmlTemplates(){
    return "hello";
}
  • 동적(dynamic)
    동적은 인자로 odel을 넘겨준다
    "${visits}" : 모델의 이름이 visits라고 된거를 매핑해서 넘겨준다
    static이니까 웹 페이지가 동작하는동안 계속 visitCount가 올라간다!
profile
개발이 하고싶은 개발지망생

0개의 댓글