전체 글

전체 글

    [Data JPA] EP 2. 쿼리 메소드 기능

    목차 (클릭시 해당 목차로 이동) 메소드 이름으로 쿼리 생성 Data JPA에서 공통적으로 제공하는 메소드 이외에도 필요한 메소드가 있을 수 있습니다. 예를들어 "어떤 이름을 가진 회원중 나이가 15 이상인 회원을 구해라" 같은 쿼리는 엔티티에 의존한 쿼리입니다. 이럴 때도 Data JPA를 이용할 수 있습니다. 메소드 이름으로 쿼리를 생성할 수 있습니다. 이렇게 MemberRepository 인터페이스에서 해당 쿼리 이름으로 메소드를 선언만 해도 동작합니다. 하지만 이 방법을 사용하려면 Data JPA에서 정하는 메소드 이름 프로퍼티를 정확하게 맞추어 사용해야합니다. Spring Data JPA에서 메소드 이름에 대한 규칙은 공식문서에서 확인이 가능합니다. https://docs.spring.io/sp..

    [Data JPA] EP 1. 공통 인터페이스 기능

    공통 인터페이스 설정 Data JPA를 사용하는 방법 Repository를 interface로 만듭니다. JpaRepository를 상속받는데 이때 을 넣어주시면 됩니다. package study.datajpa.repository; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.sprin..

    [ClassFlix] EP 14. 리팩토링과 성능최적화 - 3

    리뷰수정기능개발 ✓ 리뷰삭제기능개발 ✓ 회원가입창에서 footer 크기조정 ✓ 리뷰등록 디자인 (입력부분가로로나열, 등록버튼 모양) ✓ 사진등록기능 ✓ 리팩토링 ✓ 디자인다듬기 느낀점, 발전할점, 추가할점 정리하기 이슈 리팩토링 하기전에 어플리케이션을 한번 복잡하게 돌려보았습니다. 리뷰관련 2가지 이슈가 발생했습니다. 리뷰의 개수가 많아지면 리뷰삭제가 작동하지 않는다. 리뷰의 개수가 많아지면 리뷰수정,삭제시 강의에 별점반영이 안된다. 리뷰삭제 이슈 해결 리뷰삭제 작동문제는 JQuery에서 form 객체를 못읽는 문제가 있어서 Javascript의 getElementById로 폼객체를 가져와 submit하도록 수정했더니 정상동작했습니다. 리뷰 수정, 삭제시 별점반영 안되는 이슈 해결 성능문제를 위해 강의의..

    [Spring] [IntelliJ] 정적리소스 서버 재시작없이 바로 반영하기

    스프링으로 이미지 업로드와 출력 기능을 구현하면서 업로드 한 파일을 바로 출력할때 반영이 안되는 상황이 있었습니다. 이미지를 업로드하자마자 바로 반영은 안되지만 인텔리제이를 한번 눌러서 저절로 폴더를 새로고침하고 그 다음 브라우저를 새로고침하면 이미지가 반영되게 만들었습니다. 1. devtools dependency 추가 dependencies { ...생략... developmentOnly("org.springframework.boot:spring-boot-devtools") } 2. application.yml 추가 devtools에 livereload.enabled -> true restart.enabled -> true thymeleaf.cache -> false (저는 타임리프를 사용중이어서 그..

    [Java] File to MultipartFile (import 포함)

    다크모드로 보시는걸 추천드립니다. 스프링에서 파일업로드를 구현할때 테스트 코드를 작성하려면 File을 읽어와서 MultiPartFile로 변환해주어야 합니다. 변환하는 코드는 인터넷에 많지만 어떤것을 import하는지 아무리 찾아봐도 나오지 않아서 제가 직접 찾아가며 구현했습니다. File 을 MultiparFile로 변환하는 코드를 사용하기 위해서는 2가지가 만족되어야 합니다. (gradle(혹은 maven) fileupload, io) dependency 추가 제대로된 (FileItem, DiskFileItem, IOUtils) import gradle dependency 추가하기 맨 아래 두개를 꼭 추가해주어야 합니다. 그래야 import가 잘 동작합니다. dependencies { implemen..

    [ClassFlix] EP 13. 리팩토링과 성능최적화 - 2 (사진업로드, 출력)

    목차 (클릭시 해당 목차로 이동) 리뷰수정기능개발 ✓ 리뷰삭제기능개발 ✓ 회원가입창에서 footer 크기조정 ✓ 리뷰등록 디자인 (입력부분가로로나열, 등록버튼 모양) ✓ 사진등록기능 리팩토링 (쿼리나가는 개수 계산해서 성능 최적화하기) 디자인다듬기 느낀점, 발전할점, 추가할점 정리하기 사진등록기능 기존에는 데이터베이스에 이미지파일을 직접 넣는 식으로 구현했습니다. 그러나 이 방식은 비효율적이고 병목현상을 일으킵니다. 그래서 이미지는 서버의 특정 위치에 저장하고 그 이미지에 대한 정보를 DB에 저장하는 식으로 구현하려 합니다. 파일업로드는 스프링에서 제공하는 MultipartFile 이라는 인터페이스를 이용해서, HTTP multipart 요청을 처리합니다. MultipartFile는 큰 파일을 청크 단위..

    [ClassFlix] EP 12. 리팩토링과 성능최적화 - 1

    목차 (클릭시 해당 목차로 이동) 2021.05.10 - [Project/ClassFlix] - [Class Flix] EP 9. 중간점검 : 앞으로의 계획 [Class Flix] EP 9. 중간점검 : 앞으로의 계획 목차 (클릭시 해당 목차로 이동) 앞으로 해야할 것 우선순위로 나열하기 리뷰수정기능개발 리뷰삭제기능개발 회원가입창에서 footer 크기조정 리뷰등록 디자인 (입력부분가로로나열, 등록버튼 ksabs.tistory.com 중간점검에서 앞으로의 계획중에서 어디까지 했는지 체크해보겠습니다. 앞으로 해야할 것 우선순위로 나열하기 리뷰수정기능개발 ✓ 리뷰삭제기능개발 ✓ 회원가입창에서 footer 크기조정 리뷰등록 디자인 (입력부분가로로나열, 등록버튼 모양) 사진등록기능 리팩토링 (쿼리나가는 개수 계산..

    [ClassFlix] EP 11. view 페이지 제작과 컨트롤러 연결 - 6 : 리뷰 삭제 구현

    목차 (클릭시 해당 목차로 이동) 구현계획 view에서 삭제버튼을 누를시 해당 리뷰의 id, 강의의 id를 컨트롤러에 넘깁니다. 컨트롤러에서 reviewService.delete에 리뷰의 id, 강의의 id 를 넘깁니다. lectureService에 리뷰의 id, 강의의 id 넘깁니다. 강의 id로 해당 강의를 찾고 그 강의에 리뷰의 id 를 넘겨서 해당 id를 갖고있는 review를 제거합니다. reviewRepository에 리뷰의 id 를 넘겨서 엔티티를 찾고 EntityManager를 통해 해당 리뷰엔티티를 제거합니다. 실제 구현 view lecture.html url : /lectgures/{lectureId}/removeReview/{reviewId} method : post pathVaria..

    [ClassFlix] EP 10. view 페이지 제작과 컨트롤러 연결 - 5 : 리뷰 수정 구현

    목차 (클릭시 해당 목차로 이동) 프로젝트를 진행하면서 프론트부분은 최대한 템플릿을 이용해서 공부의 비중을 줄이려고 했습니다. 리뷰수정 부분을 페이지 이동없이 만드려고 했는데, ajax없이는 만드는 것이 어렵다고 판단되어서 ajax를 공부한 뒤 도입했습니다. 현재상황 현재 구현된 리뷰 시스템은 아래와 같습니다. 수정버튼, 삭제버튼 모두 비밀번호 검증을 합니다. 처음 리뷰 작성시 입력했던 비밀번호를 알맞게 입력하면 해당 기능이 동작합니다. 그런데, 삭제 후 비밀번호를 맞게 입력하면 댓글 하나를 삭제하면 되지만, 수정을 누를 시 현재 화면이 바뀌지 않고 현재 리뷰 글이 수정모드로 바뀌게 구현하고 싶었습니다. 구현계획 1 제가 생각한 기능을 구현하기 위해서 두가지 방법이 있었습니다. 다른 페이지에 동일한 데이..

    [ClassFlix] EP 9. 중간점검 : 앞으로의 계획

    목차 (클릭시 해당 목차로 이동) 앞으로 해야할 것 우선순위로 나열하기 리뷰수정기능개발 리뷰삭제기능개발 회원가입창에서 footer 크기조정 리뷰등록 디자인 (입력부분가로로나열, 등록버튼 모양) 사진등록기능 리팩토링 (쿼리나가는 개수 계산해서 성능 최적화하기) 디자인다듬기 느낀점, 발전할점, 추가할점 정리하기 리뷰수정기능 개발계획 비밀번호 입력창을 팝업으로 띄우기 - 비밀번호 맞는경우 -> 수정창으로 이동 - 비밀번호 틀린경우 -> 비밀번호가 틀렸습니다 알림 리뷰수정창에서 별점, 후기내용 수정가능 사진등록기능 개발계획 이미지를 데이터베이스에 저장하지 않고 로컬에 저장한다. 이미지 변수에는 이미지의 주소를 저장한다.