No | 기능 | 설명 |
---|---|---|
1 | 등록 기능 | 퀴즈를 등록합니다. |
2 | 갱신 기능 | 등록된 퀴즈를 갱신합니다. |
3 | 삭제 기능 | 등록된 퀴즈를 삭제합니다. |
4 | 목록 표시 기능 | 등록된 퀴즈의 목록을 표시합니다. |
5 | 게임 기능 | 퀴즈 게임을 실시합니다. |
표 9.1 작성할 기능 목록
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 |
표 9.2 URL 목록
'OX 퀴즈' 애플리케이션은 다음 세 개의 레이어로 나뉜다.
MVC 모델에서는 업무 기능이나 취급하는 데이터의 처리 요건이 복잡해지면 비즈니스 로직 처리를 담당하는 모델(Model: M) 부분이 많아져서 '모델의 비대화'라는 문제가 발생한다. MVC 모델은 설계 개념상 모델이 담당하는 부분 자체를 줄이는 것은 안 되개 때문에 모델 안에서 역할 분담을 명확하게 하고 애플리케이션의 레이어 구성을 적용하고 비대해지는 모델을 분할하는 것이 레이어를 나누는 목적이다.
애플리케이션 레이어와 인프라스트럭처 레이어가 도메인 레이어에 의존하지만 도메인 레이어는 다른 레이어에 의존해서는 안 된다는 규칙이 있다. 즉, 도메인 레이어의 변경에 의해 '애플리케이션 레이어'의 변경은 허용하지만 애플리케이션 레이어의 변경으로 도메인 레이어의 변경이 발생해서는 안 된다.
RepositoryImpl
도메인 레이어에서 정의한 Repository의 구현 클래스다. 'O/R Mapper'가 Repository의 구현 클래스를 생성하는 경우도 있다.
O/R Mapper
O(Object; 객체)와 R(Relational; 관계형 데이터베이스)간의 데이터를 매핑한다.
No | 레이어 | 컴포넌트 | 이름 | 비고 |
---|---|---|---|---|
1 | 애플리케이션 레이어 | View | - | 화면 표시 |
2 | 애플리케이션 레이어 | Controller | QuizController | 제어 역할 담당 |
3 | 애플리케이션 레이어 | Form | QuizForm | 화면의 게임 폼을 표현 |
4 | 도메인 레이어 Service | QuizService | 인터페이스로 생성 | |
5 | 도메인 레이어 | ServiceImpl | QuizServiceImpl | Service를 구현 |
6 | 도메인 레이어 | 도메인 객체 | Quiz | 엔티티 역할 |
7 | 도메인 레이어 | Repository | QuizRepository | 인터페이스로 생성 |
8 | 인프라스트럭처 레이어 | Repository Impl | - | O/R Mapper로 자동 생성 |
9 | 인프라스트럭처 레이어 | O/R Mapper | - | 스프링 데이터 JDBC를 사용 |
pgAdmin4를 실행해 PostgreSQL DB 생성. 생략
No | 테이블명 | 설명 |
---|---|---|
1 | quiz | 퀴즈 정보를 저장한다 |
표 9.4 테이블 목록
No | 칼럼 | 타입 | 제약 | 설명 |
---|---|---|---|---|
1 | id | serial | PK | 퀴즈 정보 식별 ID |
2 | question | text | NOT NULL | 퀴즈 내용 |
3 | answer | boolean | NOT NULL | 퀴즈 답 |
4 | author | character varying(20) | NOT NULL | 작성자 |
표 9.5 테이블 정의
생략