SPRING/Spring

    스프링을 왜 사용하는가? 에 대한 토론글

    https://okky.kr/articles/1430662 OKKY - 스프링의 장점이란게 뭔가요? 전 스프링을 한번도 써본적도 없는 JVM 개발잡니다.자바는 가끔 적어야할 때가 있고, 앱은 JVM에서 돌아가니 자바에 대한 이해도는 조금 있습니다만아는건 하나도 없지만 스프링이란건 얘기 들을 okky.kr 후에 누군가 물어봤을 때 아래 내용들을 알아두고 있으면 좋을 것 같아서 기록

    페이징에 대하여

    페이징에 대하여

    그간 웹개발을 공부하면서 , 다수의 프로젝트들을 만들었었는데 항상 빠지지않고 사용했던게 바로 페이징인 것 같다. 이젠 많이 어렵지 않다고 느낄 정도로 많이 사용해서 익숙해졌지만 정리한 적이 없어 한번 정리해보려고 한다. 예제는 제작한 쇼핑몰 프로젝트이다. [스프링] 쇼핑몰 - 상품목록과 페이징 :: 간편 웹프로그래밍 (tistory.com) 페이징에 필요한 파라미터를 받을 VO public class ItemCriteria { private int page; private int perPageNum; private int rowStart; private int rowEnd; private String catemain; private String catesub; private String sort; /* ..

    스프링에서 ajax 사용의 유형들

    저번 프로젝트를 진행하면서 , ajax를 일부로 많이 사용해봤는데 , 역시 익숙하지 않은 방식이라 손에 겨우익은, 한가지 방식만을 사용해서 데이터를 주고 받았다. (그냥 map으로 넘기기) 프로젝트를 마무리하고 , 부족했던 부분이라고 생각했던 JS와 ajax를 더 공부하면서 여러가지 ajax의 데이터를 서버로 넘기는 유형들을 알게 되었고, 아 이렇게 사용했으면 훨씬 코드를 간결하고 , 개발자인 내가 정말 읽기도 , 사용하기도 편했겠구나.. 하고 느꼈다. 특히 success 부분을 사용해서, 프로젝트를 좀 더 이쁘게(?) 만들 수 있었을텐데... 라고 많이 생각이 났다. 일단 Ajax를 사용할때엔, @RequestMapping 이아니라 @ResponseBody 또는 @RestController를 이용했다...

    [스프링] Session과 Cookie , HttpSession

    session이란? 세션과 쿠키를 사용하는 이유는 HTTP프로토콜의 특징이자 약점을 보완하기 위해서다. HTTP프로토콜은 비연결지향, 무상태 프로토콜이다. 클라이언트가 서버에 요청했을때 응답을 보낸 후 연결을 끊는 처리방식을 가지고 있고, 데이터를 유지하지 않는다. 하지만 로그인이나, 장바구니에 상품을 담아놓거나하는 경우에는 데이터 유지가 필요하다. 이 경우를 위해 쿠키와 세션을 사용한다. 먼저 세션과 쿠키의 가장 큰 차이점은 정보가 어디에 저장되느냐이다. 쿠키는 클라이언트(로컬)에 저장되고, 세션은 서버에 저장된다. 만료시점은 별도로 지정이 가능하고, 쿠키는 로컬에 저장되어 보안상 위험이 있기 때문에 요즘은 잘 사용하지 않는다고 한다.( 로그인유지 기능 등을 제외하고) 쿠키는 로컬에 저장되기 때문에 속..

    [스프링]HTTP프로토콜과 URI를 통한 요청

    [스프링]HTTP프로토콜과 URI를 통한 요청

    스프링을 이용해서 개발을 하던 중, 검색이나 정렬등 여러 기능을 사용해서 웹페이지의 내용들을 표시할때, 왜 ? UriComponents와 같은 라이브러리를 사용해서 uri를 만들고 왜 ? 그 조합되어 웹페이지의 주소창에 표시되는 uri에 따라 표시되는 내용이 달라지는지 왜 ? 브라우저 주소창의 URI에 임의로 값을 넣으면 서버단의 결과값을 바꿀 수 있는지 궁금해졌다. bgno(게시판카테고리구분), page(현재페이지), perPageNum(페이지에 표시 할 게시글 개수), searchType(검색타입) , keyword(검색어), sort(최신순,댓글순 등 정렬) 이다. 게시글 목록을 출력로직인 /board/list라는 컨트롤러 매핑 주소값에 대응되는 쿼리(게시글목록)의 where문에 들어가는 내용들이다..

    DataAccessException 란? -Spring 예외처리

    1. SQLExcpetion JDBC는 모든 Exception을 SQLException 에 하나에 모두 담아버린다. 대부분의 SQLException은 복구가 불가능하다. DAO 밖에서 SQLException을 다룰 수 있는 가능성은 거의 없다. 따라서 필요도 없는 기계적인 throws 선언이 등장하도록 방치하지 말고 가능한 한 빨리 언체크/런타임 예외로 전환해줘야 한다. 2. DataAccessException 런타임 예외이고 DataAccessException 중 가장 루트 class이다. JdbcTemplate 템플릿과 콜백 안에서 발생하는 모든 SQLException을 런타임 예외인 DataAccessException으로 포장해서 던져준다. Spring에서 DB 관련 Exception 은 DataA..

    HttpserveltRequest와 HttpSession,세션과 로그인 로그아웃

    홈페이지를 구현하는 중, 로그인 시에 사용하는 HttpServletRequest와 HttpSession에 대해 궁금해졌다. 일단 Http프로토콜은 -연결상태유지X -요청단위로 Connection -이전 페이지에서 수집한 데이터를 다음페이지에서 사용X -다음 페이지에서도 이전 페이지의 데이터를 유지하기 위해선 어딘가 저장해놓고 유지시켜놓아야함 -저장소 : HttpServletRequest , HttpSession, ServletContext -저장 :setAttribute(name,value) -추출 : getAttribute(name) -삭제:removeAttribute(name) -각 저장소의 차이점: 메모리에서 살아있는 기간이 다름 HttpSession HttpServletRequest 생성 : Cl..

    UriComponents과 URLEncoding

    UriComponents클래스는 Path나 query에 해당하는 문자열들을 추가해서 원하는 URI를 생성할 때 사용한다. UriComponents uricomponets = UriComponentsBuilder.newInstance().path("/board/read").queryParam("bno",12).queryParam("perPageNum", 20).build(); 다음과 같이 지정하게 되면, /board/read?bno=12&perPageNum=20 로 url이 조합된다. url 뒤의 ? & % 와 같은 것은 따로 설명하도록 하겠다. //UriEncoding public String makeSearch(int page) { UriComponents uriComponents = UriCompon..

    AOP를 이용한 트랜잭션 구현 중 트랜잭션이 먹지 않는 현상과 메모리누수경고(Memory leak)=(톰캣구동안됨) 404에러 해결

    메모리누수 경고가 나오며 톰캣 구동이 안되고 서버가 실행이 안되니 당연히 404에러가 나왔다. 처음엔 서버문제인지 몰랐으나 404에러가 뜰 때 특정 페이지로 가게 예외처리를 해놨는데 404에러 페이지로 가게 된 것을 눈치채고 서버오류인지 확인. 에러 목록을 살펴보니 cglib를 깔으란다. pom.xml 에 cglib 추가로 해결. cglib cglib 3.1 오류의 이유를 찾으려했으나 맞는 증상이 없고 스택오버플로우와 깃허브를 힘들게 눈번역해본 결과 내가 사용하는 이클립스 버전이 좀 낮은데 그래서 스프링버전이 낮다..그로인해 생긴 버그같다. 높은 버전의 스프링에선 이 문제를 찾아볼 수 없다.. 해결 후 로그를 확인해보니 at net.sf.cglib.proxy.MethodProxy.invoke(Method..

    스프링 게시글 글쓰기 및 수정, ModelAttribute와 RedirectAttributes의 사용

    @RequestMapping(value = "saveBoard", method = RequestMethod.POST) public String saveBoard(@ModelAttribute("BoardVO")BoardVO boardVO, @RequestParam("mode") String mode, RedirectAttributes rttr)throws Exception{ //edit이 오면 수정 아니면 글쓰기 if(mode.equals("edit")) { boardService.updateBoard(boardVO); }else { boardService.insertBoard(boardVO); } return "redirect:/board/getBoardList"; } 게시판에서 글쓰기버튼을 눌러서 글쓰..