일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 자료구조와 함께 배우는 알고리즘 입문
- 자료구조와함께배우는알고리즘입문
- 처음 만나는 AI 수학 with Python
- Kernighan의 C언어 프로그래밍
- 스프링부트핵심가이드
- 구멍가게코딩단
- network configuration
- 리눅스
- iterator
- 자바편
- 데비안
- 처음 만나는 AI수학 with Python
- 알파회계
- 목록처리
- baeldung
- /etc/network/interfaces
- d
- 코드로배우는스프링부트웹프로젝트
- 페이징
- 티스토리 쿠키 삭제
- ㅒ
- 친절한SQL튜닝
- 이터레이터
- 서버설정
- 네트워크 설정
- GIT
- 선형대수
- resttemplate
- 코드로배우는스프링웹프로젝트
- 스프링 시큐리티
- Today
- Total
목록Framework/Spring (57)
bright jazz music
FK를 이용해서 @ManyToOne과 같은 연관관계를 작성한 경우 가장 어려운 작업은 JPQL을 구성하는 것이다. 하나의 엔티티 타입만으로 사용하는 경우 JPQL을 사용하여 동적 쿼리를 만드는 게 간편했다. 그러나 여러 엔티티 타입을 JPQL로 직접 처리하는 과정 자체가 기존과 달라지고 더욱 복잡해 진다 흔히 Tuple이라고 부르는 Object[ ] 타입으로 나오기 때문이다. 그러나 이 방식은 어떤 상황에서도 사용할 수 있는 가장 강력한 JPQL을 구성하는 방식이기도 하다. 1. 프로젝트의 변경 (build.gradle에 Querydsl 설정 추가) bootBoard 프로젝트의 경우 지금까지는 Querydsl 설정이 없는 상태에서 작성되었다. 따라서 build.gradle에 Querydsl 설정을 추가해..
게시물 수정은 /board/modify 경로를 통해 접근하는 페이지에서 이루어진다. 게시물 조회 페이지에서 수정을 누르고 수정 후 저장 또는 삭제를 수행한다. 1. BoardController 코드 수정 //BoardController.java package com.example.bootboard.controller; import com.example.bootboard.dto.BoardDTO; import com.example.bootboard.dto.PageRequestDTO; import com.example.bootboard.service.BoardService; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.e..
1. BoardController에 조회를 위한 코드 추가 //BoardController.java package com.example.bootboard.controller; @Controller @RequestMapping("/board/") @Log4j2 @RequiredArgsConstructor public class BoardController { private final BoardService boardService; ... //조회 @GetMapping("/read") public void read(@ModelAttribute("requestDTO") PageRequestDTO pageRequestDTO, Long bno, Model model) { log.info("bno: " + bno)..
게시물 등록 처리 1. BoardController에 등록을 위한 코드 추가 //BoardController.java @Controller @RequestMapping("/board/") @Log4j2 @RequiredArgsConstructor public class BoardController { private final BoardService boardService; ... //등록(get) : 등록을 위한 페이지 반환 @GetMapping("/register") public void register(){ log.info("register get..."); } //등록(post) : 등록을 위한 페이지에 입력된 값을 BoardDTO로 받아서 처리 @PostMapping("/register") pub..
컨트롤러와 화면처리 서비스 계층 까지의 구현이 끝났다. 이제부터는 컨트롤러와 화면을 처리한다. 원래는 컨트롤러부터 작성하려고 했지만 그 전에, 화면에 필요한 정적 리소스들과 페이지들을 추가해야 한다. 이전 장에서 사용한 소스들을 그대로 붙여 넣는다. 1. 정적 리소스 추가하기 아래를 보면 static 폴더와 templates 폴더가 비어있다. static 폴더의 경우, guestbook 프로젝트의 static 폴더 내의 파일들을 그대로 붙여 넣어 준다. templates는 guestbook 프로젝트의 templates 내부의 layout 폴더만 붙여 넣어준다. templates에는 추가로 board 폴더를 생성해준다. 이전 프로젝트의 정적 소스들 https://github.com/hojuncha997/g..
게시물 수정은 필요한 부분만 변경하고 BoardRepository.java의 save()를 이용해서 처리한다. 게시물의 수정은 제목(title)과 내용(content)에 한해서 수정이 가능하도록 설정한다. 수정을 위해서 Board클래스에 수정에 필요한 메서드를 추가한다. 1. 수정을 위한 Board 클래스 변경 Board.java //Board.java package com.example.bootboard.entity; import lombok.*; import javax.persistence.*; @Entity @Builder @AllArgsConstructor @NoArgsConstructor @Getter @ToString(exclude = "writer") public class Board ext..
삭제에 대한 고민 실제 개발에서는 삭제 처리에 대한 고민 필요 댓글이 있는 게시글은 게시물이 삭제될 시 거기에 달린 댓글까지 동의 없이 삭제되기 때문. 따라서 실무에서는 게시물에 상태(state) 칼럼을 지정하고 이를 변경하는 형태로 처리하는 것이 일반적 예를 들면 삭제 처리 시 실제로 삭제되는 것이 아닌 게시글의 상태가 "삭제"로 처리 된다고 할 수 있음. 여기 예제에서는 게시글 삭제 시 게시글과 댓글 모두 삭제된다고 가정한다. board 테이블에서 데이터 삭제 시 FK로 board 테이블을 참조하는 reply 테이블에서도 삭제가 일어나야 한다. 순서1 : 해당 게시물의 모든 댓글 삭제 순서 2: 해당 게시물 삭제 이것은 개별 과정이지만 하나의 과정으로 처리되어야 하므로 @Transaction을 사용해..
1. 게시물 목록 처리: PageRequestDTO와 PageResultDTO 추가 목록을 처리하기 위해 PageRequestDTO와 PageResultDTO 추가 PageRequestDTO.java //PageRequestDTO.java package com.example.bootboard.dto; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; //페이지 관련 임포트 import org.springframework.data.domain..
기존 프로젝트 내용을 참고해서 브라우저에서 확인할 수 있는 코드 작성 1. DTO 계층과 서비스 계층 작성 //BoardDTO.java package com.example.bootboard.dto; import lombok.*; import java.time.LocalDateTime; @Data//getter and setter 생성 @ToString//toString 메서드 생성 @Builder//Builder 클래스를 롬복이 만들어줌 @AllArgsConstructor//모든 필드를 파라미터로 갖는 생성자를 만든다 @NoArgsConstructor//파라미터가 없는 생성자를 만든다. public class BoardDTO { private Long bno; private String title; pr..
조회 화면에서는 Board와 Member를 주로 이용한다. 해당 게시물이 몇 개의 댓글이 있는지 알려주는 수준까지 작성한다. 실제 댓글은 화면에서 주로 AJAX를 이용해 필요한 순간에 동적으로 데이터를 가져온느 방식이 일반적이다. 조회 화면을 위해 작성할 JPQL은 아래와 같다. 1. BoardRepository 인터페이스에 JPQL 코드 추가 // BoardRepository.java public interface BoardRepository extends JpaRepository { ... @Query("SELECT b, w, count(r) " + " FROM Board b LEFT JOIN b.writer w " + " LEFT OUTER JOIN Reply r ON r.board = b " + ..