Servlet & Jsp

[JDBC] 메소드를 잘 확인합시다. setter메소드 ㅠㅠ 복붙의 위험성

Razelo 2021. 1. 19. 18:38
package com.dev.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dev.service.MemberService;
import com.dev.vo.MemberVO;

public class MemberInsertController implements Controller{
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		
		String id = request.getParameter("id");
		String passwd= request.getParameter("passwd");
		String name = request.getParameter("name");
		String mail= request.getParameter("mail");
		System.out.println("-----MemberInsertController----");
		System.out.println(id);
		System.out.println(passwd);
		System.out.println(name);
		System.out.println(mail);
		System.out.println("---------------------------------");
		//여기까지 잘 전달됨. 
		if(id.isEmpty() || passwd.isEmpty() || name.isEmpty()||mail.isEmpty()) {
			request.setAttribute("error","모든 항목을 빠짐없이 입력해주시기 바랍니다!");
			HttpUtil.forward(request, response, "/memberInsert.jsp");
			return;
		}
		
		MemberVO member = new MemberVO();
		member.setId(id);
		member.setPasswd(passwd);
		member.setName(name);
		member.setMail(mail);
		System.out.println("member에 setter메소드를 호출하고 난 뒤 ");
		System.out.println(member.getId());
		System.out.println(member.getPasswd());
		System.out.println(member.getName());
		System.out.println(member.getMail());
		System.out.println("--------------------------------");
		MemberService service = MemberService.getInstance();
		service.memberInsert(member);
		
		request.setAttribute("id",id);
		HttpUtil.forward(request, response, "/result/memberInsertOutput.jsp");
		
	}
}

 

오늘 회원가입/로그인/탈퇴/전체회원보기/회원정보 수정하기 등등의 기능을 할 수 있는 페이지를 구성했는데, 계속 oracle db에 form태그에서 전달한 정보가 기입되지 않는 점때문에 하루종일 헤맸다.

 

평소에 하던 그냥 작은 코드 몇 조각이 아니라 평소보다 좀 더 많은 파일들을 만들다 보니까 어디서 에러가 난건지 이리저리 찾다가 시간이 다갔다.

 

콘솔창에서 에러를 확인하고 디버그모드로 일일이 확인하기는 했는데, 그러는 과정 자체가 시간이 많이 들었다. 아직 익숙하지 못한 탓일까? 

 

그런데 저번에도 말했지만 정말 웃긴건 항상 실수는 로직에서 나오는게 아니라 오타나 아니면 아예 엉뚱한 걸 써놓은 경우가 많은 것 같다. (아니 사실 100%이다)

 

 

이게 오늘의 메인이었다. 다른 잔잔바리 에러들은 파일명에 글자 하나가 틀려서 경로가 잘못됬다던가, 혹은 쿼리에 엉뚱한 테이블명을 써넣었다던가. 하는 실수였다. 그런데 마지막 에러가 (oracle db에 값이 전달이 안되는 상황) 정말 오래걸렸다. 

총 4개의 컬럼으로 4개의 값을 전달하는데, ID/비밀번호/이름/이메일  이렇게 4개의 값을 전달한다. 그런데 항상 전달하고 보면 

 

이름/비밀번호/null/null 이렇게 전달이 됬다.  즉 이름이랑 이메일이 계속 null 값이 들어간거였다. 변수명이 틀렸나해서 VO 객체 필드명까지 다 확인했는데 이상이 없었다. 

 

그러다가 오후 늦어서야 발견했는데, 위에 member.setId(id); 이 부분에서 4개의 setter 메소드가 반복되는데, 내가 그걸 복붙해놓고 setid setpasswd setid setid 이렇게 써놨었다. 그러니까 아이디랑 비밀번호만 정상으로 전달되고 나머지 이름이랑 이메일은 아예 값이 안들어간 상황이 연출된거다. 

 

그래서 getter를 통해 가져오려 하니까 null이 나오는 것이다. 

 

setter 메소드 쓸때 귀찮아서 가끔 왕창 복붙하고 나서 일일히 고치긴하는데, 이부분에서 진짜 가~끔 고치다말더라. 무슨 생각으로 그랬는진 모르겠지만 ^^ 아무튼 사소한 실수도 줄입시다 

 

아 그리고 위에 코드에서 쓸데없이 sysout 코드가 많은건 저 중에서 어디에서 에러가 난건지 확인하기 위해 일일히 값을 찍어보느라 그랬다.  예전에 교수님이 가장 간단하면서도 가장 효율적인 방법은.  그냥 의심가는 부분을 기점으로 해서 print로 값을 찍어보라는 게 젤 쉽다고 하셨는데, 맞는 말씀인 것 같다. 

반응형