정리노트/팀프로젝트

[스프링] 회원정보 불러오기(READ), 수정(UPDATE) 구현

망고고래 2024. 2. 15. 12:40

회원정보는 회원가입시 입력한 폼과 같은 곳에 value 속성을 이용해 값을 불러온다.

같은 페이지에서 회원수정까지 가능하게 한다.

 

 

회원정보 불러오기

1. form 페이지 작성

<title>회원가입</title>
</head>
<body>

	<jsp:include page="/WEB-INF/views/module/nav.jsp" flush="false"/>	

    <section>
        <div class="jumbotron background-lightgreen pt-5 pb-5">
            <div class="container">
                <h2 class="display-3 font text-center">회원가입</h2>
            </div>
        </div>
    </section>

    <section>
        <div class="container" style="padding: 100px 0;">
            <div class="d-flex">
                <div class="form col-sm-5 offset-md-1 border-right me-5">
                    <form:form action="/pet_hug/member/update_info" modelAttribute="member" class="form-horizontal">
                        <h2 class="form-title mb-4">회원 정보</h2>
                        <div class="form-group row">
                            <label for="" class="col-sm-3 control-label">아이디</label>
                            <div class="col-sm-3">
                                <form:input class="input" readonly="true" path="mem_id" value="${member.mem_id}"/>
                            </div> 
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">비밀번호</label>
                            <div class="col-sm-3">
                                <form:password class="input" required="required" path="mem_pw" value="${member.mem_pw}"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">이름</label>
                            <div class="col-sm-3">
                                <form:input class="input" required="required" path="mem_name" maxlength="17" value="${member.mem_name}"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">닉네임</label>
                            <div class="col-sm-3">
                                <form:input class="input" path="mem_nickname" minlength="2" maxlength="10" placeholder="2~10글자" value="${member.mem_nickname}"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">전화번호</label>
                            <div class="col-sm-3">
                                <form:input class="input" maxlength="11" path="mem_phone" placeholder="'-' 없이 숫자만 입력해주세요" value="${member.mem_phone}"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">이메일</label>
                            <div class="col-sm-3">
                                <form:input class="input" maxlength="40" path="mem_email" value="${member.mem_email}"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">주소</label>
                            <div class="col-sm-3">
                                <form:input class="input" maxlength="60" path="mem_addr" required="required" value="${member.mem_addr}"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">상세주소</label>
                            <div class="col-sm-3">
                                <form:input class="input" maxlength="60" path="mem_addr2" required="required" value="${member.mem_addr2}"/>
                            </div>
                        </div>
                    </form:form>
                </div>
            </div>
        </div>
    </section>

    <jsp:include page="/WEB-INF/views/module/footer.jsp" flush="false"/>

</body>
</html>

 

 

 

2. Repository 작성

@Override
	public Member get_member_info(String sessionId) {
		String sql = "select mem_id from user_mem where mem_id = ?";
		System.out.println("sessionId와 일치하는 mem_id 취득");
		String mem_id = template.queryForObject(sql, new Object[] {sessionId}, String.class);
		
		System.out.println("mem_id로 해당하는 row 취득");
		String sql2 = "select * from user_mem where mem_id = ?";
		Member member = template.queryForObject(sql2, new Object[] {mem_id}, new BeanPropertyRowMapper<>(Member.class));
		
		System.out.println("member 반환");
		return member;
	}

 

sessionId로 바로 row를 검색하고 싶은데 template을 잘 다루지 못해서 일단은 구현만 해놓고 나중에 수정할 계획이다.

 

 

+2024.02.16. 수정

중괄호{}가 안에 들어갈 값을 정하는 기호였다. 아주 간단하게 수정할 수 있었다.

	public Member get_member_info(String sessionId) {
		String sql2 = "select * from user_mem where mem_id = ?";
		Member member = template.queryForObject(sql2, new Object[] {sessionId}, new BeanPropertyRowMapper<>(Member.class));
		System.out.println("member 반환");
		return member;
	}

 

sessionId를 통해 얻은 mem_id 대신에 sessionId를 바로 넣었다.

 

 

3. Service 작성

	@Override
	public Member get_member_info(String sessionId) {
		System.out.println("memberRepository.get_member_info() 호출");
		Member member = memberRepository.get_member_info(sessionId);
		return member;
	}

 

 

 

4. Controller 작성

	@GetMapping("/info")
	public String get_member_info(Model model) {
		System.out.println("sessionId 취득");
		String sessionId = (String)session.getAttribute("sessionId");
		
		System.out.println("memberService.get_member_info() 호출");
		Member member = memberService.get_member_info(sessionId);
        
		model.addAttribute("member", member);
		return "/member/member_info";
		
	}

 

 

 

 

 

로그인 후 회원정보 조회

 

 

 

 

 

 

 

 

회원정보 수정

1. 뷰 페이지에 수정/취소 버튼 추가

<title>회원가입</title>
</head>
<body>

	<jsp:include page="/WEB-INF/views/module/nav.jsp" flush="false"/>	

    <section>
        <div class="jumbotron background-lightgreen pt-5 pb-5">
            <div class="container">
                <h2 class="display-3 font text-center">회원가입</h2>
            </div>
        </div>
    </section>

    <section>
        <div class="container" style="padding: 100px 0;">
            <div class="d-flex">
                <div class="form col-sm-5 offset-md-1 border-right me-5">
                    <form:form action="/pet_hug/member/update_info" modelAttribute="member" class="form-horizontal">
                        <h2 class="form-title mb-4">회원 정보</h2>
                        <div class="form-group row">
                            <label for="" class="col-sm-3 control-label">아이디</label>
                            <div class="col-sm-3">
                                <form:input class="input" readonly="true" path="mem_id" value="${member.mem_id}"/>
                            </div> 
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">비밀번호</label>
                            <div class="col-sm-3">
                                <form:password class="input" required="required" path="mem_pw" value="${member.mem_pw}"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">이름</label>
                            <div class="col-sm-3">
                                <form:input class="input" required="required" path="mem_name" maxlength="17" value="${member.mem_name}"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">닉네임</label>
                            <div class="col-sm-3">
                                <form:input class="input" path="mem_nickname" minlength="2" maxlength="10" placeholder="2~10글자" value="${member.mem_nickname}"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">전화번호</label>
                            <div class="col-sm-3">
                                <form:input class="input" maxlength="11" path="mem_phone" placeholder="'-' 없이 숫자만 입력해주세요" value="${member.mem_phone}"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">이메일</label>
                            <div class="col-sm-3">
                                <form:input class="input" maxlength="40" path="mem_email" value="${member.mem_email}"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">주소</label>
                            <div class="col-sm-3">
                                <form:input class="input" maxlength="60" path="mem_addr" required="required" value="${member.mem_addr}"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">상세주소</label>
                            <div class="col-sm-3">
                                <form:input class="input" maxlength="60" path="mem_addr2" required="required" value="${member.mem_addr2}"/>
                            </div>
                        </div>
                        <div class="form-group row mt-4">
                            <div class="col-sm-offset-2 col-sm-10">
                                <input type="submit" value="수정" class="offset-md-8 submit-green">
                            	<a href="<c:url value="/home"/>" class="submit-red">취소</a><br>
                            </div>
                        </div>
                    </form:form>
                </div>
            </div>
        </div>
    </section>

    <jsp:include page="/WEB-INF/views/module/footer.jsp" flush="false"/>

</body>
</html>

 

 

2. Repository 메서드 작성

	@Override
	public void update_member_info(Member member) {
		System.out.println("Repository 도착");
		System.out.println("Member 값: " + member.toString());
		String sql = "UPDATE user_mem SET mem_pw = ?, mem_name = ?, mem_nickname = ?, mem_phone = ?, mem_email = ?, mem_addr = ?, mem_addr2 = ? where mem_id = ?;";
		template.update(sql, member.getMem_pw(), member.getMem_name(), member.getMem_nickname(), member.getMem_phone(), member.getMem_email(), member.getMem_addr(), member.getMem_addr2(), member.getMem_id());
	}

 

 

3. Service 메서드 작성

	@Override
	public void update_member_info(Member member) {
		System.out.println("memberRepository.update_member_info() 호출");
		memberRepository.update_member_info(member);
	}

 

 

4. Controller 메서드 작성

	@PostMapping("/update_info")
	public String update_meber_info(@ModelAttribute("member")Member member, Model model, BindingResult result, HttpServletRequest request) {
		System.out.println("update_member_info() 도착");
		
		//업데이트
		if(result.hasErrors()) {
			return "/member/member_info";
		}else {
			System.out.println("memberService.update_member_info() 호출");
			memberService.update_member_info(member);
		}
		
		//불러오기
		model.addAttribute("member", member);
		get_member_info(model);
		return "member/member_info";
	}

 

+2024.02.16. 수정

1. get_member_info()를 직접 호출하는 코드와 return "member/member_info";는 기능이 중복된다. 그리고 get_member_info()에서 마지막에 model.addAttribute("member", member);를 실행하기 때문에 무의미한 코드다.

2. 현재는 유효성검사를 따로 실행하는 게 아니라 html에서 input 태그의 제약조건으로만 하고 있기 때문에 굳이 BindingResult의 hasErrors()를 사용할 필요가 없다.

	@PostMapping("/update_info")
	public String update_meber_info(@ModelAttribute("member")Member member) {
		System.out.println("update_member_info() 도착");
		
		//업데이트
		System.out.println("memberService.update_member_info() 호출");
		memberService.update_member_info(member);
		
		//불러오기
		return "member/member_info";
	}

코드가 간단해졌다.

 

 

'정리노트 > 팀프로젝트' 카테고리의 다른 글

[팀프로젝트] 24.02.16. 노트  (0) 2024.02.16
[스프링] 회원 탈퇴 구현  (0) 2024.02.16
[팀프로젝트] 24.02.15. 노트  (0) 2024.02.15
[스프링] 로그인 구현  (0) 2024.02.15
[스프링] 회원가입 구현  (0) 2024.02.14