목록프로그래밍 (408)
쌓고 쌓다
DB 테이블 변경 ALTER TABLE comment ADD COLUMN parent_comment_id int; ALTER TABLE comment ADD COLUMN is_parent int not null; 댓글과 대댓글 구별은 컬럼 is_parent로 이뤄진다. is_parent가 1이면 부모 댓글로 일반 댓글이며 0이면 대댓글로 구분한다. 부모 댓글은 자신의 id를 parent_comment_id로 가지며 대댓글은 부모 댓글의 id를 가진다. 기존의 DB 데이터들은 아래의 쿼리로 값을 갱신해주자. UPDATE comment AS A INNER JOIN comment AS B ON A.id = B.id SET A.parent_comment_id = A.id; UPDATE comment SET is..
대댓글 구현중에 대댓글 더보기 버튼을 사용자에게 제공하는 기능을 만들고 있었다. 더 가져올 데이터가 없다면 더보기 댓글을 없애고싶었다. 대댓글 더보기할때 대댓글 총 개수를 넘게된다면 더보기 기능은 없어져야한다. 그러기위해서는 대댓글 데이터를 JSON으로 받아올때 해당 댓글의 대댓글의 총 개수가 필요했다. 기존의 대댓글 데이터를 서버로부터 받아오면 페이징처리된 대댓글(Page)의 JSON이였지 내가 필요한 정보를 더 담아내지 못했다. 아래의 코드처럼 작성한다면 JSON에 추가 정보를 담아 응답을 내줄 수 있다. public Map findReply(Long parentCommentId, int page) { Sort sort=Sort.by(Sort.Order.desc("regDate"), Sort.Or..
댓글 작성 방식을 중간에 Ajax로 바꿔보느라 현재. 클라이언트에서 전송하는 데이터의 형태가 2가지가 존재했다. 일반 댓글 작성은 Ajax로 JSON 형태 데이터를 보내 처리하는 방식이고 현재 연구중인 답글은 form으로 보내는 형태이다. 이 form, JSON 두 방법이 모두 댓글 작성 가능하게 하는 방법이 궁금해서 연구해봤다. 현재 구현된 댓글 작성에는 아래와 같이 JSON 데이터를 받아 저장하는 방식이다. @PostMapping(value = "/comment/write") @ResponseBody public Comment commentWrite(@RequestBody Comment comment) { posterService.incrementCommentCnt(comment.getPno()); ..
JSP 의존성 추가 //JSP 추가 시작 implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' implementation 'jakarta.servlet:jakarta.servlet-api' //스프링부트 3.0 이상 implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api' // 스프링부트 3.0 이상 implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl' //스프링부트 3.0 이상 //JSP 추가 끝 new-form.jsp (회원 입력) username: age: 전송 JSP 문서라는 의미를 포함한 문장이다. JSP 문서는 이렇게..
댓글 작성 html 제출 입력 받는 부분은 3가지이다. 댓글 작성자, 게시글 번호, 댓글 내용 여기서 게시글 번호는 hidden 속성으로 가렸다. 입력 받는 태그와 제출을 위한 버튼에 각각 id를 설정해주자. 댓글 제출 버튼 이벤트 추가 document.getElementById("comment_submit").onclick = function () { let writer = $("#comment_writer").val(); let content = $("#comment_content").val(); let pno = $("#comment_pno").val(); let data = { writer: writer, content: content, pno: pno }; $.ajax({ type: "post"..
Member (회원 도메인) @Getter @Setter public class Member { private Long id; private String username; private int age; public Member() { } public Member(String username, int age) { this.username = username; this.age = age; } } 생성자로 이름, 나이를 받는다. 기본 생성자도 존재. id는 저장소에서 할당함. MemberRepository public class MemberRepository { private static Map store = new HashMap(); private static long sequence = 0L; privat..
SpringDataJpa에서 페이징을 쉽게 처리할 수 있다. public interface SpringDataJpaPosterRepository extends JpaRepository { Page findByTitleContaining(String title, Pageable pageable); } 검색과 관련된 코드 작성은 포스팅한적 있다. 자세한 사항은 그 게시글을 보자. 간단히 포함될 내용과 페이징 처리를 위한 파라미터를 전달하여 해당 내용이 포함되고 페이징 처리된 정보를 가져올 수 있다. 정렬시 Pageable 인터페이스를 넘겨준다. Pageable은 페이징 처리에 필요한 정보를 타입이며 실제 구현체는 PageRequest 클래스를 사용한다. PageRequest 객체 생성 방법 Pageable ..
문제의 발견 게시글 정렬의 방법으로 날짜, 댓글 개수를 구현했다. 이상하게 날짜순은 잘 정렬되어 나오는데 댓글 개수로 정렬시 게시글(레코드)의 누락과 중복이 발생했다. JPA의 Paging은 ORDER BY와 Limit를 사용한다. 문제 설명 아래의 결과를 먼저 보자. 게시글에 달린 댓글 개수인 comment_cnt를 내림차순으로 출력한다. limit를 통해 보일 레코드를 조절했다. 네모 박스친 레코드 title이 "수정제목fsfs"인 레코드가 중복되어 나타난다. 사실 MySQL의 버그인가? 생각이 들었다. 내가 버그를 찾은걸까? ㅎㅎ 결과적으로 말하면 버그가 아니다. ORDER BY에는 문제가 없다. 크기순으로 정렬되어 있지 않은가. 즉, 고유한 순서를 보장해주지 않지만 정렬은 보장해줬다. 그럼 LIM..