1. JPA의 영속성 컨텍스트(Persistence Context)

사용자가 비밀번호를 바꾼다고 했을 때, 서비스 계층에서는 RestController계층으로부터 데이터를 전달받고그 멤버의 비밀번호 속성을 바꾸어 다시 스프링부트 JPA 레포지토리 계층에 전달하여 db에 저장해야한다.그래서 제일 마지막에 memberRepository.save()로 데이터를 전달하는데, 여기서 이 save메서드를 작성하지않아도 DB에 자동으로 비밀번호가 바뀌어서 정상적으로 저장된다.

—>그 이유는 우리가 JPA(스프링부트 JPA) 프레임 워크를 사용하면서 EntityManager라는 인터페이스도 같이 생기게 되는데(기능은 Hibernate에서 구현됨) 이 EntityManager 가 우리가 @Entity어노테이션을 붙인 클래스에 대해 영속성 컨텍스트라는 매커니즘을 사용하여 해당 클래스와 DB의 엔티티 사이를 지속적으로 관리한다. 이 메커니즘으로 인해 원래 DB에 데이터와 매칭되는 객체가 프로그램 단계에서 속성값이 바뀌었을 때 자동으로 DB에 업데이트 적용까지 하게 한다.

---------------서비스 계층----------------------------------

  public void updatePw(MemberUpdateDto memberUpdateDto){
             Optional<Member> optionalMember= memberRepository.findByEmail(memberUpdateDto.getEmail());
             Member tempMember = optionalMember.orElseThrow(()->new EntityNotFoundException("없는 사용자입니다"));
             tempMember.changePw(memberUpdateDto.getNewPassword());

             **memberRepository.save(tempMember);
             -->그런데! 이 save메서드 구문을 삭제해도 자동으로 update된다!!**
    }

2.Bean개념

싱글톤 객체는 Component 어노테이션을 통해 구현되는데 이 Bean어노테이션도 싱글톤 객체를 구현하여 사실상 Component어노테이션과 같다고 볼 수 있다. 단, Component는 클래스 차원에서 적용되고 Bean은 메서드 차원에 적용된다. 이때는 메서드의 리턴 타입이 객체이고, 리턴되는 개체에 싱글톤 객체를 구현하고 싶을 때 사용하는 경우가 많다. 그리고 필수적으로 Bean어노테이션을 붙이기 전에 해당 메서드가 정의된 클래스에 @Configuration어노테이션을 붙여야한다. Configuration 과 Bean어노테이션은 세트 같은 느낌. (@Configuration은 스프링에 Bean을 정의하기 위한 어노테이션으로 클래스 차원에서 선언되어야한다.)

----------------MemberRestConroller클래스(계층)-----------------------

@DeleteMapping("/delete/{id})"
public String deleteMember(@PathVarialbe Long id){
				memberService.deleteMember(id);
				return "Okay!";
}
**-->무엇을 삭제할 때 기본적으로 해당 객체의 id값을 조회하여 해당 id를 가진 객체삭제해야하므로
PathVariable방식으로 id변수를 받는게 편하다.**

----------------MemberService클래스(계층)----------------------------

public void deleteMember(Long id){
        
Member member=memberRepository.findById(id).orElseThrow(()->new NoEntityFoundException);
        memberRepository.delete(member);

**-->RestController로부터 메서드를 통해 전달받은 id를 레포지토리 계층으로부터 조회하면
해당id를 가진 객체를 찾을 수 있다. 그런다음 삭제하면 끝.
또는 memberRepository.deleteById(id)로 객체의 id값을 전달해 바로 객체를 삭제하는 방법도 있으나,
멤버(객체) 그 자체를 delete하는 메서드가 좀 더 객체지향스럽다고 할 수 있다.**         
				

}

3.RestController에 삭제 매서드 추가

4.Http 기본 개념

5.프로토콜

컴퓨터간 통신방법에는 IP프로토콜, TCP프로토콜, HTTP프로토콜 등이 있다.