728x90
반응형
[Book Study] Spring Framework 스프링 프레임워크 첫걸음
11. 애플리케이션 만들기 (비즈니스 로직 처리)

11 - 1 비즈니스 로직의 처리 내용 확인과 작성
11 - 2 트랜잭션 관리 알아보기
트랜잭션 - 복수의 처리를 하나의 그룹으로 모은 것
롤백 : 처리 중 싪했을 경우 트랜잭션은 실행 전의 상태로 돌아감
커밋 : 처리가 모두 성공하면 처리가 확정됨
부분적인 성공이나 부분적인 실패라는 것은 없음
트랜잭션 경계
- 시작되고 끝나는 위치를 반드시 지정해야 하고, 시작되고 끝날 떄까지의 범위
클래스나 메서드에 @Transactional 어노테아션을 부여하면 트랜잭션이 관리되어 트랜잭션의 시작, 커밋, 롤백이 자동으로 실행.
클래스에 @Transactional 어노테이션 부여
- 그 클래스의 모든 메서드에 트랜잭션 제어를 설정할 수 있다.
메서드에 @Transactional 어노테이션 부여
- 메서드가 호출되는 타이밍(정확하게는 메서드 시작 전)에 트랜잭션이 시작되어 대상 메서ㅡ가 정상 종료한 경우에는 '커밋', 예외로 종료한 경우에는 '롤백'
클래스에 부여하는 것을 추천 -> 트랜잭션 경계의 설정이 필요한 경우는 변경 처리(등록, 변경, 삭제)를 포함한 서비스 처리뿐이지만 설정 실수 등올 인한 버그 등을 방지하는 목적으로 클래스에 부여하는 것을 추천
11 - 3 비즈니스 로직 처리하기


package com.example.quiz;
import com.example.quiz.entity.Quiz;
import com.example.quiz.repository.QuizRepository;
import com.example.quiz.service.QuizService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
@SpringBootApplication
public class QuizApplication {
/** 구동 메서드 */
public static void main(String[] args) {
SpringApplication.run(QuizApplication.class, args)
.getBean(QuizApplication.class).execute();
}
/** 주입(인젝션) */
@Autowired
QuizService service;
/** 실행 메서드 */
private void execute() {
//등록 처리
//setup();
//전체 항목 취득
//showList();
//1건 취득
//showOne();
//변경 처리
//updateQuiz();
//삭제 처리
//deleteQuiz();
//퀴즈 실행
doQuiz();
}
/** === 퀴즈 2건을 등록합니다 === */
private void setup() {
System.out.println("--- 등록 처리 개시 ---");
//엔티티 생성
Quiz quiz1 = new Quiz(null, "자바는 객체지향 언어입니다.", true, "등록 담당");
Quiz quiz2 = new Quiz(null, "스프링 데이터는 데이터 액세스에 관련된 "
+ "기능을 제공합니다.", true, "등록 담당");
Quiz quiz3 = new Quiz(null, "프로그램이 많이 등록되어 있는 서버를 "
+ "라이브러리라고 합니다.", false, "등록 담당");
Quiz quiz4 = new Quiz(null, "@Component는 인스턴스 생성 어노테이션"
+ "입니다.", true, "등록 담당");
Quiz quiz5 = new Quiz(null, "스프링 MVC에서 구현하고 있는 디자인 패턴에서 "
+ "모든 요청을 하나의 컨트롤러에서 받는 것을"
+ "싱글 컨트롤러 패턴이라고 합니다.", false, "등록 담당");
//리스트에 엔티티를 저장
List<Quiz> quizList = new ArrayList<>();
//첫 인수에 저장될 객체를, 두 번째 인수부터는 저장할 엔티티를 넘겨줌.
Collections.addAll(quizList, quiz1, quiz2, quiz3, quiz4, quiz5);
//등록 실행
for (Quiz quiz : quizList) {
//등록 실행
service.insertQuiz(quiz);
}
//등록 확인
System.out.println("--- 등록 처리 완료 ---");
}
/** 모든 데이터 취득 === */
private void showList() {
System.out.println("--- 모든 데이터 취득 게시 ---");
//리포지토리를 이용해 모든 데이터를 취득해서 결과를 반환
Iterable<Quiz> quizzes = service.selectAll();
for (Quiz quiz : quizzes) {
System.out.println(quiz);
}
System.out.println("--- 모든 데이터 취득 완료 ---");
}
private void showOne() {
System.out.println("--- 1건 취득 개시 ---");
//리포지토리를 사용해서 1건의 데이터를 취득해서 결과를 반환(반환값은 Optional)
Optional<Quiz> quizOpt = service.selectOneById(1);
//반환값이 있는지 확인
if (quizOpt.isPresent()) {
System.out.println(quizOpt.get());
} else {
System.out.println("해당 데이터는 존재하지 않습니다.");
}
System.out.println("--- 1건 취득 완료 ---");
}
/** === 변경 처리 === */
private void updateQuiz() {
System.out.println("--- 변경 처리 개시 ---");
//변경할 엔티티를 생성
Quiz quiz1 = new Quiz(1,"스프링은 프레잉워크입니까?", true, "변경 담당");
//변경 처리
service.updateQuiz(quiz1);
//변경 결과 확인
System.out.println("변경된 데이터는 " + quiz1 + "입니다.");
System.out.println("=== 변경 처리 완료 ===");
}
/** === 삭제 처리 === */
private void deleteQuiz() {
System.out.println("--- 삭제 처리 개시 ---");
//삭제 실행
service.deleteQuizById(2);
System.out.println("--- 삭제 처리 완료 ---");;
}
/** --- 랜덤으로 퀴즈를 취득해서 퀴즈의 정답/오답을 평가 === */
private void doQuiz() {
System.out.println(" --- 퀴즈 1건 취득 개시 ---");
//리포지토리를 이용해서 1건의 데이터를 받기(반환값은 Optional)
Optional<Quiz> quizOpt = service.selectOneRandomQuiz();
//반환값이 있는지 확인
if (quizOpt.isPresent()) {
System.out.println(quizOpt.get());
} else {
System.out.println("해당 데이터는 존재하지 않습니다.");
}
System.out.println(" --- 퀴즈 1건 취득 완료 --- ");
//답 평가
Boolean myAnswer = false;
Integer id = quizOpt.get().getId();
if (service.checkQuiz(id, myAnswer)) {
System.out.println("정답입니다!!!");
} else {
System.out.println("오답입니다.");
}
}
}
728x90
반응형
'Web Develop > Book Study' 카테고리의 다른 글
[Book Study] 스프링 부트 핵심 가이드 - 1. 스프링 부트란? (0) | 2023.08.22 |
---|---|
[Book Study] 스프링 프레임워크 첫걸음 - 12. 애플리케이션 만들기 (애플리케이션 레이어) (0) | 2023.08.17 |
[Book Study] 스프링 프레임워크 첫걸음 - 10. 애플리케이션 만들기 (데이터베이스 조작) (0) | 2023.08.16 |
[Book Study] 스프링 프레임워크 첫걸음 - 9. 애플리케이션 만들기 (0) | 2023.08.16 |
[Book Study] 스프링 프레임워크 첫걸음 - 8. 유효성 검사 기능 알아보기 (0) | 2023.08.16 |
댓글