Spring 숙련주차/1주차 8

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을 주입을 해줘야 하는데 같은타입의 ..

1. Bean을 수동으로 등록하는 방법

New Project를 생성한다.3가지를 Add 해준다. Create Git을 했으니 생성한 프로젝트를 모두 최초의 커밋을 해준다.오른쪽에 코끼리모양 Gradle 버튼을 누르고 사진을 따라간다.그럼 build.gradle로 진입한다.그리고 이 코드를 작성하고 코끼리 새로고침을 눌러 적용시킨다.SpringAuthApplication으로 이동이렇게 작성한다. Spring Security의 일부 기능들을 제외시킨것이다. 학습할 때 방해가 되기 때문이다. 이후에 Spring Security를 배울때 다시 제외한걸 돌려놓을것이다.Bean 수동 등록이란?@Component를 사용하면 @ComponentScan에 의해 자동으로 스캔되어 해당 클래스를 Bean으로 등록해준다. 일반적으로 @Component를 사용하여 ..