[TIL] 인증 인가 - 쿠키세션 방식, JWT 기반 방식
·
카테고리 없음
클라이언트와 서버가 계속 연결이 되어있다면 서버 비용이 기하급수적으로 늘어난다.따라서 [비연결성, Stateless(무상태)]  프로토콜 - 클라이언트의 상태를 저장하고 있지 않도록 해야하는데, 이 연결되지 않은 상태를 사용자는 연속적으로 느낄 수 있게끔해야 한다. 어떻게 해야할까? 유저가 인증됐다라는 정보를 어떻게 유지시키고 있는지에 대해 알아보자.  2가지 방식(쿠키세션, JWT)를 소개하겠다.1. 쿠키 세션 방식의 인증쿠키 - 세션 ID 저장소세션 - 인증 정보(일정시간 동안 클라이언트 상태를 유지하기 위해 사용)요청할 때마다 세션 ID를 Http header에 담아서 같이 서버에 보낸다. => 상태를 유지, 연결되어 있다고 느껴짐. 🔺쿠키쿠키를 생성하는 법1. 입력받은 사용자 정보와 HttpSe..
[TIL] PasswordEncoder, BCryptPasswrodEncoder
·
카테고리 없음
Bean 수동 등록 => 기술적인 문제나 공통적인 관심사를 처리할 때 사용하는 객체들을 수동으로 등록하는 것이 좋다기술 지원 Bean => 수동 등록비즈니스 로직보다는 수가 적기 때문에 부담 x수동 등록한 빈에 문제가 생겼을 시 에러가 어디서 났는지 확인하기 수월하다.ex. 비밀번호 암호화 빈 등록 - `@Bean`그 메서드가 속해있는 클래스에 `@Configuration`=> Spring IoC Container에 Bean으로 저장된다. @Configurationpublic class PasswordConfig { @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }} Pa..
[JPA] Spring Data JPA
·
카테고리 없음
JPA를 쉽게 사용할 수 있도록 만든 하나의 모듈 Spring Data JPA에서는 JpaRepository인터페이스를 구현하는 클래스를 자동으로 생성Spring 서버가 실행 때 JPaRepository 인터페이스를 상속받은 인터페이스가 자동으로 스캔되면, 해당 인터페이스의 정보를 토대로 SimpleJpaRepository 클래스를 생성해주고, 이 클래스를 Sping `Bean`으로 등록한다. 따라서 인터페이스의 구현 클래스를 직접 작성하지 않아도 JpaRepository 인터페이스를 통해 JPA 기능을 사용할 수 있다. public interface MemoRepository extends JpaRepository{} 이떄 `@Repository` 어노테이션을 붙일 필요없다. 애초에 SimpleJpaR..
[JPA] @Transactional, 생명주기, 전파
·
카테고리 없음
1. @TransactionalintelliJ에서 `shift` + `shift` 하고 검색창 띄워서`SimpleJpaRepository.java` 검색해보자.  ◆  SimpleJpaRepository해당 클래스의 `save` 메서드 가볍게 살펴보면 다음과 같다.@Override@Transactionalpublic S save(S entity) { Assert.notNull(entity, "Entity must not be null"); if (entityInformation.isNew(entity)) { // 새로운 엔티티는 영속성 컨텍스트에 저장(persist) entityManager.persist(entity); return entity; } e..
[JPA] Entity의 상태
·
카테고리 없음
비영속(Transient) 상태쉽게 말하자면 `new` 연산자를 통해 인스턴스화 된 Entity 객체아직 영속성 컨텍스트에 저장되지 않았기 때문에 JPA의 관리를 받지 않는다.Memo memo = new Memo(); // 비영속 상태비영속 상태 때는 `entitiesByKey=null`이다.JPA가 관리할 수 없어서 해당 객체의 데이터를 변경해도 변경 감지가 이루어지지 않는다.  영속(Managed) 상태관리하고 싶은 객체를 `persist`에 던져서 넣으면,영속성 컨텍스트에 저장하여 (EntityManager를 통해) 관리되고 있는 상태로 만든다.em.persist(memo); // 영속 상태 준영속(Detached) 상태영속성 컨텍스트에 저장되어 관리되다가 비영속 상태로 분리된 상태이다. [영속 상..
[JPA] 디버깅을 통한 영속성 컨텍스트(2) - 1차 캐시, 쓰기 지연 저장소, 변경 감지
·
카테고리 없음
영속성 컨텍스트가 어떻게 Entity 객체를 효율적으로 관리하고 있는지 기능을1차 캐시쓰기 지연 저장소변경 감지순으로 소개하겠다. Test 작성 전 `EntityManagerFactory`와 `EntityManger` 세팅 ✔️ EntityManagerFactory emf; EntityManager em; @BeforeEach void setUp() { emf = Persistence.createEntityManagerFactory("memo"); em = emf.createEntityManager(); }1차 캐시영속성 컨텍스트는 내부적으로 캐시 저장소를 가지고 있는데, 우리가 저장하는 Entity 객체들이 이 캐시 저장소(1차 캐시)에 저장된다. 해..