Spring Projcect/학습 관리 시스템 & 백오피스 구축

Chapter 14. 스프링 부트(Spring Boot)

계란💕 2022. 8. 24. 01:24

14.1 강좌 목록 구현 

  - 지금까지는 회사의 입장에서 서버에 데이터를 저장하는 것과 같은 애플리케이션을 만들었다면 앞으로는 회원의 입장에서 사용할 인터페이스를 만들어보자.

 

 

  Ex) 메인 페이지에서 강좌 목록으로 이동할 수 있도록 구현

 

    - CourseController

java
열기

 

    - 인덱스 페이지 구성

html
열기

 

    - 인터페이스에 frontList() 메서드 만든다. 프론트에 필요한 리스트만 나오도록 새로 메서드를 만든다.기존의  list()와 다름

java
열기

 

    - CourseDto클래스 일부

      -> publice static List<CourseDto> of(Course) 메서드는 Course 객체를 => CourseDto로 형변환 해주는 느낌

      -> 두 가지의 of() 메서드 오버로딩

java
열기

 

    - Impl 클래스

java
열기

  Note) 실행 결과 - 강좌 목록 탭 누른 결과

 

  Ex) 강좌 정보 페이지

 

    - 현재 상태

 

    - 인덱스 페이지

    -> 스타일 태그에 line-through 를 넣으면 글에 취소선을 그을 수 있다.

html
열기

  Note) 실행 결과 - course 페이지

 

 

  Ex) 

 

    - 특정 카테고리에 대해 몇 개의 정보가 등록됐는지 알 수 있다.

html
열기

 

    - 카테고리 매퍼는 멤버매퍼 참고해서 만든다.

 

    - 인터페이스에 추가

html
열기

 

    - 임플

java
열기

    -> 이제 카테고리 컨트롤에서 카테고리 목록을 가져올 수 있다.

 

 

    - 컨트롤러

java
열기

  Note) 실행 결과

 

 

  Ex)

    - 인덱스 페이지

html
열기

 

    - 컨트롤러

      -> @RequestParam(name=" "): 카테고리id 값을 가져올 수 있다.

      -> 그 다음, frontList()를 이용해서 전달한다.

java
열기

 

    - 카테고리 서비스 임플

java
열기

 

    - frontList()

java
열기

 

    - 코스 리포짓

java
열기

  Note) 실행 결과 - 프로그래밍 탭 누른 화면

 

 

  Ex) 강의의 전체 개수 표시

    - 인덱스

html
열기

 

    - 컨트롤러

java
열기

  Note) 실행 결과

 

 

 

14.2 강좌 상세 정보

 

  Ex)

    - 컨트롤러 courseDetail() 

java
열기

    - detail 페이지

html
열기

 

    - frontDetail()

java
열기
java
열기

 

    - ThymeLeaf의 th:text

 

    - ThymeLeaf의 th:utext

      -> 스마트에디터에서 편집한대로 그대로 나온다.

 

  Note) 실행 결과

 

 

14.3 강좌 신청 (1)

  Ex) 수강 신청

 

    - TakeCourse클래스

java
열기

 

    - TakeCourseRepository

java
열기

 

    -> 실행하면 자동으로 테이블이 세팅된다.

   

    - Ajax 라이브러리를 가져온다.  https://github.com/axios/axios

 

 

GitHub - axios/axios: Promise based HTTP client for the browser and node.js

Promise based HTTP client for the browser and node.js - GitHub - axios/axios: Promise based HTTP client for the browser and node.js

github.com

java
닫기
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

 

 

    - 디테일 자바스크립트

      -> axios.post를 이용해서 데아터를 던진다.

       -> axios.post().then() ..... StringBuilder에서 메서드 붙여서 추가하는 것과 비슷하다.

html
열기

 

 

    cf) @Controller와 @RestController 차이점

      -> @Controller: 뷰 엔진의 형태로 반환

      -> @RestController: Json 형태로 반환

 

 

    - ApiCourseCotroller 클래스

      -> RestController를 이용했기 때문에 문자열이 반환된다.

      -> @RequestBody를 붙여야만 스프링이 자동으로 매핑해준다.

java
열기

 

    - TakeCourseInput 추가한다.

java
열기

 

 

 

14.4 강좌 신청 (2)

 

  - 수강 신청 누른 실행 결과

 

 

  Ex)

 

    - 컨트롤러

      -> 수강 신청하려면 로그인한 내 아이디도 필요하다.

      -> 시큐리티에 있는 Principal 인터페이스를 매개변수로 선언하면 스프링이 로그인 정보를 principal에  주입해준다.

 

    - 테스트 코드

java
열기

  Note) 실행 결과

    - bad request(에러 코드: 400) 정상 작동한다. preview, response에도 똑같이 나온다.  

 

    - 서비스에 req() 구현 =>  수강 신청이 가능하게 만든다.

 

    - 디테일 페이지

html
열기

  Note) 실행 결과

    - status code: 200 => 정상 실행된다는 뜻

 

 

    - TakeCourseCode를 만든다.

java
열기

 

    - req()

     -> status에 요청값을 넣는다.

java
열기

 

 

  Ex) 이미 수강 신청한 경우 처리 방법

    - userId에 대한 courseId가 이미 있는지 확인한다.

    - status가 CANCEL인 경우는 신청 가능해야한다.

    - 리포지토리

java
열기

 

    - 컨트롤러

      -> 배열을 이용해서 수강 신청 완료했는지 요청 중인지 파악하여 count를 이용한다.

java
열기

  Note) 실행 결과

 

 

 

14.5 강좌 신청 (3)

  Ex)  수강신청이 안되는 상황에 따라 알림 보여주는 방법

 

    - 아까와는 다른게 수강 신청의 결과를 boolean이 아닌 문자열 형태로 반환할 것이다.

 

    - req() 다시 작성한다.

java
열기

 

    - 컨트롤러도 다시 작성

java
열기

  Note) 실행 결과 - 잘못된 courseId 번호에 대해 수강신청하는 경우

 

 

    - 값이 있지만 이미 신청한 경우는?

 

 

    - 자바스크립트

html
열기

    Note) 실행 결과

 

 

 

14.6 강좌 신청 (4)

    

  - 지금까지는 데이터가 서버로 전송될 때, 문자열 형태로 전송이 되고 있다.

  - 이 부분을 어떻게 바꿀 수 있을까?

 

 

  Ex) 

 

    - result.json 파일

html
열기

 

    - ResponseResult

java
열기

 

    - ResponseResultHeader

java
열기

 

    - 컨트롤러에서 데이터를 내릴 때, ResponseResult를 내리도록 한다.

 

      -> 중복하여 수강신청했을 때 콘솔 화면

 

    - detail

html
열기

  Note) 실행 결과 - 중복으로 신청한 경우

 

 

  Note) 실행 결과 - 새로운 강좌를 신청한 경우, 아래의 창이 뜨고 난 다음 메인 페이지 이동