오전수업
- 서비스 인터페이스 안만들어도 transactional 쓸수있다
- 인터페이스에 I 붙이지 않는다 (Java 7 doc기준)
- 쿼리 일렬로, 쉼표 통일할것
- 엑셀 관련한 라이브러리는 jxml로 써라
- 스프링최초역사로 거슬러올라가서 얘기하자면..
- 옛날에는 interface를 만들었다.. 외국인은 규칙을 좋아한다?
- mysql, oracle, 에서 자유롭게하려고 인터페이스
- 하지만 우리 시스템은 굳이 interface필요없다고 생각하면 cglibnodab? 을 넣어서 개발한 사람들도있었음
- 스프링 3.0대로 넘어오면서 인터페이스 없이 작동하도록 기본적으로 변경됨 혹은 옵션만 넣어주면 되도록
<aop:config proxy-target-class="true"/>
버전에 따라 이걸로 충분히 인터페이스 없이 개발가능
- 우린 인터페이스가 필요 없는 사람들이라는 부장님의 의견,,
- redirect 대신 forward 해라...
- 리다이렉트하면 중구문화동 검색해, 2페이지 들어가서 뭐 고치고 저장눌렀더니 처음으로 돌아가게됨
- 인서트,업데이트 치고 리다이렉트하면안된다...
- 리다이렉트대신 포워드해라
- 근데 이때 문제점은 f5 눌렀을 때 중복등록방지가 안된다
- 저장용토큰(유일한아이디)을 만들어서 브라우저로 보내주고 세션에 하나 올려놔 그리고 저장을 하면 히든값으로 saveToken이 날아올거고, 그 세션에있는 token과 같다면 저장을해주고 세션에 있는걸 날려버려, 그리고 다시 f5누르면 세션에 값이 없으니 비교할 수 가 없음, 그럼 다시 조회화면이나 목록으로 건너가도록.
이렇게 게시판하나를 잘 만들면 그 다음 기능도 비슷한 로직으로 구현할 수 있음
- getmapping ,postmapping 하지말고 requestmapping 주소를 따로써라
- form 화면으로 보낼땐 boardInsertView.do
- 등록할땐 boardInsert.do 이런식으로
crud 컨트롤러 분리하지말고 한컨트롤러내에서 메서드 분리
비밀번호 암호화, 파일 apache commons 사용해라
- io, compress(압축관련), codec(sha-256)
- 예전엔 poi로 만들었는데, 그렇게 되면 구리게나옴
- jxls.sourceforge.net/getting_started.html 이거써라
오후수업
- 컨트롤러 굳이 행위별로 나누지않아도된다
- 컨트롤러 클래스 파일이 너무 많아지기때문에..
- 소규모프로젝트인 경우는 나눠서 쓰기도하지만 거의 그렇게 하지 않음
- 보드지울때
- 있으면 바로 지우는게아니라, 서비스단에서 글 userid와 session id와 같을때만 지울수있도록, jsp단에서만 막는게아닌 자바단에서도 막아줘야한다
<select name="boardFormVO.searchBoardVO.searchCondition">
<c:forEach items="${codeList}" var="item">
<option value="${item.code}">${item.codeNm}</option>
</c:forEach>
</select>
// 위 코드를 이렇게 쓸 수 있음
<form:select path="searchBoardVO.searchCondition" cssClass="use">
<form:options items="${codeList}" itemValue="code" itemLable="code"/>
</form:select>
- selected가 적용됨
- form:select를 안쓰면 if문 넣어서 eq로 비교하여 selected를 적용시켜줘야함
@ModelAttribute("board")
public BoardVO board() {
return new BoardVO();
}
예외처리
- ServiceResult를 switch-case로 분기해서 처리하기보다는 exception을 던져서 try-catch로 해주는게 낫다
model.addAttribute("message", NotyVO(오류입니다))
같은 중복코드는 BaseController 에 함수로 빼놓고 상속받아라..
게시글 단건 상세조회
- board, attachList, replyList 따로 조회해서 받아서 model에 넣으려면 컨트롤러에서 처리