Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Typesciprt
- 로그인 로직
- 마이페이지
- stock option
- 배포
- 캘린더 라이브러리
- Token
- 밸류즈
- Update
- userManagement
- 인증처리
- register
- 관리자페이지
- 이미지 업로드
- Styled Components
- 빌드 및 배포
- 공통메서드
- react
- 로그인
- ui탬플릿
- 파생상품평가
- 스프링시큐리티
- Ajax
- jsonwebtoken
- 밸류즈 홈페이지
- 달력 라이브러리
- RCPS
- mypage
- MRC
- 회원가입로직
Archives
- Today
- Total
I T H
[프로젝트] 9. 백엔드개발 - 회원가입 로직 (Week 2) 본문
화면단 (프론트) 작업이 끝났으므로
이제는 백엔드 작업을 진행하기로 함.
회원가입 백엔드 쪽 로직은 두가지로 구분
1. 회원가입 전 아이디 중복체크를 위해 사용자 테이블에서 아이디가 존재하는지 확인
2. 회원가입 데이터 저장 전 원문 패스워드를 암호화된 패스워드로 변경 후 데이터 테이블로 저장
* 패스워드 암호화 처리는 스프링 시큐리티에서 제공하는 기본 클래스를 사용함.
백엔드 폴더 구성은 아래와 같음.
1. 컨트롤러 (Controller)
화면에서 버튼 클릭 등의 이벤트로 URL 호출 시 매핑할 URL 경로 및 메소드를 지정
2. 서비스 (Service)
데이터베이스 테이블 내 데이터 저장, 수정, 삭제 시 서비스 클래스를 호출하여 트랜잭션 처리를 하기 위함
3. 마이바티스 인터페이스 및 쿼리 매핑 xml (Mapper)
SQL 쿼리 매핑 및 메소드 구현
4. 모델빈 (도메인) (model / domain)
데이터 저장 시 사용할 빈 클래스 생성

[ RegisterController.java ]
package kr.co.art.biz.register.web;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import kr.co.art.biz.register.domain.UserInfo;
import kr.co.art.biz.register.persistence.RegisterMapper;
import kr.co.art.biz.register.service.RegisterService;
@Controller
@RequestMapping("/register")
public class RegisterController {
@Autowired
private RegisterMapper registerMapper;
@Autowired
private RegisterService registerService;
@RequestMapping("")
public String main() {
return "register";
}
/**
* 아이디 중복 체크
* (/register/findUserId)
* @return
*/
@RequestMapping("/findUserId")
@ResponseBody
public List<Map<String, Object>> findUserId(@RequestBody Map<String, Object> param) {
List<Map<String, Object>> list = registerMapper.findUserId(param);
return list;
}
/**
* 회원가입
* (/register/saveAccountInfo)
* @return
*/
@RequestMapping("/saveAccountInfo")
@ResponseBody
public Map<String, Object> saveAccountInfo(@RequestBody UserInfo param) {
Map<String, Object> result = new HashMap<String, Object>();
registerService.saveAccountInfo(param);
result.put("success", true);
return result;
}
}
[ RegisterService.java ]
package kr.co.art.biz.register.service;
import kr.co.art.biz.register.domain.UserInfo;
public interface RegisterService {
// 회원가입
void saveAccountInfo(UserInfo map);
}
[ RegisterServiceImpl.java ]
package kr.co.art.biz.register.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import kr.co.art.biz.register.domain.UserInfo;
import kr.co.art.biz.register.persistence.RegisterMapper;
@Service
public class RegisterServiceImpl implements RegisterService {
@Autowired
private RegisterMapper registerMapper;
// spring security 에서 제공하는 기본 인코딩 정보를 사용
// applicationContext-security.xml 파일에 빈 등록
@Autowired
private PasswordEncoder passwordEncoder; // 패스워드 인코딩 정보
@Override
public void saveAccountInfo(UserInfo userInfo) {
String orgPassword = userInfo.getUserPw();
String userId = userInfo.getUserId();
String encPassword = initUserPassword(orgPassword, userId);
System.out.println("encPassword : " + encPassword);
userInfo.setUserPw(encPassword); // 암호화한 패스워드 정보로 교체
registerMapper.saveAccountInfo(userInfo);
}
/*
* 원문 패스워드를 전달받아 암호화 처리
*/
private String initUserPassword(String orgPassword, String userId) {
return passwordEncoder.encode(orgPassword);
}
}
[ RegisterMapper.java ]
package kr.co.art.biz.register.persistence;
import java.util.List;
import java.util.Map;
import kr.co.art.biz.register.domain.UserInfo;
public interface RegisterMapper {
// 중복 아이디 체크
List<Map<String, Object>> findUserId(Map<String, Object> params);
// 회원가입
void saveAccountInfo(UserInfo params);
}
[ RegisterMapper.xml ]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.co.art.biz.register.persistence.RegisterMapper">
<select id="findUserId" resultType="hashmap" parameterType="hashmap">
SELECT *
FROM ART.ART_USER
WHERE 1=1
AND USER_ID = #{id}
</select>
<insert id="saveAccountInfo" parameterType="userInfo">
INSERT INTO ART.ART_USER (
USER_ID
, AUTH_TYPE
, USER_PW
, USER_NAME
, USER_SEX
, USER_PHONE
, USER_EMAIL
, USER_ADDR
, ZIP_CODE
, OUT_YN
, INPUT_DATETIME
)
VALUES (
#{userId}
, #{authType}
, #{userPw}
, #{userName}
, #{userSex}
, #{userPhone}
, #{userEmail}
, #{userAddr}
, #{zipCode}
, 'N' -- default
, NOW()
)
</insert>
</mapper>
[ UserInfo.java ]
package kr.co.art.biz.register.domain;
/*
* 회원가입 사용자 정보
*/
public class UserInfo {
private String userId; // 사용자 아이디
private String authType; // 사용자 권한 (1: 일반사용자, 2: 관리자)
private String userPw; // 패스워드
private String userName; // 성명
private String userSex; // 성별 (1: 남자, 2: 여자)
private String userPhone; // 전화번호
private String userEmail; // 이메일
private String userAddr; // 주소
private String zipCode; // 우편번호
private String outYn; // 탈퇴여부 (Y: 탈퇴, N: 유지)
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getAuthType() {
return authType;
}
public void setAuthType(String authType) {
this.authType = authType;
}
public String getUserPw() {
return userPw;
}
public void setUserPw(String userPw) {
this.userPw = userPw;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserSex() {
return userSex;
}
public void setUserSex(String userSex) {
this.userSex = userSex;
}
public String getUserPhone() {
return userPhone;
}
public void setUserPhone(String userPhone) {
this.userPhone = userPhone;
}
public String getUserEmail() {
return userEmail;
}
public void setUserEmail(String userEmail) {
this.userEmail = userEmail;
}
public String getUserAddr() {
return userAddr;
}
public void setUserAddr(String userAddr) {
this.userAddr = userAddr;
}
public String getZipCode() {
return zipCode;
}
public void setZipCode(String zipCode) {
this.zipCode = zipCode;
}
public String getOutYn() {
return outYn;
}
public void setOutYn(String outYn) {
this.outYn = outYn;
}
}
[ 완성된 화면 (View) ]

'Spring ArtGallery Project' 카테고리의 다른 글
[프로젝트] 11. 마이페이지 구현 (Week 3) (0) | 2024.01.23 |
---|---|
[프로젝트] 10. 로그인 구현 (Week 3) (0) | 2024.01.23 |
[프로젝트] 8. 화면개발 - 회원가입 페이지 구현 (Week 2) (1) | 2024.01.23 |
[프로젝트] 7. 공통사용 스크립트 작성 (Week 2) (0) | 2024.01.23 |
[프로젝트] 6. Database 설정 및 테이블 설계 - 모델링 (Week 2) (0) | 2024.01.23 |