[ 특정 영화의 모든 이미지와 평균 평점/리뷰 개수 ] public interface ReviewRepository extends JpaRepository { List findByMovie(Movie movie); } 먼저 , ReviewRepository 인터페이스에 위와 같이 정의한 뒤 Review에서 필요한 데이터를 추출한다. @Test public void testGetMovieReviews() { Movie movie = Movie.builder().mno(96L).build(); List result = reviewRepository.findByMovie(movie); result.forEach(movieReview -> { System.out.println(movieReview.getRevi..
코드로 배우는 스프링부트 웹 프로젝트
[ M:N(다대다)관계의 특징 ] 먼저, 테이블은 고정된 개수의 칼럼을 가지고 있기 때문에 M:N(다대다)의 관계를 실제 테이블로 설계할 수 없다. 예를 들어 여러 개의 상품이 있고, 여러 개의 카테고리가 있다고 생각한다. 여기서, 특정한 상품에 대해서 카테고리 정보를 추가하면 상품 하나가 '가전'인 동시에 '주방','계절 가전','신혼'과 같이 여러 개의 카테고리를 각각 칼럼에 담는다면 고정된 수의 칼럼으로는 처리할 수 없다는 문제가 생긴다. 상품번호 상품명 상품 카테고리 1 냉장고 C1,C2,C3 2 세탁기 C1,C2 3 TV C4 그림으로 표현하자면 위와 같다. 위의 그림과 같은 경우 ','를 사용해서 해당 상품이 여러 개의 카테고리에 속하는 것을 표현하고 있지만 근본적인 해결책이라고 할 수 없다...
1. @Controller(Spring MVC Controller) [ Controller - View ] 전통적인 Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용합니다. 아래와 같은 과정을 통해 Spring MVC Container는 Client의 요청으로부터 View를 반환합니다. Client는 URI 형식으로 웹 서비스에 요청을 보낸다. Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다. Controller가 요청을 처리한 후에 응답을 DispatcherServlet으로 반환하고, DispatcherServlet은 View를 사용자에게 반환한다. @Controller가 View를 반환하기 위해서는 V..
관계형 데이터베이스 설계 JPA를 이용하여 연관관계를 해석할 때는 PK를 기준으로 잡고, 데이터베이스를 모델링하는 방식으로 구성한다. 위 사진처럼 각각 member,board,reply 테이블을 생성한다. BaseEntity 클래스 Member 클래스 Board 클래스 Reply 클래스 각 테이블 생성후 각 엔티티에 맞는 Repository 인터페이스를 추가시킨다. Member 객체를 100개 추가하고, Board 객체 또한 100개 생성하여 추가한다. 여기서 한 명의 사용자가 하나의 게시물을 등록하도록 작성한다. 이후 300개의 댓글을 1~100사이의 번호로 추가한다.(board_bno 칼럼 값이 임의의 번호이다.) 이렇게 1번부터 100번까지 게시물에 대해서 n개의 댓글이 추가된다. MemberTes..
방명록의 조회/수정/삭제 처리 위와 같이 조회페이지로 들어가게 되면 수정 페이지, 목록 페이지로 갈 수 있게 설계한다. 삭제는 수정페이지에 들어간 후 처리할 수 있게한다. Service 계층 조회,삭제,수정 처리를 위한 변수 read,remove,modfiy를 인터페이스에 선언한다. 조회 gno를 Optional타입의 result로 받고 그것이 엔티티 객체라면 엔티티 객체를 DTO로 변환해서 반환한다 삭제 . 수정 방명록의 수정은 기존의 엔티티에서 '제목'과 '내용'만을 수정하고 다시 저장하는 방식으로 구현한다. Controller 계층 GET방식으로 gno 값을 받아와서 Model에 GuestbookDTO 객체를 담아서 전달한다. 다시 목록 페이지로 돌아오는 데이터를 같이 저장하기 위해 PageRequ..
GET방식과 POST방식의 차이 👉 GET 방식 : 어떠한 정보를 가져와서 조회하기 위해 사용되는 방식 ▪ URL에 변수를 포함시켜 요청한다. ▪ 데이터를 header를 포함하여 전송한다. ▪ URL에 데이터가 노출되어 보안에 취약하다. ▪ 캐싱이 가능하다. (캐싱: 한번 접근후, 똑같은 요청을 할 시 빠르게 접근하기 위해 레지스터에 데이터를 저장시키는것) 👉 POST 방식: 데이터를 서버로 제출하여 추가 또는 수정하기 위해서 데이터를 전송하는 방식 ▪ URL에 변수에 변수를 노출하지 않고 요청을 한다. ▪ 데이터를 Body에 포함시킨다. ▪ URL에 데이터가 노출되지 않아서 기본 보안이 설정되어 있다. ▪ 전송하는데 길이 제한이 없고 캐싱이 불가능하다. Spring을 공부하였을때 Get방식 즉, @Ge..
목록 처리 작업 순서 화면에서 필요한 목록 데이터에 대한 DTO 생성 DTO를 Pageable 타입으로 전환 Page를 화면에서 사용하기 쉬운 DTO의 리스트 등으로 변환 화면에 필요한 페이지 번호 처리 목록 처리를 위한 DTO 목록 처리를 위해서 PageRequestDTO와 PageResultDTO를 나누어 생성해준다. PageRequestDTO는 목록 페이지를 요청할 때 사용하는 데이터를 재사용하기 쉽게 만드는 클래스이다. 예를 들어 '페이지 번호,페이지 내 목록의 개수,검색 조건'들이 많이 사용된다. 이런 파라미터들을 DTO로 선언하고 나중에 재사용하는 용도로 사용한다. PageResultDTO는 JPA를 이용하는 Repository에서 페이지 처리 결과를 Page타입으로 반환하기 때문에 서비스 계..
실제 프로젝트를 작성할 경우 엔티티 객체를 영속 계층 바깥쪽에서 사용하는 방식 보다는 DTO(Data Transfer Object)를 이용하는 방식을 권장한다. DTO는 엔티티 객체와 달리 각 계층끼리 주고받는 우편물이나 상자의 개념이다. 순수하게 데이터를 담고 있다는 점에서 엔티티 객체와 유사하지만, 목적 자체가 데이터의 전달이므로 읽고,쓰는 것이 모두 허용되는 점이 가능하고 일회성으로 사용되는 성격이 강하다. JPA의 엔티티 객체는 단순히 데이터를 담는 객체가 아니라 실제 DB와 관련이 있고, 내부적으로 엔티티 매니저가 관리하는 객체이다. DTO의 장점 엔티티 객체의 범위를 한정 지을 수 있어 안전한 코드를 작성할 수 있다. 화면과 데이터를 분리하려는 취지에 걸맞는 방식이다. DTO의 단점 Entit..