일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 구멍가게코딩단
- resttemplate
- 리눅스
- 자료구조와함께배우는알고리즘입문
- ㅒ
- 알파회계
- d
- 자료구조와 함께 배우는 알고리즘 입문
- network configuration
- 코드로배우는스프링부트웹프로젝트
- 코드로배우는스프링웹프로젝트
- 스프링 시큐리티
- 데비안
- 티스토리 쿠키 삭제
- GIT
- baeldung
- 처음 만나는 AI 수학 with Python
- Kernighan의 C언어 프로그래밍
- 이터레이터
- 스프링부트핵심가이드
- /etc/network/interfaces
- 서버설정
- 처음 만나는 AI수학 with Python
- 자바편
- 네트워크 설정
- 친절한SQL튜닝
- 목록처리
- iterator
- 페이징
- 선형대수
- Today
- Total
목록Framework (105)
bright jazz music
기존 프로젝트 내용을 참고해서 브라우저에서 확인할 수 있는 코드 작성 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 " + ..
https://github.com/hojuncha997/bootBoard GitHub - hojuncha997/bootBoard: 코드로 배우는 스프링부트 웹 프로젝트 ch.5 코드로 배우는 스프링부트 웹 프로젝트 ch.5. Contribute to hojuncha997/bootBoard development by creating an account on GitHub. github.com 목록화면에 필요한 데이터 게시물(Board): 게시물 번호, 게시물 작성 시간 회원(Member): 회원 이름/이메일 댓글(Reply): 해당 게시물의 댓글 수 위 3개 엔티티 가운데 가장 많은 데이터를 가져오는 것이 Board이다. 따라서 Board를 중심으로 조인 관계를 형성한다. 조인 후에는 Board를 기준으로 ..
연관관계가 없는 엔티티 조인 처리에는 'ON'을 사용해 줘야 한다. Board와 Member 사이에는 내부적으로 참조를 통해서 연관관계가 있었다. //Board.java ... @ManyToOne(fetch = FetchType.LAZY) //명시적으로 Lazy Loading 지정 private Member writer; //FK 연관관계 지정 //Reply.java ... @ManyToOne private Board board; Board와 Reply는 이러한 관계가 아니다. //Reply.java ... @ManyToOne private Board board; Reply 쪽이@ManyToOne으로 참조하고 Board를 참조하고 있지만 Board에서는 Reply 객체를 참조하고 있지 않다. 이러한 경우..
하나의 엔티티 타입을 이용하여 목록 화면에서 게시글의 정보와 함께 댓글의 수를 함께 가져올 수는 없다. 이에 대한 해결책으로는 보편적으로 쓰이는 방법은 JPQL의 join을 이용하는 것이다. 1. left (outer) join 스프링 부트 2버전 이후 포함되는 JPA(Java Persistence API) 버전은 엔티티 클래스 내에 전혀 연관관계가 없어도 join을 사용할 수 있다. LEFT OUTER JOIN 혹은 LEFT JOIN 을 사용할 수 있다. 조인 시 INNER JOIN 혹은 JOIN 과 같이 일반적인 조인 역시 사용할 수 있다. 엔티티 클래스 내부에 연관관계가 있는 경우 Board 엔티티 클래스의 경우 내부에 Member 엔티티 클래스를 변수로 가짐으로서 연관관계를 맺고 있다. //Boa..
이 포스팅에서는 Lazy Loading의 효과를 알아본다. 1. Board.java를 수정하여 Lazy Loading을 설정 우선 Board 클래스를 아래와 같이 수정한다. //Board.java package com.example.bootboard.entity; import lombok.*; import javax.persistence.*; @Entity @Builder @AllArgsConstructor @NoArgsConstructor @Getter @ToString(exclude = "writer") //이렇게 해준 이유는 아래에서 설명함 public class Board extends BaseEntity{ @Id @GeneratedValue(strategy = GenerationType.IDEN..
두 개 이상의 엔티티 간의 연관 관계를 맺고 나면, 엔티티 클래스들이 실제 DB 상에서는 두 개 혹은 두 개 이상의 테이블로 생성된다. 따라서 연관관계를 맺고 있다는 것은 DB의 입장에서는 조인이 필요하다는 뜻이 된다. 실제로 @ManyToOne의 경우 FK 쪽의 엔티티를 가져올 때 PK 쪽의 엔티티도 함께 가져온다. 1. BoardRepositoryTests를 통해 Member를 @ManyToOne으로 참조하고 있는 Board를 조회하는 테스트 코드 작성 //BoardRepositoryTests.java package com.example.bootboard.repository; import com.example.bootboard.entity.Board; import com.example.bootboar..
연관관계 테스트 현재 3개의 테이블이 PK와 FK의 관계로 이루어져 있다. 따라서 테스트를 위한 데이터를 추가하는 작업도 PK 쪽에서부터 시작하는 것이 좋다. 테스트를 위해 프로젝트 내 test 폴더에 repository 폴더를 생성한다. 그 안에 각 엔티티 클래스를 다루는 아래의 클래스를 생성한다. MemberRepositoryTests, BoardRepositoryTests, ReplyRepositoryTests 테스트 데이터 추가하기 MemberRepositoryTests.java MemberRepository를 주입하고 예제로 사용할 Member객체를 100개 추가한다. package com.example.bootboard.repository; import com.example.bootboard...
진행 중 SecurityConfig.java //SecurityConfig.java package com.example.common; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.WebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org..
http.logout() : 로그아웃 기능 작동 logoutUrl("/logout") : 로그아웃 처리 되는 URL 입력 logoutSuccessUrl("/login") : 로그아웃 성공 후 이동할 페이지. 예문에서는 로그아웃 후 /login으로 이동한다. deleteCookies("JSESSIONID", "remember-me") : 로그아웃 후 쿠키 삭제, remember-me는 로그아웃 후에도 로그인 없이 접근 가능하도록 하는 쿠키 addLogoutHandler(logoutHandler()) : 로그아웃 됐을 떄 스프링 시큐리티가 기본적으로 제공하는 로그아웃 구현체가 있다. 그 구현체에서 실제로 세션을 무효화하고 인증 토큰을 삭제하는 등의 처리를 한다. 그러한 기본적인 처리 외에 추가적인 처리를 하..