JAVA 웹개발 과정 국비 80일차 정리
80일차
※ 배우는 과정이므로 정확하지 않을 수 있습니다.
잘못된 점은 알려주시면 수정하도록 하겠습니다!
1. Spring Framework 이어서..
오늘 수업은 실습 위주로 진행해서 정리할 것이 많이 없었다.
1) POJO
Plane Old Java Object
스프링이 지향하는 것 중 하나
평범하고 클래식한 자바 객체 방식
스프링의 원조 EJB 프레임워크가 너무 무겁고 어려웠다. Implements 나 Extends 등 개발자들이 어려워하는 개념들을 많이 사용해서 접근성이 좋지 않았기 때문에 경량 프레임워크 Spring을 사용할 때는 이런 것들을 쓰지 말자! 라고 한 것이다.
2) 컨트롤러에 RequestMapping
기본적인 게시판을 만들 때, 멤버에 관련된 기능(로그인, 로그아웃, 회원가입, 회원탈퇴 등..)은 HomeController에서 관장하는 것이 아닌 MemberController를 따로 만들어줬었다.
스프링에서도 마찬가지인데, 만약 회원가입을 위한 페이지를 views/member/signUp.jsp 의 경로로 만들어 두었을 때, 클라이언트가 “/member/signUp” 을 요청한다면 HandlerMapping은 HomeController를 먼저 체크하고 MemberController로 갈 것이다.
이런 불필요한 다른 컨트롤러 체크를 조금이라도 줄이려면 MemberController에 @RequestMapping(“/member/”) 를 해주면 된다.
그리고 아래 메소드들에서 @RequestMapping 경로에 “/member/”를 빼주고 @RequestMapping(“signUp”) 만 써주면 MemberController 안의 모든 메소드 리퀘스트매핑 경로에 “/member/” 가 들어가지 않아도 된다.
@Controller
@RequestMapping("/member/")
public class MemberController {
@RequestMapping("signUp")
public String signUp() {
}
}
3) ID 중복체크 기능 만들기
실습하는 중, 어려웠던 개념이 있어 정리해본다.
ID 중복체크 기능을 만들 때, ID 중복을 검사하는 메소드를 만들어야한다.
MVC2 패턴을 이용할 때는 boolean이든, int 값이든 만들기가 쉬웠는데, 스프링을 이용할 때는
boolean보다는 int를 이용하는 것이 편하다.
① int를 리턴하는 메소드
public int idDuplCheck(String id) {
String sql = "SELECT COUNT(*) FROM member WHERE id = ?";
return jdbc. queryForObject(sql, Integer.class, id);
}
② boolean을 리턴하는 메소드
mapRow 메소드를 오버라이딩 할 때, 리턴값으로 rs.next를 받으려고 했는데 RowMapper 클래스가 어떤식으로 rs.next를 동작시키는지는 알 수 없기 때문에 좋은 방법이 아니었다.
queryForObject는 값을 하나도 받아오지 못할 때 EmptyResultDataAccessException 에러를 발생시키기 때문에 try-catch문을 사용하여 return 값을 매칭시켜준다.
굳이.. 굳이.. 쓰려면 아래와 같이 써야한다.
public boolean isIdExist(String id) {
String sql = "SELECT * FROM member WHERE id = ?";
try{
return jdbc.queryForObject(sql, new RowMapper<Boolean>() {
@Override
public Boolean mapRow(ResultSet rs, int rowNum) throws SQLException {
return true;
}
}, id);
}catch(EmptyResultDataAccessException e) {
return false;
}
}
4) @ResponseBody
ajax를 사용하여 값을 jsp에서 서버로 보내는 것은 MVC2 때와 같다.
그러나 서버에서 jsp로 ajax 응답은 방법이 조금 달라진다.
return값이 String일 때는 Dispatcher를 거쳐 ViewResolver에게 전달하여 URL을 조립시킨다. 그래서 Dispatcher에게 return 값을 보내줄 때, 이 값은 ajax에게 보내는 것이라고 알려줘야한다.
@ResponseBody 어노테이션을 붙여주면, 리턴시키는 값을 그대로 클라이언트에게 보내게끔 만들어준다.
@ResponseBody
@RequestMapping("idDuplCheck")
public String idDuplCheck(String id) {
int result = dao.idDuplCheck(id);
return String.valueOf(result);
}
댓글남기기