Java/Spring

[Spring] 8. 애플리케이션 만들기

Sigfriede 2023. 7. 7. 10:14

  9장부터는 앞서 공부한 내용을 토대로 웹 애플리케이션을 제작합니다. 12장까지에 걸쳐 데이터베이스 조작과 비즈니스 로직 처리, 레이어 생성까지 다루고 있습니다. 책에 적힌 코드를 기반으로 하되 제가 선호하는 방식으로 코드가 작성된 부분이 있습니다. 책에서는 PostgreSQL과 JDBC를 쓰지만 저는 MySQL과 JPA를 썼습니다. 두 차이로 달라지는 부분을 제외하고는 모든 코드가 동일하게 작성되었습니다.

항목
Project Gradle Project
Spring Boot 3.1.1
Artifact quiz
Packaging jar
Java 17(temurin)
Package name com.example.quiz

 

  Dependencies

  • Spring Boot DevTools
  • Lombok
  • Spring Data JPA
  • MySQL Driver
  • Validation
  • Thymeleaf
  • Spring Web

 

  전체 코드는 아래 깃허브 주소를 참고

  (책에서 코드와 함께 작성되어 있던 코드 설명 주석은 하나도 없습니다.

  이외에 QuizApplication 주석처리 된 부분은 테스트가 끝나고 삭제되었어야 할 부분입니다.)

  https://github.com/Eunjeong21/Quiz.git

  

  작성할 기능 목록

No 기능 설명
1 등록 기능 퀴즈를 등록합니다.
2 갱신 기능 등록된 퀴즈를 갱신합니다.
3 삭제 기능 등록된 퀴즈를 삭제합니다.
4 목록 표시 기능 등록된 퀴즈의 목록을 표시합니다.
5 게임 기능 퀴즈 게임을 실시합니다.

 

  URL 목록

No 역할 HTTP 메서드 URL
1 퀴즈 목록을 표시합니다. GET /quiz
2 등록 처리를 실행합니다. POST /quiz/insert
3 갱신 화면을 표시합니다. GET /quiz/{id}
4 갱신 처리를 실행합니다. POST /quiz/update
5 삭제 처리를 실행합니다. POST /quiz/delete
6 퀴즈 화면을 표시합니다. GET /quiz/play
7 퀴즈 답을 체크합니다. POST /quiz/check

 

  이 애플리케이션은 애플리케이션 레이어, 도메인 레이어, 인프라스트럭처 레이어와 같이 세 개의 레이어로 나뉩니다. 애플리케이션 레이어는 클라이언트에서 받은 요청을 제어하고 도메인 레이어를 사용하여 애플리케이션을 제어합니다. 도메인 레이어는 도메인 객체에 대해 애플리케이션의 서비스 처리를 실행합니다. 인프라스트럭처 레이어는 도메인 객체에 대해 CRUD 조작을 해서 데이터의 영속화(영구 저장)를 담당합니다. 

 

  작성할 컴포넌트 목록

No 레이어 컴포넌트 이름 비고
1 애플리케이션
레이어
View 화면 표시
2 애플리케이션
레이어
Controller QuizController 제어 역할 담당
3 애플리케이션
레이어
Form QuizForm 화면의
게임폼을 표현
4 도메인
레이어
Service QuizService 인터페이스로 생성
5 도메인
레이어
ServiceImpl QuizServiceImpl Service를 구현
6 도메인
레이어
도메인 객체 Quiz 엔티티 역할
7 도메인
레이어
Repository QuizRepository 인터페이스로 생성
8 인프라스트럭처
레이어
RepositoryImpl O/R Mapper로
자동 생성
9 인프라스트럭처
레이어
O/R Mapper 스프링 데이터
JDBC를 사용

 

  레이어별 컴포넌트 설명

레이어 컴포넌트 설명
애플리
케이션

레이어
Controller   요청을 처리에 매핑하고 결과를 뷰에 넘겨주는 제어를 합니다. 주요 처리는 Controller 안에서 실행하지 않고 '도메인 레이어'의 Service를 호출합니다.
Form   화면의 폼을 표현합니다. 화면에서 입력한 값을 Controller에 넘겨줍니다. 또한 Controller에서 화면에 결과를 출력할 때도 사용합니다. 도메인 레이어가 애플리케이션 레이어에 의존하지 않도록 Form에서 도메인 객체로 변환하거나 도메인 객체에서 Form으로 변환하는 것을 애플리케이션 레이어에서 수행해야 합니다.
View   화면 표시를 담당합니다.
도메인
레이어
도메인 객체   서비스 처리를 실행할 때 필요한 자원입니다.
Service   애플리케이션의 서비스 처리를 담당합니다.
Repository   구현 내용은 작성하지 않고 데이터베이스의 데이터 조작 내용만 정의합니다.
인프라
스트럭처

레이어
RepositoryImpl   도메인 레이어에서 정의한 Repository의 구현 클래스입니다.
O/R Mapper   객체와 관계형 데이터베이스 간의 데이터를 매핑합니다.

 

  테이블 정의

No 칼럼 타입 제약 설명
1 id int(AUTO_INCREMENT) PK
퀴즈 정보 식별 ID
2 question text NOT NULL 퀴즈 내용
3 answer tinyint NOT NULL 퀴즈 답
4 author varchar(20) NOT NULL 작성자

  SQL 언어에 익숙하지 않아 DB를 다루면서 MySQL Workbench를 사용했습니다. 이는 SQL 개발과 관리, 데이터베이스 설계, 생성 및 유지를 위한 단일 개발 통합 환경을 제공하는 비주얼 데이터베이스 설계 도구입니다. 사실 툴도 잘 다루지 못하지만 없는 것보다는 훨씬 직관적이고 좋았습니다. 개발자는 코드 설계 능력도 중요하지만 툴을 잘 다루는 것도 능력인 듯합니다.

 

  ※ "스프링 프레임워크 첫걸음"이라는 책을 참고하여 쓴 게시글로, 책의 내용을 완전히 담지 않되 공부한 부분을 위주로 정리하여 작성하고자 했습니다. 따라서 글에는 책에서 다루지 않은 내용도 포함되어 있으며 문제가 되거나 부정확한 부분이 있다면 알려주시면 감사하겠습니다.

  ※ 책은 게시글보다 정확한 내용을 담고 있으며 코드, 그림, 예제를 이용하여 개념을 자세히 설명합니다.