📖/spring(김영한)

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 2일차

2023. 7. 25. 00:45
목차
  1. 섹션1 프로젝트 환경설정
  2. 빌드하고 실행하기
  3. 섹션2 스프링 웹 개발 기초
  4. 정적 컨텐츠
  5. MVC와 템플릿 엔진
  6. 섹션 3 회원 관리 예제 - 백엔드 개발
  7. 비즈니스 요구사항 정리
  8. 회원 도메인과 리포지토리 만들기
  9. 회원 리포지토리 테스트 케이스 작성
728x90
반응형

섹션1 프로젝트 환경설정

빌드하고 실행하기

  • 터미널로 프로젝트 폴더로 이동해서 ./gradlew build 입력
    ./gradlew build
  • 이후 build 폴더 안에 libs 폴더가 생성되고 안에 jar파일이 생성됨을 확인할 수 있다. 나의 경우 hello-spring-0.0.1-SNAPSHOT.jar 파일이다 이 파일을 java -jar hello-spring-0.0.1-SNAPSHOT.jar 명령어로 실행한다
    java -jar hello-spring-0.0.1-SNAPSHOT.jar
  • 서버에서 배포할 경우 위 jar파일만 export 시키고 해당 파일만 위 명령어로 사용하면 된다

 

섹션2 스프링 웹 개발 기초

정적 컨텐츠

  • 정적 컨텐츠: 서버의 요구 없이 파일을 그대로 웹브라우저로 보내는 것
    • 스프링 부트는 static 폴더에 제공된 파일을 찾아서 정적 컨텐츠 기능을 자동으로 제공함. 
    • localhost/hello-static.html로 이동하면 내장 톰캣 서버가 요청을 받고 스프링에 넘김. 스프링은 hello-static과 매핑된 컨트롤러가 있는지 찾아봄. 없으면 resources 폴더 내에서 해당 파일을 찾고 있으면 웹브라우저에 해당 페이지를 보여줌

MVC와 템플릿 엔진

  • MVC와 템플릿 엔진: jsp, html 등의 템플릿 엔진을 서버에서 프로그래밍 후 동적으로 바꿔서 브라우저로 보내는 것. 그리고 이를 사용해 Controller, View, Model에 적용한 패턴. 컨트롤러에서 뷰를 찾아서 템플릿 엔진을 통해 화면을 렌더링해 html 파일을 웹브라우저로 넘김
    • MVC: Model, View, Controller. 과거에는 View와 Controller를 한번에 개발했음. 그러나 요즘에는 MVC 패턴으로 나눠서 작업함.
      • View: 화면을 구성하는데 집중
      • Controller: 비즈니스 로직과 관련되거나 내부적인 것을 처리하는 데 집중
      • Model: 화면에서 필요한 것들을 담아서 넘겨줌
    • @RequestParam: 외부에서 파라미터를 받을 때 사용 
    • localhost/hello-mvc?name=spring이라고 하면 @RequestParam으로 지정한 변수 name의 값에는 spring이 들어간다. 
    • @GetMapping("hello-mvc")
      public String helloMVC(@RequestParam("name") String name, Model model) {
      	model.addAttribute("name", name);
      	return "hello-template";
      }
  • API: json 데이터 포맷으로 클라이언트한테 데이터를 전달하는 방식. 
    • 컨트롤러의 해당 메서드에 @ResponseBody 어노테이션을 지정한다
    • @ResponseBody: http에서 헤더부, 바디부 중 바디부의 응답 데이터에 직접 해당 메서드의 리턴값을 넣겠다는 의미
    • 이 경우 뷰가 없고 반환된 리턴값이 데이터값으로 전송됨
    • 메서드의 자료형은 객체도 가능하다 해당 객체의 필드에 대해 setter메서드를 사용하여 매핑시킨 후 해당 url로 이동하면 아래 사진과 같이 출력됨을 알 수 있다. age 필드는 set하지 않았으므로 기본값인 0이 할당된다
    • 위 모양은 JSON과 동일하다 즉, 객체를 리턴하면 해당 객체를 제이슨 형태로 데이터만 전송시킨다
    • viewResolver 대신에 HttpMessageConverter가 동작하며 문자열을 입력받으면 StringHttpMessageConverter가, 객체를 입력받으면 JsonHttpMessageConverter가 데이터를 처리한다

 

섹션 3 회원 관리 예제 - 백엔드 개발

비즈니스 요구사항 정리

  • 일반적인 웹 애플리케이션의 계층 구조
    • 컨트롤러: 웹 MVC의 컨트롤러의 역할
    • 서비스: 핵심 비즈니스 로직 구현
    • 도메인: 회원, 주문, 쿠폰 등등 데이터베이스에 저장하고 관리되는 비즈니스 도메인 객체
    • 리포지토리: 비즈니스 도메인 객체를 데이터베이스에 저장하고 관리하는 객체
  • 클래스 의존관계
    • 아직 데이터저장소가 선정되지 않아서, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계
    • 데이터 저장소는 RDB, NoSQL 등등 다양한 저장소를 고민중인 상황으로 가정
    • 개발을 진행하기 위해서 초기 개발 단계에선느 구현체로 가벼운 메모리 기반의 데이터 저장소 사용

회원 도메인과 리포지토리 만들기

  • Optional<E>: Optional<E> 타입의 메서드를 정의할 경우 해당 메서드가 null일 수 있는데 이를 처리할 때 Optional.ofNullable()메서드로 감싸서 처리함. 인수가 Null일 경우 Optional객체를 반환함 

회원 리포지토리 테스트 케이스 작성

개발한 기능을 실행해서 테스트할 때 자바의 main 메서드를 통해서 실행하거나, 웹 애플리케이션의. 컨트롤러를 통해서 해당 기능을 실행한다. 이러한 방법은 준비하고 실행하는데 오래 걸리고, 반복 실행하기 어렵고 여러 테스트를 한번에 실행하기 어렵다는 단점이 있다. 이런 경우를 위해 자바는 JUnit이라는 프레임워크로 테스트를 해서 해결한다

  • start.spring.io를 통해 프로젝트를 만들면 자동으로 src/main/java 폴더와 src/test/java가 생성된다. 테스트를 하기 위해서 src/main/java에 작성한 패키지와 동일한 패키지를 src/test/java에 만들고 클래스 이름을 동일하게 가져온 뒤 제일 뒤에 Test를 붙인다 굳이 public으로 만들지 않아도 된다
  • 클래스를 만든 뒤에 그냥 객체를 new로 바로 만들어 버리고 기존 클래스에 있던 메서드와 동일한 이름의 메서드를 void 타입으로 생성한 뒤 @Test 어노테이션을 붙인다
  • 각 메서드를 비교하는데 이 경우 org.assertj.core.api.Assertions 클래스의 assertThat() 메서드를 이용한다
    assertThat("비교할 객체/값1").isEqualTo("비교할객체/값2");을 하면 2와 1이 같으면(true) 테스트 성공, 다르면 테스트 실패라는 의미이다. 
  • 테스트 클래스로 테스트를 진행하면 앞서 저장된 데이터(=테스트 케이스)가 여전히 남아 있어 후에 진행될 테스트에 방해가 될 수 이런 경우 테스트가 끝날 때마다 테스트 케이스를 지우는 메서드가 필요하다
    • 해당 메서드는 @AfterEach 어노테이션을 지정하고 테스트 케이스를 clear하는 코드를 작성한다
  • 테스트는 서로 의존 관계가 없도록 설계해야 한다. 이를 위해서 테스트 케이스를 먼저 설계한 뒤(틀을 먼저 만드는 설계) 구현 클래스를 생성할 수 있다. 이런 경우를 TDD(Test-Driven Development, 테스트 주도 개발)라고 한다 

 

 

728x90
반응형
저작자표시 (새창열림)
  1. 섹션1 프로젝트 환경설정
  2. 빌드하고 실행하기
  3. 섹션2 스프링 웹 개발 기초
  4. 정적 컨텐츠
  5. MVC와 템플릿 엔진
  6. 섹션 3 회원 관리 예제 - 백엔드 개발
  7. 비즈니스 요구사항 정리
  8. 회원 도메인과 리포지토리 만들기
  9. 회원 리포지토리 테스트 케이스 작성
'📖/spring(김영한)' 카테고리의 다른 글
  • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 5일차
  • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 4일차
  • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 3일차
  • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 1일차
모팔구
모팔구
250x250
모팔구
내가 개발자가 될 수 있 을 가?
모팔구
전체
오늘
어제

공지사항

  • 블로그 이사왔읍니다🙇‍♂️
  • allofthem
    • 🖥️
      • 시험 접수 시스템
    • 📖
      • Hello Coding 프로그래밍
      • 자바의 정석(~ing)
      • spring(김영한)
    • 💭
      • KDT
    • 💡
      • ⛔️ 에러

블로그 메뉴

  • 🪀 amideveloper.log
  • 방명록
  • 태그

인기 글

최근 댓글

최근 글

반응형
hELLO · Designed By 정상우.
모팔구
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 2일차
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.