본문 바로가기

Spring boot49

Springboot [다중 파일 업로드 처리] 오랜만에 포스팅을 하게 되는 것 같은데 그동안 vue.js로 디자인을 구현하다가 차량 상세페이지에서 기존에는 단일 파일 업로드로 차량 썸네일, 차량사진 각 1장씩 등록하여 보여주었다. 차량 사진을 여러장 추가하여 사용자에게 보여줄수 있도록 하는 기능이 필요하여 springboot에서 단일 파일업로드 메소드를 다중 파일업로드로 수정 해보았다. 참고로 vue.js의 input태그에서 multiple속성을 이용하면 파일을 여러장 선택 가능하다. vue에 관련한 내용은 다음 포스팅에서 간단하게 다루어 보도록 하겠고 vue.js에서 요청을 보내면 file이 list형식으로 fileList를 서버로 보낸다. 기존의 Controller에서는 매개변수로 MultipartFile타입으로 받아와서 단일 파일 업로드 처리를.. 2022. 10. 28.
Springboot [회원정보 수정/ 수정시 관련 게시물도 변경] 이번 포스팅에서는 회원정보를 수정하는 기능을 해보았다. 회원정보 수정 목록은 3가지로 만들었다. 1. nickName(닉네임) 2. phoneNumber(연락처) 3. password(비밀번호) 회원정보를 담고있는 member테이블을 우선 보면 7가지 컬럼이 있는데 위의 3가지 컬럼 제외 나머지의 회원 정보들은 변동될 여지가 거의 없기때문에 수정이 불가능하다. 현재 차량 판매 글을 쓰면 car테이블의 author에 nickName을 넘겨주어 (car.author = member.nickName)의 형식으로 글정보가 담겨 있는데 회원정보인 닉네임이 변경되면 글의 author 또한 똑같이 바뀌어야 한다. 회원정보 수정시 닉네임을 바꾸지 않으면 상관이 없지만 수정을 한다면 자동으로 바뀌게 기능을 만들어 놓았다.. 2022. 9. 27.
Springboot [mybatis (테이블 LEFT JOIN)] 현재 마이페이지를 만들고 있는데 마이페이지에 보여질 항목은 1. 나의 찜목록 2. 판매중인 차량 (자신이 올린 글의 조회수, 댓글수) 위와 같이 크게 나누어 보았다. 판매중인 차량의 상태를 직관적으로 빠르게 파악하기 위하여 조회수 및 댓글 수를 보여주도록 하였다. 자신이 올린 글의 조회수는 Car테이블의 readCount 컬럼이 있기때문에 이를 이용하여 쉽게 보여줄 수 있지만 글의 comment수는 Car테이블 자체로만 보면 보여줄 수 없기때문에 방법을 생각하다가 글 관련 정보인 Car 테이블과 댓글관련 테이블인 Comment 테이블을 join을 하여 보여주도록 하였다. 두개의 테이블을 그룹화하여 COUNT를 하면 글에 해당하는 댓글 수를 불러 올 수있다. LEFT JOIN을 사용하여야 하는데 LEST .. 2022. 9. 26.
Springboot [게시판 카테고리별 검색기능] 지난번 포스팅에서 차량 이름으로 게시글을 검색하는 기능을 구현하였다. 이번에는 category(카테고리)를 만들어 차량이름 이외에 작성자, 지역도 검색조건으로 지정해서 검색하는 기능을 구현해 보려고 한다. 방법은 매우 간단하다. 차량이름(carName)으로 검색하는 메서드와 같이 컬럼명만 바꿔서 2가지 메서드를 CarRepository에 추가해준다. 그후 어떻게 구현해야 할지 생각을 해야한다. 기존의 controller검색 기능에서는 param을 3개(keyword, page, size) 받아오고 있었는데 카테고리에 대한 정보도 필요하기 때문에 category param을 추가해서 같이 받아오도록 해준다. 그리고 service로 받아온 4개의 변수를 넘겨준다. 그 다음사용할 메서드가 3개가 있기 때문에 .. 2022. 9. 15.
Springboot [게시판 검색기능] 게시판 검색기능은 이전 포스팅의 JPA페이징 처리를 응용하여 만들 수 있다. 우선 생각하여야 할것은 검색기능을 만들었을때 필요한 데이터를 생각하여야 한다. 1. 검색시 나올 글 목록(content) 2. 검색후 페이징 처리 (page, size) 3. 검색어 (keyword) +++++++++++++++++++++ 4. 검색어 분류 (category) 카테고리를 넣기전 3번까지의 검색기능부터 만들어 볼 예정이다. 검색기능은 like쿼리를 사용하여 만들어야 한다. 예를들어 car테이블의 carName을 검색하려면 Select * From car Where carName like %keyword% AND isDel = 'N' 위의 쿼리가 실행되어야 하며 쿼리를 JPA로는 findCarByCarNameCont.. 2022. 9. 15.
Springboot [페이징 처리] (JPA) 이번에는 3번째 방법인 JPA로 페이징처리를 해보겠다. 3가지 방법중 JPA로 페이징 처리하는것이 제일 간단하고 vue와 연동하는데에 있어서 편리해서 본 프로젝트에 JPA 페이징 처리를 하였다. JPA는 mybatis와는 다르게 Page타입으로 반환을 받는다. Page타입으로 반환을 받으면 여러 인터페이스를 제공받을 수 있는데 content에는 게시글에 대한 정보를 가져올 수 있고 content를 모두 반환받으면 pageable도 같이 반환을 받는데 여기서 pageSize와 pageNumber의 정보를 받을 수 있다. 그 외에도 totalPages(전체 페이지 수), totalElements(전체 게시글 수)에 대한 것도 같이 반환이 되기 때문에 더 편리하게 사용할 수 있다고 느꼈다. 우선 api호출시 .. 2022. 9. 14.
Springboot [페이징 처리] (rownum 쿼리 이용) [2] 이전 포스팅에서 rownum을 이용하여 두개의 파라미터를 이용해 페이징 처리를 하였는데 frontend에서 여러가지 정보 (이전, 다음, 페이지 시작번호, 페이지 끝번호)를 처리하기 위해 PageDTO를 만들것이다. 끝번호 this.endPage = (int)(Math.ceil(페이지 번호 / 10.0 )) * 10; 여기서 ceil은 소수점 올림으로 처리한다는 뜻. ex) 1page = Math.ceil(0.1) * 10 = 10 10page = Math.ceil(1) * 10 = 10 11page = Math.ceil(1.1) * 10 = 20 끝번호는 전체 게시물의 갯수에 영향을 받게 되는데 게시물이 나타나는 페이지 만큼 끝번호가 나오게 해야 한다. realEnd = (int)(Math.ceil((.. 2022. 9. 13.
Springboot [페이징 처리] (rownum 쿼리 이용) [1] 페이징 처리의 2번째 방법으로는 rownum쿼리를 이용하는 방법이 있다. 1번째의 limit쿼리의 장점은 쿼리 자체가 1줄로 간결하다는 장점이 있지만 여러가지 필요한 정보를 더 담아오는데 제한적이다. limit을 사용하였을때에는 size, pageNum 두 변수만을 사용하여 frontend에서 받아 왔지만 rownum을 이용하면 ① 현재 페이지 번호 (page) ② 이전과 다음으로 이동 가능한 링크의 표시 여부 (prev, next) ③ 화면에서 보여지는 페이지의 시작 번호와 끝 번호 (startPage, endPage) 를 구하여 더 다양하게 다룰수 있게 된다. rownum은 rownum이라는 가상의 컬럼을 만들고 원하는 rownum을 추출하도록 해준다. 우선 mariadb(mysql)로 rownum을.. 2022. 9. 13.
Springboot [페이징 처리] (limit 쿼리를 이용) springboot로 검색기능을 추가하는것으로 3가지 방법을 사용해 보았다. 1. mybatis (criteria 클래스 생성 및 limit쿼리를 이용) 2. mybatis (criteria클래스 생성 및 rownum쿼리 이용) 3. jpa (pagable) 기능을 만들면서 알게 된 사실은 oracle에는 rownum이라는 문법을 사용할 수 있지만 mysql에서는 사용할 수가 없어서 알아보니 mariadb(mysql)문법을 사용하고 있었는데 oracle문법을 mapper에서 사용하면 오류가 발생한다는 것을 새롭게 알게 되었다. 하지만 2번에서 rownum을 사용하였다고 했는데 oracle에서와는 다르게 써서 쿼리를 생성하였다. 우선 1번의 mybatis로 limit 쿼리를 이용하여 페이징 처리를 해보겠다.. 2022. 9. 13.