빅데이터 Java 개발자 교육 - 27일차 [미니프로젝트 - 2일차]

Jun_Gyu·2023년 3월 9일
0
post-thumbnail

📈 현재 진행상황

  • 프로젝트의 원활한 작업을 위해 Github에 branch기능을 적극 사용하기로 하였다.

  • Notion의 가독성을 높이고자 내용의 총 정리를 실시하였다.

  • 어제 작성해둔 쿼리문들을 바탕으로 Mapper를 구현하기 시작하였다.

📃 Mapper 항목 구성

오늘은 ShelterMapper와 AnimalMapper의 기능들에 사용될 쿼리문들을 작성, Test까지 모두 완료하였다.

미리 작성을 해두었기에 금방 끝날 줄 알았지만 3명이 함께 하는 작업인 점과 더불어, 4-5일의 짧은 기간안에 계획과 구현까지 모두 마쳐야 했기에 생각보다 많은 시간이 걸렸다.

📃 ShelterMapper 구성

package mapper;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import dto.Shelter;

@Mapper
public interface ShelterMapper {

	@Insert( value = {
			" INSERT INTO shelter ",
			    "  ( shelter_id, shelter_pw,  ",
			    "    shelter_email, shelter_name,  ",
			    "    shelter_region, shelter_phone )  ",
			  "  VALUES (  ",
			    "  #{obj.shelterId}, #{obj.shelterPw},  ",
			    "  #{obj.shelterEmail}, #{obj.shelterName},  ",
			    "  #{obj.shelterRegion} ,#{obj.shelterPhone} )  "
	})
	public int shelterJoin(@Param("obj") Shelter s); // 보호소 회원가입 (O)

/*------------------------------------------------------------------------------------------*/

	@Select( value = {
		"  SELECT shelter_id ",
		  "  FROM  ",
		    "  shelter  ",
		  "  WHERE  ",
		    "  shelter_id = #{str}  ",
	})
	public Shelter shelterIdCheck(String str);// 아이디 중복확인 (O)
	
/*------------------------------------------------------------------------------------------*/
	
	@Select(value = { 
			"  SELECT * FROM shelter  ",
			  "  WHERE shelter_id = #{shelterId}  ",
				  " AND  ",
			  "  shelter_pw = #{shelterPw}  "
		})
	public Shelter shelterLogin(Shelter s); // 보호소 로그인 하기 (O)

/*------------------------------------------------------------------------------------------*/

	@Update(value = {
		" <script> ",
		" UPDATE shelter SET shelter_email = #{obj.shelterEmail} ",
		
		    " <if test = 'obj.shelterName != null'> ",
			" , shelter_name =#{obj.shelterName}  ",
			" </if> ",
		
			" <if test = 'obj.shelterRegion != null'> ",
			" , shelter_region =#{obj.shelterRegion} ",
			" </if> ",
			
			" <if test = 'obj.shelterPhone != null'> ",
			" , shelter_phone =#{obj.shelterPhone} ",
			" </if> ",
			
		" WHERE shelter_pw =#{obj.shelterPw} AND shelter_id =#{obj.shelterId}",
		" </script> "
	})
	public int shelterUpdate(@Param("obj") Shelter s); // 보호소 회원정보 수정 (O)
/*------------------------------------------------------------------------------------------*/

	@Update( value = {
		"  UPDATE shelter  ",
	    "  SET  ",
		  "  shelter_pw =#{obj.newPW}  ",
	    "  WHERE  ",
		  "  shelter_pw =#{obj.shelterPw}  ",
	    "  AND  ",
		  "  shelter_id =#{obj.shelterId}  "
	})
	public int shelterPwUpdate(@Param("obj") Shelter obj); // 보호소 비밀번호 변경하기(로그인상태에서) (O)
	
/*------------------------------------------------------------------------------------------*/
	
	@Select( value = { 
		"  SELECT shelter_id ",
        "  FROM  ",
		  "  shelter   ",
	    "  WHERE  ",
	      "  shelter_email = #{email}  " 
	})
	public String findShelterId(@Param("email") String email); // 보호소 아이디 찾기(일단 전체출력) (O)

	
/*------------------------------------------------------------------------------------------*/
	
	@Update( value = {
		"  UPDATE shelter  ",
	    "  SET  ",
	      "  shelter_name = 'null',  ",
	      "  shelter_region = 'null',  ",
	      "  shelter_pw = 'null',  ",
	      "  shelter_email = 'null',  ",
	      "  shelter_phone = 'null'  ",
	    "  WHERE  ",
		  "  shelter_id =#{obj.shelterId}  ",
	    "  AND  ",
		  "  shelter_pw =#{obj.shelterPw}  "
	})
	public int shelterDelete(@Param("obj") Shelter s); // 회원탈퇴 (O)
	
	
/*------------------------------------------------------------------------------------------*/

	@Update( value = {
		"  UPDATE shelter  ",
	    "  SET  ",
	      "  shelter_pw =  ",
	    	  "  ( SELECT 100000+ROUND(DBMS_RANDOM.VALUE () * 999999) ",
	    	    "  AS RanNum FROM DUAL )  ",
	  
	    "  WHERE  ",
	  	  "shelter_id = #{obj.shelterId} ",
	    "  AND  ",
	  	  "shelter_email = #{obj.shelterEmail} "
	})
	public int findShelterPw(@Param("obj") Shelter s); //비밀번호 찾기(재설정) (O)
	
	@Select( value = {
		"  SELECT shelter_pw  ",
		  "  FROM shelter  ",
		  "  WHERE shelter_id =#{obj.shelterId}  "
	})
	public String showShelterpw(@Param("obj") Shelter s); // 비밀번호 찾기(재설정된 비번 표시) (O)
	
/*------------------------------------------------------------------------------------------*/

}

로그인 기능과 같이 민감함 부분에 대해서는 보안상의 문제가 발생하지 않도록 코드를 구성해야 한다.
특히, 비밀번호를 잊어버린 상황에서는 더더욱 신중을 기해야한다.

하지만 부족한 프로젝트 준비 기간상, 한계점이 분명 존재할 수 밖에 없었기에, 기능적인 면에서 그동안 배웠던 것들을 최대한 활용하는 것으로 포커싱을 맞췄다.

🔴 발생했던 문제점들

  • 먼저 원래 계획했었던 "신규 비밀번호 이메일 발송"의 기능구현에 이슈가 있었다..

앞서 언급했던 프로젝트 준비 기간의 문제와 더불어, 이번에 사용하게 된 인터페이스는 현업에서 잘 쓰이지 않는 JFrame을 통해서 구현을 해야 했었기에 JFrame을 다루는 방법에 대해서 조사하고, 적용하고, 실패하는 과정에 많은 시간을 빼앗겼다.


  • 그리고 Oracle에서는 잘 작동했던 쿼리문들이 eclipse로 넘어오면서 오타 등으로 인해서 많은 오류가 발생했다.

프로젝트뿐만 아니라, 평소에도 많이 마주쳤던 문제였다. 콤마,를 빼먹거나, 잘못된 열 명을 지정해서 문제가 자주 발생하였는데, 위처럼 빼곡하게 구성된 코드에서 하나의 오타를 찾아내기란 쉬운 일이 아니었다..

또한 오타를 찾아낸다고 하더라도 많은 시간이 소요되기 일쑤였다.


🟢 문제 해결방법

  • 새로운 비밀번호는 이메일이 아니라 JFrame의 팝업창으로 띄우도록 하자!

어떻게 보면 너무 단순한 해결법일수도 있다. 하지만 우리는 현재 우리가 배우지 못한 부분을 해결하기 위해서 많은 시간을 빼앗기기보다는, 현재의 문제점을 직시하여 추후 진행할 최종 프로젝트에서 좋은 결과물을 만들기 위한 "경험"과 "배움"으로 받아들이기로 하였다.

신규 비밀번호와 같은 경우 JFrame을 통해 새로운 팝업창에 표시가 될 수 있도록 신규 비밀번호를 보여줄 수 있는 메소드 기능을 추가하였고,

이후 프론트엔드 수업을 거쳐 OPEN API의 자세한 사용 방법을 숙지하여 숙련도가 올라가게 되면, 지금의 경험을 바탕으로 Email로 신규 비밀번호를 전송하는 기능을 구현해보기로 했다.

(추가적으로 아직 우리는 프론트엔드에 대해서 수업을 나가지 않은 상태에서 프로젝트를 진행하고 있다.)


  • 오타를 찾기 이전에 먼저, 보기 쉽도록 코드를 작성하자.

처음 Oracle에서 작업을 수행할때는 오로지 기능적인 면에서만 생각을 하여 이기적으로 코드를 구성했다..

추후에 문제가 발생했을때 꼭 내가 아니더라도 팀원들과 강사님께 도움을 받기 위해서는 내가 작성했던 코드들을 보여야 할 때가 오기 마련인데, 이러한 부분에 대해서 나의 대처가 미흡했던것은 아닌가 생각이 들었다.

그해서 문법적인 문제를 빠르게 해결하고 코드를 구현하는데 있어 좀 더 구체적인 조언을 받을 수 있도록 아래와 같이 가독성을 높였다.

각 기능을 수행하는 메소드들끼리 주석문을 통해서 기능을 분리하여 정리하였고, 코드마다 충분한 간격을 띄워 한눈에 알아볼 수 있도록 정렬하였다.

이런 식으로 해결을 하니 오타의 발생 빈도도 줄었으며, 보기에도 좀 더 수월해졌다.


profile
시작은 미약하지만, 그 끝은 창대하리라

0개의 댓글