개발 및 관리/Java2023. 11. 28. 22:06 posted by HighLighter
반응형
1. VO, DTO, DAO, Repository VO = DTO DAO = Repository
2. 인접한 layer 끼리만 통신
컨트롤러 -------------------------> 서비스 -------------------------> DAO 컨트롤러 <------------------------- 서비스 <------------------------- DAO @RestController @Service @Repository @RequestMapping("/")
5. JUnit 단위 / TDD = Test Driven Development 단위 테스트(Unit Test) : (1)Service (2)DAO = Repository Controller Test : End to End Test Postman 사용 / MockMVC 사용테스트
************************************************************************************************ *** (중요함) 저장소(scope이라는 단어가 나오면 3개 중에 1개) : 3개 중 1개에서 저장함 1. ServletContext - 서버 시작시 생성 - 서버 종료시 삭제 - web aplication 개수 단위로 생성됨 1.2. ServletContext 기능 가. application 단위로 데이터 공유 나. application 변수 사용할 때 => [중요함] 페이지 이동시 이전 페이지의 request, response 그대로 받아 사용하는 경우 RequestDispatcher HttpServletRequest.getRequestDispatcher(path) RequestDispatcher.forward(req, resp) 이동했다가 다시 안돌아 온다. .include(req, resp) 이동했다가 다시 돌아 온다. => [중요함, null point exception] 페이지 이동시 새로운 request, reponse 생성 HttpServletResponse.sendRedirect(path)
create table member( userid varchar2(50) not null primary key, passwd varchar2(50) not null, name varchar2(50) not null, email varchar2(50), join_date date default sysdate);
insert into member(userid, passwd, name, email) values ('kim','1234','김철수','kim@gmail.com');
public interface MemberDAO{ public List<MemberDTO> memberList(); public void insertMember(MemberDTO vo); public MemberDTO viewMember(String userid); public void deleteMember(String userid); public void updateMember(MemberDTO vo);
//비밀번호 체크 public boolean checkPw(String userid, String passwd); }
@Repository //서버가 startup될 때 이 클래스가 메모리에 자동으로 등록됨 public class MemberDAOImpl implements MemberDAO{ //로깅 처리를 위한 객체 선언 private static final Logger loggger = LoggerFactory.getLogger(MemberDAOImpl.class);
//SqlSession 객체를 개발자가 직접 생겅하지 않고 스프링에서 연결시켜 줌 @Inject //의존관계 주입 SqlSession sqlSession;
@Override public void deleteMember(String userid) { sqlSession.delete("member.deleteMember", userid); }
@Override public void updateMember(MemberDTO vo) { sqlSession.update("member.updateMember", vo); }
@Override public boolean checkPw(String userid, String passwd) { boolean result = false; // mapper에 넘길 값이 2개 이상인 경우 map으로 묶오서 전달 Map<String, String> map = new HashMap<>(); map.put("userid", userid); map.put("passwd", passwd); int count = sqlSession.selectOne("member.checkPw", map); // 리턴값이 1이면 true, 0이면 false if(count==1) result = true; return result; }
public interface MemberService{ public List<MemberDTO> memberList(); public void insertMember(MembmerDTO dto); public MemberDTO viewMember(String userid); public void deleteMember(String userid); public void updateMember(MemberDTO dto);
// 비밀번호 체그 public boolean checkPw(String userid, String passwd); }
@Controller // 현재 클래스를 Controller Bean으로 등록함 public class MemberController{ private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
@RequestMapping("member/list.do") // 사용자가 요청하는 주소 public String memberList(Model model) { List<MemberDTO> list = memberService.memberList(); logger.info("회원 목록:" + list); model.addAttribute("list", list); // 모델에 저장 return "member/member_list"; // 출력 페이지로 포워딩 }
@RequestMapping("member/write.do") public String write() { return "member/write"; }
// 폼에 입력한 데이터가 MemberDTO dto 변수에 저장됨 // request.getParameter 생략 @RequestMapping("member/insert.do") public String insert(@ModelAttribute MemberDTO dto) { // public String insert(MemberDTO dto, HttpServletRequest request) { // String name = request.getParameter("name"); memberService.insertMember(dto); return "redirect:/member/list.do"; // 목록 갱신 }