전체 글

방명록의 조회/수정/삭제 처리 위와 같이 조회페이지로 들어가게 되면 수정 페이지, 목록 페이지로 갈 수 있게 설계한다. 삭제는 수정페이지에 들어간 후 처리할 수 있게한다. 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..
JPA의 쿼리 메서드와 @Query를 통해 많은 기능을 구현할 수는 있으나 선언할 때 고정된 형태의 값을 가진다는 단점이 있다. 이 때문에 단순한 몇 가지의 검색 조건을 만들어야 하는 상황에서는 기본 기능만으로 충분하지만, 복잡한 조합을 이용하는 경우의 수가 많은 상황에서는 동적으로 쿼리를 생성해서 처리할 수 있는 기능이 필요하다. 이럴때 Querydsl을 이용하면 복잡한 검색조건이나 조인,서브 쿼리 등의 기능도 구현이 가능하다. SQL, JPQL의 문제점 문자열이며 Type-check가 불가능 하다. 잘 해봐야 어플리케이션 로딩 시점에 알 수 있고 컴파일 시점에 알 수 있는 방법이 없다.(자바와 문자열의 한계) 해당 로직 실행 전까지 작동여부 확인을 할 수 없다. 해당 쿼리 실행 시점에 오류를 발견한다..
엔티티와 관련된 작업을 하다 보면, 데이터의 등록 시간과 수정 시간과 같이 자동으로 추가되고 변경되어야 하는 칼럼들이 있다. 이를 자동으로 처리할 수 있도록 어노테이션을 이용하여 설정한다. 이를 적용하기 위한 예로 프로젝트내에 entity 패키지를 생성 후, 엔티티 객체의 등록 시간과 최종 수정 시간을 담당하게 될 BaseEntity 클래스를 추상클래스로 작성한다. 1. entity패키지 생성 후, 자동 엔티티 객체를 정의하는 추상클래스 작성 @MappedSuperclass : 해당 어노테이션이 적용된 클래스는 테이블로 생성되지 않는다. 따라서 실제 테이블은 BaseEntity클래스를 상속한 엔티티의 클래스로 DB 테이블이 생성된다. @CreatedDate : JPA에서 엔티티의 생성 시간을 처리 @La..
Thymeleaf(타임리프): 흔히 View Template이라고 부른다. 뷰 템플릿은 컨트롤러가 전달하는 데이터를 이용하여 동적으로 화면을 구성할 수 있게 해준다. 스프링 부트는 설정을 통해서 JSP 등을 사용할 수도 있지만 기본적으로 JSP 대신에 Thymeleaf나 FreeMarker, Mustache 등을 이용해서 화면을 처리한다. Thymeleaf를 이용하는 이유는 다음과 같다. JSP와 유사하게 ${}을 별도의 처리 없이 이용할 수 있다. Model에 담긴 객체를 화면에서 JavaScript로 처리하기 편하다. 연산이나 포맷과 관련된 기능을 추가적인 개발 없이 지원한다. 개발 도구를 이용할 때 .html파일로 생성하는데 문제가 없고 별도의 확장자를 이용하지 않는다. 사용법) 예제를 위해 dto..
MVC(Model - View - Controller)패턴 MVC패턴은 디자인패턴( 프로그램이나 어떤 특정한 것을 개발하는 중에 발생했던 문제점들을 정리해서 상황에 따라 간편하게 적용해서 쓸 수 있는 것을 정리하여 특정한 "규약"을 통해 쉽게 쓸 수 있는 형태로 만든 것 )중 하나이다. 사용자가 controller를 조작하면 controller는 model을 통해서 데이터를 가져오고 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자에게 전달하게 된다. 위는 하나의 로직을 설명하기 위해 만든 그림이고 사실 MVC 패턴의 구조는 이 그림이 더 어울린다. Controller가 view에도 영향을 미치는(화살표를 보자) 부분이 있어야 한다. 위 그림과 같이 모델은 데이터(변수,쿼리등)을 가..
HDev
기억이 아닌 기록과 반복