전체 글 132

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(만료기한) : 쿠키의 만료기한(만료기한 지나면 삭제된다)세션서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용된다. 서버에서 클라이언트 별로..

3. 인증과 인가란 무엇일까?

인증과 인가인증(Authentication)인증은 해당 유저가 실제 유저인지 인증하는 개념이다. 스마트폰에 지문인식, 이용하는 사이트에 로그인 등과 같이, 실제 그 유저가 맞는지를 확인하는 절차이다.인가(Authorization)인가는 해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 개념이다.  예를 들어 관리자 페이지-관리자 권한 같은 것들을 들 수 있다.우리가 자주 하는 로그인은 인증을 할 때(비밀번호를 입력하고 제출할 때)이고 회원/비회원 여부에 따라 다른 권한을 받는 것이 인가이다."웹 애플리케이션 인증"은 어떠한 특수성이 있을까?일반적으로 서버-클라이언트 구조로 되어있고, 실제로 이 두가지 요소는 아주 멀리 떨어져 있다. 그리고 Http라는 프로토콜을 이용하여 통신하는데, 그 통신은 ..

2. 같은 타입의 Bean이 2개라면?

같은 타입 Bean 등록food 패키지를 만들고 Food 인터페이스와 Chicken 클래스, Pizza 클래스를 만든다. Food 인터페이스에 eat() 메서드를 선언한다. Chicken 클래스와 Pizza 클래스에 각각 코드를 작성한다. 모두 Food 인터페이스를 implements 했다. 즉, Chicken과 Pizza는 같은 인터페이스의 구현체 클래스이다.  그리고 @Component로 Bean으로 등록되었다는것을 알 수 있다.테스트 해보기Test 폴더에 BeanTest 파일을 만든다.먼저 이렇게 코드를 작성한다. 그럼 Food를 Autowired 할 수 없다고 하는데 그 이유는 Food 타입으로 등록된 Bean이 2개 이상이기 때문이다. 즉, food에 Bean을 주입을 해줘야 하는데 같은타입의 ..