Spring[Spring boot] Bank App - 회원가입(화면구현)

2025. 2. 15. 13:28·Spring
728x90

👨‍💻 지난 포스팅에서 회원 가입 로직을 설계하고 구현한 것에 이어, 이번에는 회원 가입 화면을 구현하고 H2 데이터베이스를 설정하여 초기 데이터를 셋팅하는 과정을 다뤄보겠습니다. 🚀


✅ H2 의존성 추가 (build.gradle)

dependencies {
    runtimeOnly 'com.h2database:h2'
}

 

📌 의존성 확인: H2가 정상적으로 추가되었는지 확인 후 Gradle refresh 실행


✅ application.yml 설정

spring:
  datasource:
    url: jdbc:h2:mem:bankdb;MODE=MySQL  # 인메모리 DB 사용
    driver-class-name: org.h2.Driver
    username: sa
    password: ''
  sql:
    init:
      schema-locations: classpath:db/table.sql
      data-locations: classpath:db/data.sql

📌 설정 확인:

  • jdbc:h2:mem:bankdb;MODE=MySQL → H2를 MySQL 모드로 실행
  • schema-locations, data-locations → 테이블 및 초기 데이터 로드
  • http://localhost:8080/h2-console 접속 후 데이터 확인

비밀번호 설정을 빈 문자열로 했기 때문에 Connect 눌러서 바로 접근 가능 합니다. 접속하면 우리가 사용할 스키마 및 초기 데이터가 전혀 없는 상태 입니다. 이번 예제에서 설정 할 수 있도록 연습해 봅시다.

 

📌 h2 스키마 및 초기 데이터 작업 순서

1. yml 파일에 서버가 매번 실행 될 때 마다 테이블을 생성하고 초기 데이터를 insert 할 수 있도록 설정
2. resourcese/db 패키지 생성 및 table.sql 파일 생성 data.sql 파일 생성
3. sql 쿼리문 입력 (복사 붙여넣기)
4. H2 인 메모리 접근 및 데이터 확인

1. yml … 설정 (인메모리H2설정)

spring:
  mvc:
    view:
      prefix: /WEB-INF/view/ # JSP 파일이 위치한 디렉토리의 접두사를 설정합니다.
      suffix: .jsp # 뷰 이름에 자동으로 추가될 파일 확장자를 설정합니다.
      
  datasource:
    url: jdbc:h2:mem:bankdb;MODE=MySQL  # 데이터베이스 연결을 위한 URL을 설정합니다.
    driver-class-name: org.h2.Driver  # JDBC 드라이버 클래스를 설정합니다.
    username: sa  # 데이터베이스 연결을 위한 사용자 이름을 설정합니다.
    password: ''  # 데이터베이스 연결을 위한 비밀번호를 설정합니다. 여기서는 비밀번호를 빈 문자열로 설정했습니다.
  sql:  # <---- 코드를 추가 
    init:
      schema-locations:
      - classpath:db/table.sql  
      data-locations:
      - classpath:db/data.sql

(mysql설정 - 의존성 충돌시 로컬 DB로 사용하세요)

spring:
  mvc:
    view:
      prefix: /WEB-INF/view/
      suffix: .jsp
  servlet:
    multipart:
      max-file-size: 20MB #파일 용량 설정 최대 20MB   
      max-request-size: 20MB
  datasource:
    url: jdbc:mysql://localhost:3306/mybank?serverTimeZone=Asia/Seoul
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: asd1234

 


2. resourcese/db 패키지 생성 및 table.sql 파일 생성 data.sql 파일 생성


🔹 테이블 및 초기 데이터 삽입

테이블 및 초기 데이터를 자동으로 생성하기 위해 SQL 파일을 생성합니다.

 

✅ resources/db/table.sql (테이블 생성)

create table user_tb(
 id int auto_increment primary key, 
 username varchar(50) not null unique, 
 password varchar(100) not null,
 fullname varchar(50) not null, 
 created_at timestamp not null default now()
);

-- 사용자 계좌 테이블 설계 
create table account_tb(
	id int auto_increment primary key, 
    number varchar(30) not null unique,
    password varchar(20) not null, 
    balance bigint not null comment '계좌잔액',
    user_id int, 
    created_at timestamp not null default now()
);

-- 계좌 사용 내역 테이블 - 입금, 출금, 이체 
create table history_tb(
	id int auto_increment primary key comment '거래내역 ID',
    amount bigint not null comment '거래 금액',
    w_account_id int comment '출금계좌ID', 
    d_account_id int comment '입금계좌ID', 
    w_balance bigint comment '출금 요청된 후 계좌 잔액', 
    d_balance bigint comment '입금 요청된 후 계좌 잔액',
	created_at timestamp not null default now()
);

 

📌 테이블 구조:

  • user_tb → 사용자 정보 저장
  • account_tb → 계좌 정보 저장
  • history_tb → 거래 내역 저장

✅ resources/db/data.sql (초기 데이터 삽입)

-- 샘플 데이터 입력 
-- 유저 
insert into user_tb(username, password, fullname, created_at)
values('길동', '1234', '고', now());

insert into user_tb(username, password, fullname, created_at)
values('둘리', '1234', '애기공룡', now());

insert into user_tb(username, password, fullname, created_at)
values('마이', '1234', '콜', now());

select * from user_tb;

-- 기본 계좌 등록 
insert into account_tb
		(number, password, balance, user_id, created_at)
values('1111', '1234', 1300, 1, now());        

insert into account_tb
		(number, password, balance, user_id, created_at)
values('2222', '1234', 1100, 2, now());        

insert into account_tb
		(number, password, balance, user_id, created_at)
values('3333', '1234', 0, 3, now());        

select * from account_tb;

-- 1번계좌 1000원 
-- 2번계좌 1000원 
-- 3번계좌 0원 

-- 이체 내역을 기록 
-- (1번 계좌에서 2번계좌로 100원 이체한다) 
insert into history_tb(amount, w_balance, 
			d_balance, w_account_id, d_account_id, created_at)
values(100, 900, 1100, 1, 2, now());

-- ATM 출금만! 1번 계좌에서 100원만 출금 하는 히스토리를 만드세요 
insert into history_tb(amount, w_balance, 
			d_balance, w_account_id, d_account_id, created_at)
values(100, 800, null, 1, null, now());

-- 입금 내역만 ! (1번계좌에 500원 입금) 
insert into history_tb(amount, w_balance, 
			d_balance, w_account_id, d_account_id, created_at)
values(500, null, 1300, null, 1, now()); 

📌 초기 데이터 확인:

  • user_tb → 테스트 유저 3명 등록
  • account_tb → 각 유저별 기본 계좌 1개 생성
  • history_tb → 입출금 및 이체 내역 샘플 데이터 등

🔹 H2 데이터베이스 접속 및 확인

 

✅ 3.1 H2 DB 접근 방법

  1. 로컬 서버 실행 (http://localhost:8080/h2-console)
  2. JDBC URL 입력 (jdbc:h2:mem:bankdb)
  3. Connect 클릭 후 user_tb, account_tb 등 데이터 조회

 

SELECT * FROM user_tb;
SELECT * FROM account_tb;
SELECT * FROM history_tb;

 

📌 데이터 검증: 정상적으로 테이블 및 샘플 데이터가 조회되는지 확인


🔹 회원 가입 화면 구현 (JSP + Bootstrap 4 활용)

회원 가입 화면은 HTML 폼을 활용하여 브라우저에서 입력 데이터를 서버로 전송하는 기능을 제공합니다.

✅  signUp.jsp 파일 생성

  1. mainPage.jsp 파일을 복사하여 signUp.jsp 파일로 저장
  2. Bootstrap 4 폼 태그를 활용하여 UI 작성

✅  회원 가입 폼 코드 (signUp.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!-- header.jsp -->
<%@ include file="/WEB-INF/view/layout/header.jsp"%>

<!-- start of content.jsp(메인 영역)   -->
<div class="col-sm-8">
	<h2>회원 가입</h2>
	<h5>Bank App 오신 걸 환영합니다.</h5>
	<form action="/user/sign-up" method="post">
		<div class="form-group">
			<label for="username">Username:</label>
			<input type="text" class="form-control" placeholder="Enter username" id="username" name="username" value="cos">
		</div>
		<div class="form-group">
			<label for="pwd">Password: </label>
			<input type="password" class="form-control" placeholder="Enter password" id="pwd" name="password" value="1234">
		</div>
		<div class="form-group">
			<label for="fullname">Fullname: </label>
			<input type="text" class="form-control" placeholder="Enter fullname" id="fullname" name="fullname" value="spring">
		</div>
		<div class="text-right">
			<button type="submit" class="btn btn-primary">회원가입</button>
		</div>
	</form>
</div>
</div>
</div>

<!-- end of content.jsp(메인 영역)   -->

<!-- footer.jsp -->
<%@ include file="/WEB-INF/view/layout/footer.jsp"%>

부트스트랩 4 Form 태그 활용

 

W3Schools.com

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

signUp.jsp 파일을 생성해주세요

 

signUp.jsp 작업 순서

1. mainPage.jsp 파일에서 코드를 복사후에 signUp.jsp 파일로 붙여 넣기 합니다.

2. Bootstrap 4 Form 태그에서 코드를 복사해서 가져 옵니다.

 

 

2. Bootstrap 4 Form 코드 복사

 

signUp.jsp 파일에 복사한 코드를 불필요 한 부분을 삭제하고 복사 붙여 넣기 합니다

수정 완료된 코드

 

회원 가입 결과 확인 및 오류 테스트

username 컬럼에는 DB 제약 사항인 유니크 키가 걸려 있습니다.

 

동일한 username 으로 가입 재 요청시 오류 확인


🔹 회원 가입 결과 및 오류 테스트

회원 가입 시 username 컬럼이 UNIQUE KEY 제약 조건이 걸려 있으므로, 동일한 username으로 가입 요청 시 오류가 발생합니다.

 

✅ 테스트 시나리오

케이스 입력 데이터 예상 결과
✅ 정상 회원 가입 username=hong, password=1234, fullname=홍길동 회원 가입 성공 및 로그인 페이지 이동
❌ username 중복 가입 username=길동, password=1234, fullname=고 DB 오류 (Unique Key 위반)
❌ 비밀번호 누락 username=hong, fullname=홍길동 400 BAD_REQUEST - password 입력 요청

📌 검증 도구: Postman, Talend API Tester를 활용하여 회원 가입 API 테스트


6. 최종 정리

1️⃣ H2 인메모리 DB 설정 및 접근 방법 학습 (application.yml)
2️⃣ 테이블 (table.sql) 및 초기 데이터 (data.sql) 삽입 후 H2에서 확인
3️⃣ 회원 가입 화면 (signUp.jsp) Bootstrap 4 폼을 활용하여 구성
4️⃣ 회원 가입 후 데이터 검증 및 오류 테스트 (username 중복 테스트 등)

 

🚀 이제 H2 데이터베이스를 활용하여 기본적인 CRUD를 연습할 준비가 완료되었습니다! 🚀

'Spring' 카테고리의 다른 글

[Spring boot] Bank App - 계좌 생성  (0) 2025.02.17
[Spring boot] Bank App - 로그인 처리  (0) 2025.02.17
[Spring boot] Bank App - 회원가입  (0) 2025.02.15
[Spring boot] Bank App - MyBatis 설정 (DB 접근 기술)  (0) 2025.02.14
[Spring boot] Bank App - Exception Handler  (0) 2025.02.13
'Spring' 카테고리의 다른 글
  • [Spring boot] Bank App - 계좌 생성
  • [Spring boot] Bank App - 로그인 처리
  • [Spring boot] Bank App - 회원가입
  • [Spring boot] Bank App - MyBatis 설정 (DB 접근 기술)
공돌이 출신 개발자
공돌이 출신 개발자
공돌이 출신 개발자입니다
  • 공돌이 출신 개발자
    공돌이 출신 개발자
    공돌이 출신 개발자
  • 전체
    오늘
    어제
    • 분류 전체보기 (124)
      • Database (0)
        • SQL (0)
        • 1일 1쿼리 (9)
      • Flutter (40)
        • Dart 언어 (18)
        • App (22)
      • Git (0)
      • Http 기초 지식 (14)
      • HTML5 & CSS3 (0)
      • Java (33)
      • JSP (0)
      • JavaScript (0)
      • Linux (0)
      • MSA (0)
      • Project (0)
      • React (0)
      • Spring (19)
      • 설치 메뉴얼 (1)
      • [Flutter] 프로젝트 (눈길) (8)
        • 작업일지 (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    회원가입
    dart
    로그인
    Java
    공부
    앱개발
    데이터
    HTTP
    flutter
    1일1쿼리
    클래스
    jsp
    android studio
    spring boot
    안드로이드 앱 개발
    개발
    객체
    메서드
    블로그 만들기
    객체지향
    Android
    코딩
    SQLD
    플러터
    안드로이드
    SQL
    프로젝트
    JAVA 기초
    앱 개발
    프로그래밍
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
공돌이 출신 개발자
Spring[Spring boot] Bank App - 회원가입(화면구현)
상단으로

티스토리툴바