springboot - blog project (38,39)

Yuri Lee·2020년 8월 27일
0

springboot - blog project

목록 보기
22/49

스프링부트 강좌 38강(블로그 프로젝트) - 회원가입 하기 Ajax요청

@Service

서비스가 왜 필요할까?

  1. 트랜잭션 관리
  2. 서비스 의미 때문

송금이라는 서비스

홍길동 ---3만원송금---> 임꺽정
5만원 2만원

  1. 홍길동 금액 update() - commit이 일어나야 한다는 의미
  2. 임꺽정 금액 update() - commit

서비스라는 건 하나의 어떤 기능,
업데이트 하나 자체가 하나의 서비스가 될 순 있지만, 여러가지 로직이 묶여서 서비스가 되는 것이다.

입금 서비스

홍길동이 만원을 들고 있는데 자기 자신에게 2만원을 입금해서 3만원이 나오게 하고 싶다. 이때는 홍길동 금액만 업데이트 하면 된다. 이때는 서비스가 하나의 데이터베이스, 로직을 들고 있을 수 있다.

하지만 송금서비스와 같은 경우는 1개 이상의 로직을 갖고 있다. 그래서 repository는 CRUD

송금서비스는 U를 2개를 들고 있어야 한다. 이 두개를 들고 있다가 둘다 오류가 없으면 커밋을 해야한다. 근데 둘 중 하나가 실패를 했다고 하면?...

홍길동은 2만원이 되었는데 임꺽정이 2만원에서 5만원으로 변하지 않았다면? 그럼 둘다 rollback을 해서 원상복귀해야 한다.

따라서 이 2개의 트랜잭션을 하나의 트랜잭션으로 묶어서 서비스화 할 수 있다.

서비스라는 것은 하나의 트랜잭션만을 들고 있기도 하지만 여러개의 트랜잭션을 모아놓기도 한다.

package com.yuri.blog.service;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.yuri.blog.model.User;
import com.yuri.blog.repository.UserRepository;

// 스프링이 컴포넌트 스캔을 통해서 Bean에 등록을 해줌. IoC를 해준다
@Service
public class UserService {

	@Autowired
	private UserRepository userRepository;
	
	// 회원가입 전체 서비스가 하나의 트랜잭션으로 묶이게 된다
	// 전체가 성공을 하면 커밋이 될 것임
	@Transactional
	public int 회원가입(User user) {
		try {
			userRepository.save(user);
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("UserService : 회원가입() :"+e.getMessage());
		}
		return -1;
	}
}

회원가입을 한 결과 디비에 잘 들어갔음을 확인할 수 있다.


-이 글은 유투버 겟인데어의 스프링 부트 강좌를 바탕으로 정리한 내용입니다.-

profile
Step by step goes a long way ✨

0개의 댓글