Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

회원가입 기능 구현 #10

Merged
merged 4 commits into from
Jan 9, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/main/java/com/ssginc/nojam/config/EncryptionConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.ssginc.nojam.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;

@Configuration
@ImportResource("classpath:applicationContext.xml")
public class EncryptionConfig {
}
Original file line number Diff line number Diff line change
@@ -1,32 +1,59 @@
package com.ssginc.nojam.member.controller;

import com.ssginc.nojam.member.service.MemberService;
import com.ssginc.nojam.member.vo.MemberVO;
import jakarta.servlet.http.HttpSession;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

@Slf4j
@Controller
@RequestMapping("member")
@RequiredArgsConstructor
public class MemberController {

// localhost:8080/member/forgot-password
@GetMapping("forgot-password")
public String forgotPw() {
System.out.println("========================================");
System.out.println("GET request to find password received...");
private final MemberService memberService;


return "/member/forgot-password";
}

// localhost:8080/member/register
@GetMapping("register")
public String register() {
// 회원가입 화면 띄우기
@GetMapping("signup")
public String signUp() {
log.info("singup 요청됨.");
return "/member/signup";
}

// 회원가입
@PostMapping("signup2")
public String signUp2(MemberVO memberVO, Model model) {
String emailPattern = "^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$";

// 이메일 형식 검증
if (!memberVO.getUserEmail().matches(emailPattern)) {
model.addAttribute("error", "올바른 이메일 형식을 입력해주세요!");
return "/member/signup"; // 다시 회원가입 페이지로
}

memberService.signUpPwEncoder(memberVO);
System.out.println("========================================");
System.out.println("GET request to register received...");
System.out.println(memberVO);
return "redirect:/";
}

return "/member/register";
// ID 중복 체크
@GetMapping("checkId")
@ResponseBody // 뷰인 template으로 가지 않고 단순한 데이터나 json으로 보냄.
public boolean checkId(@RequestParam String userId) { // ID 중복 체크
boolean result = memberService.checkId(userId);
return result;
}


@GetMapping("login")
public String login(HttpSession session) {
System.out.println("========================================");
@@ -50,4 +77,13 @@ public String logout(HttpSession session) {

return "redirect:/";
}

// localhost:8080/member/forgot-password
@GetMapping("forgot-password")
public String forgotPw() {
System.out.println("========================================");
System.out.println("GET request to find password received...");

return "/member/forgot-password";
}
}
16 changes: 16 additions & 0 deletions src/main/java/com/ssginc/nojam/member/mapper/MemberMapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.ssginc.nojam.member.mapper;

import com.ssginc.nojam.member.vo.MemberVO;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.ui.Model;

import java.util.List;

@Mapper
public interface MemberMapper {
// 회원가입
int insertMember(MemberVO memberVO);

MemberVO selectMemberById(String userId);

}
37 changes: 37 additions & 0 deletions src/main/java/com/ssginc/nojam/member/service/MemberService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.ssginc.nojam.member.service;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.ssginc.nojam.member.mapper.MemberMapper;
import com.ssginc.nojam.member.vo.MemberVO;
import lombok.RequiredArgsConstructor;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class MemberService {

private final MemberMapper memberMapper; // DI
private final PasswordEncoder passwordEncoder; // BCrypt 인코더 사용

private static final Logger log = LoggerFactory.getLogger(MemberService.class);

public int signUpPwEncoder(MemberVO memberVO) {
//mapper에게 주고 db처리해줘...
String pw = passwordEncoder.encode(memberVO.getUserPw());
memberVO.setUserPw(pw);
int result = memberMapper.insertMember(memberVO);
return result;
}

public boolean checkId(String userId) {
MemberVO member = memberMapper.selectMemberById(userId);
log.info("조회 결과: userId={}, 조회된 MemberVO={}", userId, member);
return member == null; // null이면 중복되지 않은 상태
// 가입하려고 하는 id를 가지고 검색을 해서
// null이 아니면 이 id로 이미 가입이 되어있다라는 얘기 --> 사용할 수 없는 아이디로 처리!
// null이면 이 id로 가입한 사람이 없다라는 얘기 --> 사용할 수 있는 아이디로 처리!
}
}
37 changes: 37 additions & 0 deletions src/main/java/com/ssginc/nojam/member/vo/MemberVO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.ssginc.nojam.member.vo;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class MemberVO {

private String userId; // 회원 아이디
private String userPw; // 비밀번호
private String userName; // 이름
private String userEmail; // 이메일 주소
private String userRole; // 역할 (HEAD, BMNG, BWKR, GUEST)
private LocalDateTime lastModifiedAt; // 마지막 수정 시간
private String branchId; // 지점 아이디 (nullable)

@Override
public String toString() {
return "MemberVO{" +
"userId='" + userId + '\'' +
", userPw='" + userPw + '\'' +
", userName='" + userName + '\'' +
", userEmail='" + userEmail + '\'' +
", userRole='" + userRole + '\'' +
", lastModifiedAt=" + lastModifiedAt +
", branchId='" + branchId + '\'' +
'}';
}
}

21 changes: 21 additions & 0 deletions src/main/resources/applicationContext.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- PasswordEncoder Bean 설정 -->
<!-- 내 코드가 아니면 어노테이션으로 싱글톤으로 만들 수가 없음. -->
<!-- 외부 설정 파일에서 싱글톤으로 만들어달라고 설정할 수밖에 없음. -->
<!-- 설정 파일은 자바 또는 XML로 함. -->
<!-- 프로젝트 시작할 때 이 파일을 읽어서 bean이라는 폴더를 만나면 싱글톤 객체로 만든다!! -->
<!-- Security passwordEncoder = new Security(10);
변수명은 bean 태그의 id로 설정함.
생성할 때 필요한 입력값은 constructor-arg라는 태그에 넣어주면
생성자의 입력값으로 넣어줌.
-->
<bean id="passwordEncoder"
class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">
<constructor-arg value="10" /> <!-- 암호화 강도 설정 -->
</bean>
</beans>
26 changes: 26 additions & 0 deletions src/main/resources/mapper/MemberMapper.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?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="com.ssginc.nojam.member.mapper.MemberMapper">
<!-- MemberMapper.java와 연결이 됨. -->

<!-- 회원가입 -->
<insert id="insertMember"
parameterType="com.ssginc.nojam.member.vo.MemberVO">
INSERT INTO member (user_id, user_pw, user_name, user_email, user_role, last_modified_at, branch_id)
VALUES (#{userId}, #{userPw}, #{userName}, #{userEmail}, 'GUEST', NOW(), NULL)
</insert>

<!-- 회원 정보 찾기(ID중복 체크) -->
<select id="selectMemberById"
parameterType="string"
resultType="com.ssginc.nojam.member.vo.MemberVO">
SELECT * FROM member
WHERE user_id = #{userId}


</select>


</mapper>
2 changes: 1 addition & 1 deletion src/main/resources/templates/index.html
Original file line number Diff line number Diff line change
@@ -61,7 +61,7 @@ <h1 class="h4 text-gray-900 mb-4">Welcome Back!</h1>
<a class="small" href="/member/forgot-password">Forgot Password?</a>
</div>
<div class="text-center">
<a class="small" href="/member/register">Create an Account!</a>
<a class="small" href="/member/signup">Create an Account!</a>
</div>
</div>
</div>
94 changes: 0 additions & 94 deletions src/main/resources/templates/member/register.html

This file was deleted.

Loading