해당 프로젝트는 2023/01/25 ~ 2023/03/12 내에 진행되는
아카데미 내 수강생들끼리 팀을 나누어 진행한 모의 프로젝트입니다.
팀원은 5명이었으며, 프로젝트 리더를 맡았습니다.
이전 글 목록
1) 주어진 RFP를 바탕으로 주제 선정 - Spring MVC2 프로젝트
UserController.java
상세 페이지 이동 시 개인 정보를 조회하는 메서드와, 수정 후 수정 정보를 받아 올 메서드가 필요했다.
상세 조회 메서드에서는, 로그인 한 사용자의 session 정보를 받아 그에 해당하는 정보들을 DB에서 꺼내와서 ModelAndView에 담아 View로 return처리 해 주었다.
수정 시 POST방식으로 변하는 정보를 받아왔으며, 혹시나 수정처리가 되지 않았을 경우 사용자에게 수정이 되지 않았음을 알리기 위해 아래와 같이 코드를 작성하였다.
//개인 상세 정보 조회
@RequestMapping("mydetail")
public ModelAndView mydetail(HttpSession session, ModelAndView mv) {
String user_id = session.getAttribute("user_id").toString();
List<UserDto> list = userService.mydetail(user_id); //list : 로그인 된 user_id값에 해당하는 개인 정보
mv.setViewName("user/mydetail");
mv.addObject("data", list);
return mv;
}
//개인 정보 수정
@RequestMapping(value="modify_detail", method=RequestMethod.POST)
public ModelAndView modify_detail(HttpSession session, UserDto userDto) {
int modifyTF = userService.modifyDetail(userDto);
ModelAndView mv = new ModelAndView();
if(modifyTF == -1) { //실패
mv.addObject("message", "samenick"); //오류 메세지를 위한 Obj 추가
return mydetail(session, mv);
} else { //성공
mv.setViewName("common/main");
mv.addObject("message", "oknick");
session.setAttribute("nickname", userDto.getNickname()); //성공했으므로 세션 값 변경
}
return mv;
}
UserService(Impl).java
public interface UserService {
(...생략...)
List<UserDto> mydetail(String user_id);
int modifyDetail(UserDto userDto);
(...생략...)
}
(...생략...)
@Service
public class UserServiceImpl implements UserService{
(...생략...)
@Override
public List<UserDto> mydetail(String user_id) {
return userDao.mydetail(user_id);
}
@Override
public int modifyDetail(UserDto userDto) {
return userDao.modify_detail(userDto);
}
}
UserDao
개인 정보 조회 시 컨트롤러에서 받은 Session의 id값으로 조회하여 리턴 처리 하였다.
프로젝트 내에서 닉네임과 비밀번호만 변경이 가능하도록 정책을 설정했기 때문에
정보 수정 시 nickname값이 중복이 되는지 여부만 확인하여 변경이 가능하다면 변경 할 수 있게 작성하였고
닉네임 중복여부는 회원 가입 시 만들어 놓은 쿼리문을 그대로 사용할 수 있었다.
(...생략...)
@Repository
public class UserDao {
(...생략...)
//개인 정보 조회
public List<UserDto> mydetail(String id) {
return sqlSessionTemplate.selectList("user.mydetail", id);
}
//회원 정보 수정
public int modify_detail(UserDto userDto) {
//정보 수정 시 nickname중복 확인이 필요하기 때문에 만들어놓은 mybatis의 signUpCheck 그대로 사용
String checkTF = sqlSessionTemplate.selectOne("user.signUpCheck", userDto);
if(checkTF == null) {
return sqlSessionTemplate.update("user.modify_detail", userDto);
} else {
return -1; //중복일 때 반환해서 중복이라고 알림
}
}
}
user_SQL.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="user">
<!-- 회원 가입 버튼 클릭 시 email, nickname, phone_num 중복 체크 -->
<select id="signUpCheck" resultType="String">
select NICKNAME
from USER
where NICKNAME=#{nickname}
</select>
<select id="mydetail" resultType="hashMap">
<![CDATA[
select ID, EMAIL, PASSWORD, NICKNAME, PHONE_NUM
from USER
where ID=#{id}
]]>
</select>
<update id="modify_detail">
update USER
set NICKNAME=#{nickname}, PASSWORD=#{password}
where ID=#{id}
</update>
</mapper>
mydetail.jsp
컨트롤러의 ModelAndView에서 return시킨 값을 가지고 수정이 불가능 한 경우를 c:if문으로 처리하였다.
사용자가 수정 화면에 접근 시 비밀번호를 제외하면 모두 기본 값을 보여주게 하였고
위에서 언급한 대로 사이트 정책 상 ID, EMAIL, 휴대전화번호는 수정 불가능하게 readonly처리 하였다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="modify_detail">
<ul>
<c:forEach var="list" items="${data}">
<li>아이디 : <input type="text" name="id" value="${list.ID}" readonly></li>
<li>이메일 : <input type="email" name="email" value="${list.EMAIL}" readonly></li>
<li>비밀번호 : <input type="password" name="password" value=""></li>
<li>닉네임 : <input type="text" name="nickname" value="${list.NICKNAME}"></li>
<c:if test="${message=='samenick'}">
<p>중복된 닉네임이 존재합니다.</p>
</c:if>
<li>휴대전화 : <input type="text" name="phone_num" value="${list.PHONE_NUM}" readonly></li>
</c:forEach>
</ul>
<input type="submit" value="변경하기">
</form>
</body>
</html>
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!