Integer는 125까지만 int로서 비교되고 이후로는 equals를 사용한 문자열로 비교해야한다!!!
1. 계좌이체 package 구조
1. package 안의 package
- course - round
- 예시
- subject - unit
kdt flutter 과정 - 1회차
- springboot - springboot controller
2. 계좌이체를 위한 history package 구조 변경
- 계좌마다 이체 내역이 생김
- account package 내부에서 history package 관리
- 이체 내역만 보는 페이지가 있으면 historyController가 필요하지만 계좌상세 페이지에 이체 내역을 확인할 수 있기 때문에 controller는 따로 만들지 않아도 된다.

2. account/transfer-form.mustache
- URI 및 입력 받는 데이터 확인하기

3. AccountRequest.transferDTO
- account/transfer-form.mustache에서 client로부터 입력 받는 데이터를 필드로 지정한다.
@Data
public static class TransferDTO {
private Integer amount;
private Integer withdrawNumber;
private Integer depositNumber;
private String withdrawPassword;
}4. AccountController
1. 계좌 이체 페이지로 연결되는 메서드
- 이때 계좌 이체 또한 로그인한 유저만이 사용 가능한 기능이므로 인증 과정이 필요하다.
- history package에 위치해서 주소를 /history/transfer-form 이라고 생각할 수도 있지만 기록 - 이체 보다는 계좌 - 이체가 자연스러운 흐름이므로 /account/transfer-form 으로 주소를 지정한다.
// history/transfer-form : 기록/이체는 약간 어색할수도
@GetMapping("/account/transfer-form")
public String transferForm() {
//공통 부가 로직
User sessionUser = (User) session.getAttribute("sessionUser");
if (sessionUser == null) throw new RuntimeException("로그인 후 사용해주세요"); // 로그인X시 아예 못들어오도록
return "account/transfer-form";
}2. 계좌 이체하는 메서드
- 인증 과정이 필요하다.
- client로부터 받은 데이터를 Service로 넘기면서 이때 로그인한 유저의 id도 함께 넘긴다.
- return되는 페이지는 계좌 상세 페이지이면 좋지만 아직 만들지 않았기 때문에 home으로 redirect 연결해둔 뒤 주석으로 TODO를 작성해두면 이후에 찾아서 수정하도록 한다.
@PostMapping("/account/transfer")
public String transfer(AccountRequest.TransferDTO transferDTO) {
//공통 부가 로직 - aop, intercepter, security filter
User sessionUser = (User) session.getAttribute("sessionUser");
if (sessionUser == null) throw new RuntimeException("로그인 후 사용해주세요"); // 로그인X시 아예 못들어오도록
accountService.계좌이체(transferDTO, sessionUser.getId());
return "redirect:/"; // TODO : 계좌상세 페이지로 redirect 수정
}5. AccountService
1. 비지니스 로직
@Transactional
public void 계좌이체(AccountRequest.TransferDTO transferDTO, int userId) {
// 1. 출금 계좌 조회, 없으면 RuntimeException
// 2. 입금 계좌 조회, 없으면 RuntimeException
// 3. 출금 계좌의 잔액 검사
// 4. 출금 비밀번호 확인해서 동일한지 체크
// 5. 출금계좌 주인이 맞는지 확인(로그인한 유저가)
// 6. Account Update 출금계좌 (핵심 로직)
// 6. Account Update 이체계좌 (핵심 로직)
// 7. History Save (핵심 로직)
}Share article