본문 바로가기

JPA13

JPA(Jpql)로 pagination 기능 만들기 학교에서 취업 관련 정보나 진학 관련 정보를 얻기 어려워 하는 학생들이 많이 보여서 개발하고 있는 MOU기업 / 대학 전형 형 등의 정보를 알아볼 수 있는 웹사이트를 만들고 있다. 대학 전형 자료 같은 경우에는 한 테이블에 들어가는 컬럼도 많고 자료도 평소에 만지는 양보다 훨씬 많다. 그래서 어떻게 하면 효율성 좋게 구현할 수 있을까 고민하다가 DB에서 불러오는 데이터를 줄이면 페이지 로딩 시간도 줄고 좋을 것 같아서 구현하려 한다. 상세 기능으로는 검색어를 기준으로 자료를 찾고, 그 데이터를 페이징하여 웹 브라우저에 보내주면 된다. 사용자가 다음 페이지를 눌렀을 때, 재검색하여 2페이지 자료를 검색하는 방식으로 구현하려 한다. 먼저 컬럼은 이러하다. private String baseYear; // 기.. 2023. 9. 1.
YSit [17] - ID값을 숫자가 아닌 UUID로 바꿔주기 기존에는 @GeneratedValue 어노테이션을 ID값에 달아줘서 DB에 auto_increment 설정을 해줘서 Long값으로 설정을 해주었다. 하지만 최근에는 UUID를 이용하는 것이 유행한다고 해서 바꿔주기로 했다. 먼저 Id의 데이터 타입을 String으로 받아준다. 그 후에 Builder에서 설정하는 ID값이 없다면 UUID를 담고 있게 했다. UUID는 JAVA에서 UUID를 생성해주는 라이브러리를 이용해 전달한다. 그래서 UUID.randomUUID()를 호출한 후 String값으로 캐스팅해주면 된다. @Builder public User (String id, String name, String loginId, String loginPw, SchoolCategory schoolCategor.. 2023. 1. 12.
YSit [16] - Controller에서 Json 데이터 전송 & MockMvc 이용하여 Controller Test 우리 프로젝트는 프론트엔드에서 HTML이 아닌 리액트를 사용하기 때문에 데이터를 Json 형식으로 보내주어야 한다. 그래서 Controller에서 Json을 보내고, 테스트를 했다. [ Controller에서 Json 보내기 ] 먼저 Http 통신을 할 때엔 클라이언트에서 Request를 보내면 요청에 따라 서버에서 Response를 보내는 형식이다. 그래서 우리는 데이터를 Response에 담아서 보내주어야 한다. 그래서 메서드 반환 타입을 ResponseEntity로 바꿔준다. ResponseEntity는 Response를 보낼 때, 바디에 담긴 Entity를 Json으로 자동 변환해주는 함수이다. ResponseEntity에는 HttpStatus와 body( 전달 값 ) 만 파라미터로 해서 반환하면.. 2023. 1. 12.
YSit [14] - 관리자 페이지 구현 & 권한 구현하기 관리자 권한 처리에 대해 한 가지 고민이 있었다. 3가지 선택지가 있었는데, 첫번째로 한 페이지에서 관리자인지 유저인지 판단하도록 코드를 짜는 것이었고, 두번째는 똑같은 페이지를 두 개로 만들어서 각각 유저, 어드민 페이지를 만드는 것이었다. 세번째는 따로 관리자 프로그램을 만드는 것이었다. 처음 기획하고 설계할 땐 1안을 할 생각으로 설계를 했었는데, 이게 지금 와서 조금 생각을 해보니 웹에서도 관리자인지 유저인지 판단해야하고, 컨트롤러쪽에서도 판단을 해야하는데 이게 좀 구현에 어려움이 있었다. 오히려 코드 중복이 많아지는 2안보다 코드가 더 번잡해질 것 같아서 포기했다. 그래서 2안과 3안 중에서 조금 고민을 했었는데, 3안은 프로그램을 다운 받아서 관리를 해야하는데, 만약 학생에게 파일이 들어갈 수.. 2022. 12. 31.
YSit [13] - 댓글 기능 구현하기 댓글 테이블 구성에 조금 문제가 있어서 수정했다. 댓글은 기본적으로 자식이 하나만 있는게 아니라 무한적으로 생성이 가능하기 때문에 이를 생각하여 설계를 해야한다. 댓글 테이블의 게시물ID, 작성자(유저)ID, 부모ID, 내용 컬럼은 유지하고, ref(group), step(level), refOrder를 새로 추가해주었다. 이론적으로 설명을 해보자면 ref 컬럼은 부모가 없는 댓글을 기준으로 그룹화를 시켜서 댓글 리스트를 출력할 때 다른 댓글이 있더라도 부모 댓글 밑에 출력이 되도록 한다. step 컬럼은 쉽게 말해 그룹 내에서 단계를 나누는 컬럼이다. 댓글 그룹 안에서도 순서를 나누어야 하기 때문에 그룹 내의 그룹 느낌이다. 마지막 refOrder 컬럼은 단순히 그룹 내의 순서를 표시하는 컬럼이다. [.. 2022. 12. 30.
YSit [11] - 게시물 작성 / 목록 기능 구현 유저 기능은 어느정도 구현이 끝났으므로 게시판 기능을 구현을 시작했다. 먼저 게시판 카테고리가 테이블로 만드는 것보다 Enum타입으로 구현하는게 더 편해보이고, 추가적으로 카테고리를 생성할 수 있어서 테이블이 아닌 Enum타입으로 바꿨다. [ 게시물Repsitory 생성 ] @Repository와 @RequiredArgsConstructor 어노테이션을 선언해준다. ( 자세한 설명은 이전 글들 참고 ) 엔티티 저장을 위해 엔티티를 파라미터로 받고 엔티티매니저가 persist해주는 메서드를 만들어준다. 그리고 전체 리스트 구하는 메서드, 게시물Id 기준으로 게시물 하나 구하기, 제목 기준, 내용 기준으로 검색하기 메서드를 만들어준다. 제목 기준, 내용 기준으로 검색은 유사한 형태로 검색해도 게시물이 나와야.. 2022. 12. 28.