월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결실전! 스프링 데이터 JPA
application.yml에서 format_sql 적용이 안됩니다.
안녕하세요! 강의 수강 중 궁금한 부분이 있어 질문 남깁니다.테스트 코드 실행 시 콘솔 창의 쿼리가 여러 줄로 format된 형태가 아닌 한 줄로 나옵니다.application.yml 에서 hibernate.format_sql: true를 추가했는데도 적용이 안 되는데 이유를 잘 모르겠습니다.
- 미해결실전! 스프링 데이터 JPA
스프링 데이터 JPA의 구현체 질문
안녕하세요 김영환 강사님 항상 잘 듣고 있습니다. 다름이 아니라 스프링 데이터 JPA의 구현체 분석 파트 중 질문 사항이 있습니다.페이징에 대해서 처리할 때 마지막 파라미터로 Pageable 를 넘기게 되면 해당 정보로 자동으로 페이징 처리를 하게 된다고 알고 있습니다.어떻게 이게 가능한 것입니까? 이를 구현한 구현체를 찾아보려 하지만 찾지 못해 질문드립니다.!
- 미해결실전! 스프링 데이터 JPA
entity수정
//@NoArgsConstructor(access = AccessLevel.PROTECTED)setter사용은 신중하게 선택하라고 하셨는데,Service에서 수정을 하려고 하때, setter사용안하고 생성자로 수정을 하려고 했지만 안되었습니다.service에서 entity 수정시에는 무조건 setter 수정해야한가요??
- 미해결실전! 스프링 데이터 JPA
스프링 3.0 에러
실전! 스프링 데이터 JPA 강의를 수강도중에 강의 자료에 스프링 3.0에 관해 이야기 적혀있어서 한번 도전해볼 생각으로 프로젝트 파일을 만들어 실습을 따라 하는 도중 프로젝트 환경설정 하는부분에서 에러나서 질문을 올리게 되었습니다.현재 스프링 버젼에서 최신버젼인 2.7.9 로 하면 에러없이 잘 동작하는 반면 3.0.1 로 실행하면 README.md 에 로그를 올려둔 것처럼 에러가 발생하여 동작하지 않습니다.java 버젼 17 확인,패키지 이름들도 javax -> jakrata 로 변경,h2 database 2.1.214 버젼 확인hibernate 버젼 6 이상 확인검색해보니 이렇게 확인하라고 하는거 말고는 다른 방법을 알려주는게 없었습니다.이것저것 시도하는 도중 Member의 Id에 (strategy = GenerationType.IDENTITY) 를 추가하면 에러 없이 동작하게 되는데 무슨 이유인지 알 수 있을까요?https://github.com/JJuuuunn/Inflearn_Data_JPA/tree/Sping_Version_3.0
- 해결됨실전! 스프링 데이터 JPA
Dto로 매핑을 하는데 오류가 생깁니다.
안녕하세요 강의 잘보고 있습니다.혼자 공부하면서 이것저것 해보고 있습니다.다름이 아니라 DB로부터 DTO로 바로 조회를 하고 싶은데 막상 쿼리를 실행하면 적절한 생성자가 존재하지 않는다고 나옵니다.해당 Dto에 롬복을 이용해서 생성자 어노테이션을 붙여보기도 하고 직접 생성해서 코드를 실행 시켜보기도 하였으나 제대로 동작하지 않습니다. 혹시 한번만 봐주실수 있나요? 환경은 다음과 같습니다.자바 : 17스프링부트 : 3.0.2DB : 마리아DB 파일링크https://drive.google.com/file/d/1mJ4S-I938BXV7dtyono_uZfSXQxKtE8Q/view?usp=share_link
- 미해결실전! 스프링 데이터 JPA
스프링 부트 버전에 대한 질문입니다.
학습을 하면서 개인 프로젝트를 진행하려 프로젝트를 생성하였습니다.다음 코드는 프로젝트 설정입니다.plugins { id 'java' id 'org.springframework.boot' version '3.0.3' id 'io.spring.dependency-management' version '1.1.0' } group = 'project' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' // Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta' annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" // // 쿼리 파라미터 로그 // implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8' } tasks.named('test') { useJUnitPlatform() } clean { delete file('src/main/generated') } spring: datasource: url: jdbc:h2:tcp://localhost/~/healthcommunity username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: # show_sql: true format_sql: true logging.level: org.hibernate.SQL: debug # org.hibernate.type: trace다음은 애플리케이션 코드입니다. package project.healthcommunity; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class HealthCommunityApplication { public static void main(String[] args) { SpringApplication.run(HealthCommunityApplication.class, args); } } package project.healthcommunity.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String hello(){ return "hello"; } } 위와같이 스프링 빈에 정상 등록되는지 테스트 해보았습니다. 8080포트로 접속하면 정상적으로 오류 페이지가 떴습니다. 하지만 8080/hello로 접속해도 404오류가 발생하였습니다. 한참을 구글링 했지만 해답을 찾지 못했습니다. 그러다 스프링 부트의 버전을 3.0.3에서 3.00으로 바꾸어 보았더니 스프링 빈에 정상적으로 등록되어 조회되는것을 볼수 있었습니다. plugins { id 'java' id 'org.springframework.boot' version '3.0.0' id 'io.spring.dependency-management' version '1.1.0' } group = 'project' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' // Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta' annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" // // 쿼리 파라미터 로그 // implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8' } tasks.named('test') { useJUnitPlatform() } clean { delete file('src/main/generated') } 단순히 build.gradle에서 스프링 부트의 버전을 바꾸어주었는데 정상 작동하였습니다. 3.03에서는 컴포넌트 스캔이 정상적으로 작동하려면 어떻게 해야하는지 궁금합니다! 3.03에서는 설정이 변경된 것인가요?
- 해결됨실전! 스프링 데이터 JPA
테스트 코드 오류가 뜹니다...
강의를 보면서 혼자 정말 여러 번 코드를 고쳐봤지만 도저히 원인을 알 수가 없어서 질문드립니다.https://www.inflearn.com/questions/792196/%EA%B0%95%EC%9D%98-%EB%93%A4%EC%9C%BC%EB%A9%B4%EC%84%9C-%EC%9D%91%EC%9A%A9%ED%95%B4%EC%84%9C-%ED%85%8C%EC%8A%A4%ED%8A%B8%EB%A5%BC-%EC%9E%91%EC%84%B1%ED%95%98%EA%B3%A0-%EC%9E%88%EB%8A%94%EB%8D%B0-%EC%9E%90%EA%BE%B8-null%EC%9D%B8-%EC%83%81%ED%83%9C%EB%9D%BC%EA%B3%A0-%ED%95%B4%EC%84%9C-%EC%A7%88%EB%AC%B8%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4이 글에 대한 답변 좀 주실 수 있을까요...?
- 미해결실전! 스프링 데이터 JPA
실무에서 .get() 바로 쓰지 않는다고 하시는데 그럼 어떻게 쓰이나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. Member findMember = memberRepository.findById(member1.getId()).get();실무에서 이렇게 안쓴다고 하시던데 실무에서 어떤식으로 쓰이나요?
- 미해결실전! 스프링 데이터 JPA
질문 join
@Entity public class board { @Id @GeneratedValue @Column(name = "bno") private Long id; private String filename; }file에서 board를 join했습니다. @Query("select f from file f join fetch f.board on f.board =: bno") List<file> findByBno(@Param("bno") int bno); }이부분에서 int로 board.getId 로 넘겨서 위와같이 join을 하고 싶은데 안됩니다board의 pk값을 file에서 where을 걸었는데 안됩니다.오류 :Caused by: java.lang.IllegalArgumentException
- 미해결실전! 스프링 데이터 JPA
강의 들으면서 응용해서 테스트를 작성하고 있는데 자꾸 null인 상태라고 해서 질문드립니다.
강의를 들으면서 간단한 테스트 문을 작성해봤습니다. 근데 계속 NullPointerException이 발생해서 여러가지 테스트를 하면서 오류를 분석해보니answerList에 아무 값도 들어가지 않아서 자꾸 null이라고 뜨는데 대체 왜 그런지 모르겠어서 질문드립니다.아래에는 오류 화면이고 Question, Answer 엔티티와 함께테스트 코드도 같이 첨부하겠습니다.@Entity @Getter @Setter public class Question { @Id @GeneratedValue @Column(name = "question_id") private Long id; @Column(unique = true, length = 200) private String subject; @Column(unique = true, columnDefinition = "TEXT") private String content; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @OneToMany(mappedBy = "question", cascade = CascadeType.REMOVE) private List<Answer> answerList; private LocalDateTime createDate; }@Entity @Getter @Setter public class Answer { @Id @GeneratedValue @Column(name = "answer_id") private Long id; @Column(columnDefinition = "TEXT") private String content; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "question_id") private Question question; private LocalDateTime createDate; }@SpringBootTest @Transactional class AnswerRepositoryTest { @Autowired private QuestionRepository questionRepository; @Autowired private AnswerRepository answerRepository; @Test public void 답변조회() throws Exception{ //given Question question = new Question(); question.setSubject("제목입니다."); question.setContent("본문입니다."); questionRepository.save(q); Question findQuestion = questionRepository.findById(question.getId()).get(); Answer answer = new Answer(); answer.setContent("답변입니다."); answer.setQuestion(findQuestion); answer.setCreateDate(LocalDateTime.now()); answerRepository.save(answer); //when List<Answer> answerList = findQuestion.getAnswerList(); //then assertEquals("답변입니다.",answerList.get(0).getContent()); } }테스트 코드에서 findQuestion.getSubject/ findQuestion.getContent까지 다 잘 찾아지는데딱 getAnswerList()만 하면 null이라고 뜹니다
- 미해결실전! 스프링 데이터 JPA
페이징 질문입니다!!
영환님 항상 강의를 듣다가 궁금증이 있어 질문을 드립니다.페이징 부분에서 Pageable를 파라미터와 응답값으로 그대로 사용하는 부분이 있습니다.응답으로 Pageable를 그대로 사용하게 되면 Pageable객체와 last, totalPages 등이 전부 응답값으로 설정되게 되는데, 보통 실무에서나 프로젝트에서도 그대로 사용하나요?! 응답 값에서 필요한 부분만 추출해서 사용하는게 좋지 않나요? ("Page를 1부터 시작하기" 말고)
- 미해결실전! 스프링 데이터 JPA
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 복습 중 궁금한 부분이 있어 질문 드립니다. H2 데이터베이스를 실행하지 않더라도 스프링 내부 DB 에서 테스트가 가능하다고 하셨는데 스프링 내부적으로 H2 DB 를 사용하는 건가요? 그 데이터들은 어느 위치에 보관이 되고 있는지 휘발성인지도 궁금합니다 감사합니다.
- 해결됨실전! 스프링 데이터 JPA
실무에서 페이징 처리
안녕하세요! 영한님!강의는 너무나 잘들었습니다!👍👍강의를 듣고 나서 본격적으로 JPA를 이용한 개발을 진행하려 하는데, 실무에서 적용 시 궁금한 점이 있어서 질문을 남기게 되었습니다.강의 내용에서 Page 를 활용해서 DB 데이터의 페이징 처리를 할 수 있다는 점에 대해 알려주셔서 굉장히 유용한 방식이라 생각이 듭니다.이를 실무에서 실제로 적용하기 앞서 고민이 되는 부분은, 페이징이나 정렬과 관련하여 쿼리문을 이용해 처리를 하는 것과 전제 데이터를 가져와 비즈니스 로직에서 처리 하는 방식 중 어떤 것이 효율 적인지 고민이 되고 검색도 해봤는데 의견이 다 나뉘더라구요. 그래서 영한님께서는 보통 어떤 것을 기준으로 두 가지 방식 중에 선택을 하여 적용을 하시는지 의견을 듣고 싶어서 질문 드리게 되었습니다. 감사합니다!!
- 미해결실전! 스프링 데이터 JPA
쿼리 파라미터 로그 남기기 - 스프링 부트 3.0
org.springframework.boot.autoconfigure.AutoConfiguration.importsspy.properties 글에 적힌대로 했는데 안됩니다.
- 미해결실전! 스프링 데이터 JPA
Entity질문
Entity에 private String phoneNm; entity는 대소문자 구분안되고 phone_nm으로 넘어가나요?
- 해결됨실전! 스프링 데이터 JPA
스프링 데이터 jpa delete 최적화
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]강사님 강의 정말 잘 보고 있다가 의문점이 생겨 이렇게 질문 남깁니다. 일단 간단하게 예시를 만들면 양방향 관계로 묶인 Member와 Team이 있을때 Team을 삭제할때 해당 Team에 있던 Member도 전부 삭제를 원하는 상황입니다.데이터는 Team 2개 Team 하나당 3개의 Member씩이 있는 상태입니다.Member.javapackage com.example.demo.entity; import lombok.*; import javax.persistence.*; @Entity @Table(name = "member") @Getter @Setter @Builder @NoArgsConstructor @AllArgsConstructor public class Member { @Id @Column(name = "member_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long memberId; @Column(name = "member_name") private String name; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "team") private Team team; public Member(String name, Team team) { this.name = name; this.team = team; } } Team.javapackage com.example.demo.entity; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity @Getter @Setter @AllArgsConstructor @NoArgsConstructor @Table(name = "team") public class Team { @Id @Column(name = "team_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy = "team", cascade = CascadeType.ALL, orphanRemoval = true) List<Member> members = new ArrayList<>(); } controller.javapackage com.example.demo.entity.controller; import com.example.demo.entity.repository.TeamRepository; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController @RequiredArgsConstructor public class Controller { private final TeamRepository teamRepository; @DeleteMapping("/") public void deleteTeam(@RequestParam Long id) { teamRepository.deleteById(id); //deleteById는 JpaRepository에서 제공하는 기본 } } 위의 코드를 실행하고 delete요청을 했을때Hibernate:selectteam0_.team_id as team_id1_1_0_fromteam team0_whereteam0_.team_id=? Hibernate:selectmembers0_.team as team3_0_0_,members0_.member_id as member_i1_0_0_,members0_.member_id as member_i1_0_1_,members0_.member_name as member_n2_0_1_,members0_.team as team3_0_1_frommember members0_wheremembers0_.team=? Hibernate:deletefrommemberwheremember_id=? Hibernate:deletefrommemberwheremember_id=? Hibernate:deletefrommemberwheremember_id=? Hibernate:deletefromteamwhereteam_id=? 이렇게 나오고 Team의 members의 fetch type을 eager로 바꾸었을때는 selectteam0_.team_id as team_id1_1_0_,members1_.team as team3_0_1_,members1_.member_id as member_i1_0_1_,members1_.member_id as member_i1_0_2_,members1_.member_name as member_n2_0_2_,members1_.team as team3_0_2_fromteam team0_left outer joinmember members1_on team0_.team_id=members1_.teamwhereteam0_.team_id=? Hibernate:deletefrommemberwheremember_id=?Hibernate:deletefrommemberwheremember_id=? Hibernate:deletefrommemberwheremember_id=? Hibernate:deletefromteamwhereteam_id=?이러한 쿼리가 발생하는것을 볼 수 있습니다. 여기서 제가 든 궁금점은 (편의상 맨 위의 쿼리를 1번쿼리라 하겠습니다)지연로딩을 할때 Team의 Member는 프록시이므로 member select 하긴 할텐데 selectmembers0_.team as team3_0_0_,members0_.member_id as member_i1_0_0_,members0_.member_id as member_i1_0_1_,members0_.member_name as member_n2_0_1_,members0_.team as team3_0_1_이 쿼리(2번 쿼리)가 어떻게 나오게 된건지 이해가 되질 않습니다. 최대한 쿼리를 최적화 해보려 했지만 지연로딩을 할때 fetch join, entity graph등을 사용할 수 없어 1번과 2번 쿼리를 즉시로딩을 사용할때 처럼 최적화 할 수가 없었고 delete문도 멤버를 한번에 delete, 그다음 team delete 이렇게 두번으로 최적화 하고 싶었는데 방법이 떠오르질 않습니다. 정확하게 알려주시기 번거로우시면 키워드나 따로 어떻게 공부하면 해결 할 수 있을지 알려주시면 정말 감사드리겠습니다.
- 미해결실전! 스프링 데이터 JPA
application.yml 질문드립니다.
[질문 내용]여기에 질문 내용을 남겨주세요. spring: datasource: url에 datajpa 부분이 오타났다고 뜨는데 왜 그렇게 되는 건가요? db 명은 datajpa로 했습니다.
- 미해결실전! 스프링 데이터 JPA
@Transactional
spring jpa에 @Transactional을 사용해야하나요???
- 미해결실전! 스프링 데이터 JPA
질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]1. 만약 slice 를 이용해서 0부터 10개의 데이터를 가져오려고 하는데 데이터가 10개 미만으로 있다면 어떻게 처리가 되나요?2. public int bulkAgePlus(int age) { int resultCount = em.createQuery( "update Member m set m.age = m.age + 1" + "where m.age >= :age") .setParameter("age", age) .executeUpdate(); return resultCount; }이 코드에서 resultCount를 return 하는데, 쿼리 문에서 count 와 같은 표현이 안보이는데 어떻게 개수를 return 할 수 있나요?
- 미해결실전! 스프링 데이터 JPA
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]1. @Entity 의 역할을 영속성 컨텍스트에 Entity 넣기, @PersistenceContextContext 의 역할은 영속성 컨텍스트 데이터를 DB 에 넣기로 이해하면 될까요?2. return em.find(Member.class,id); 에서 id 값을 기준으로 해당되는 member 객체가 반환되는 걸로 이해했는데 맞을까요?3. update 는 구현이 따로 필요 없다고 하셨는데, public Member save(Member member) 에서 이 update 기능을 사용할 수 있어서 그런건가요?