2024/08 48

11. SpringBoot의 JPA

Memo 프로젝트를 연다. build.gradle의 dependency에 아래의 코드를 추가한다. 그리고 코끼리 새로고침// JPA 설정implementation 'org.springframework.boot:spring-boot-starter-data-jpa' application.properties로 이동 후 아래의 코드 추가spring.jpa.hibernate.ddl-auto=updatespring.jpa.properties.hibernate.show_sql=truespring.jpa.properties.hibernate.format_sql=truespring.jpa.properties.hibernate.use_sql_comments=true Memo.java의 기존 코드를 전부 지우고 아래의 코드..

10. Entity의 상태

비영속(Transient)Memo memo = new Memo(); // 비영속 상태memo.setId(1L);memo.setUsername("Robbie");memo.setContents("비영속과 영속 상태");쉽게 말하자면 new 연산자를 통해 인스턴스화 된 Entity 객체를 의미한다. 아직 영속성 컨텍스트에 저장되지 않았기 때문에 JPA의 관리를 받지 않는다.영속(Managed)em.persist(memo);persist(entity) : 비영속 Entity를 EntityManager를 통해 영속성 컨텍스트에 저장하여 관리되고 있는 상태로 만든다. @Test@DisplayName("비영속과 영속 상태")void test1() { EntityTransaction et = em.getTrans..

9. 영속성 컨텍스트의 기능

1차 캐시영속성 컨텍스트는 내부적으로 캐시 저장소를 가지고 있다. 우리가 저장하는 Entity 객체들이 1차 캐시 즉, 캐시 저장소에 저장된다고 생각하면 된다. 캐시 저장소는 Map 자료구조 형태로 되어있다. key에는 @Id로 매핑한 기본 키 즉, 식별자 값을 저장한다. value에는 해당 Entity 클래스의 객체를 저장한다. 영속성 컨텍스트는 캐시 저장소 Key에 저장한 식별자값을 사용하여 Entity 객체를 구분하고 관리한다. 영속성 컨텍스트가 이 캐시 저장소를 어떻게 활용하고 있는지 살펴보자Entity 저장em.persist(memo); 메서드가 호출되면 memo Entity 객체를 캐시 저장소에 저장한다. jpa-core 프로젝트 실행 테스트 폴더에 PersistenceTest 클래스 파일 만..

8. 영속성 컨텍스트란 무엇일까?

영속성 컨텍스트란?Persistence를 한글로 번역하면 영속성, 지속성 이라는 뜻이 된다. Persistence를 객체의 관점으로 해석해 보자면 '객체가 생명(객체가 유지되는 시간)이나 공간(객체의 위치)을 자유롭게 유지하고 이동할수 있는 객체의 성질'을 의미한다. 영속성 컨텍스트를 좀 더 쉽게 표현해 보자면 Entity 객체를 효율적으로 쉽게 관리하기 위해 만들어진 공간이다. 개발자들은 이제 직접 SQL을 작성하지 않아도 JPA를 사용하여 DB에 데이터를 저장하거나 조회할 수 있으며 수정, 삭제 또한 가능하다.이러한 일련의 과정을 효율적으로 처리하기 위해 JPA는 영속성 컨텍스트에 Entity 객체들을 저장하여 관리하면서 DB와 소통한다.EntityManager영속성 컨텍스트에 접근하여 Entity ..

7. Entity 이해하기

Entity란?JPA에서 관리되는 클래스 즉, 객체를 의미한다. Entity 클래스는 DB의 테이블과 매핑되어 JPA에 의해 관리된다.실습JPA는 Spring 환경에서 하는것과 Java환경에서 하는것은 좀 다르다 무엇이 다른지는 나중에 알려준댄다. 일단 지금은 Java 환경에서의 JPA이다.  resoureces 우클릭 - Directory - META-INF 그리고 META-INF 우클릭 - New - File -> persistence.xml 라고 이름지어서 만들기 persistencs.xml에 아래의 코드 넣기 com.sparta.entity.Memo ..

7. 회원가입 구현

Spring-auth 프로젝트 열기 Build.gradle에 아래의 코드를 추가한다.// JPAimplementation 'org.springframework.boot:spring-boot-starter-data-jpa'// MySQLruntimeOnly 'com.mysql:mysql-connector-j'데이터베이스에 연결을 해야 하기 때문에 JPA와 MySQL을 등록한것이다. application.properties로 이동spring.datasource.url=jdbc:mysql://localhost:3306/authspring.datasource.username=rootspring.datasource.password={비밀번호}spring.datasource.driver-class-name=com...

6. JWT 다루기

프로젝트 설정 Spring-Auth 프로젝트 열기 build.gradle 열기 -> dependencies에 아래의 코드 추가// JWTcompileOnly group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5'runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5'runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5'코끼리 새로고침 누르기application.properties로 이동아래의 코드 추가jwt.secret.key=7Iqk7YyM66W07YOA7L2U65Sp7YG065+9U3By..

5. JWT란 무엇일까?

JWT란?JWT(Json Web Token)란 JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 WebToken 이다. 즉, 토큰의 한 종류라고 생각하면 된다. 일반적으로 쿠키 저장소를 사용하여 JWT를 저장한다.JWT 사용 이유1. 서버가 1대인 경우Session1이 모든 Client의 로그인 정보를 소유하고 있다. 나의 궁금증Session1이 모든 Client의 로그인 정보를 가지고 있다면 서버는 각 Client를 어떻게 구분하는가? Session1을 서버에 보내서 Client 정보를 파악하는걸로 알고있는데 모두 같은 Session이면 구분이 가능한건가? 2. 서버가 2대 이상인 경우 서버의 대용량 트래픽 처리를 위해 서버 2대 이상 운영이 필요할 수 있다.Session마다 다..

4. 쿠키와 세션이란 무엇일까?

쿠키와 세션쿠키와 세션 모두 HTTP에 상태 정보를 유지(Stateful)하기 위해 사용된다. 즉, 쿠키와 세션을 통해 서버에서는 클라이언트 별로 인증 및 인가를 할 수 있게 된다.쿠키클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일이다. 클라이언트인 웹 브라우저에 저장된 '쿠키'를 확인해보자 크롬 브라우저 기준으로 '개발자도구'를 열어보자구성요소 Name(이름) : 쿠키를 구별하는 데 사용되는 키 (중복될 수 없음) Value(값) : 쿠키의 값 Domain(도메인) : 쿠키가 저장된 도메인 Path(경로) : 쿠키가 사용되는 경로 Expires(만료기한) : 쿠키의 만료기한(만료기한 지나면 삭제된다)세션서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용된다. 서버에서 클라이언트 별로..