Spring 심화주차 8

8. My 셀렉샵 Top5 회원 찾기 설계 및 구현

Entity 클래스 ApiUseTime.java 생성 Entity 클래스니까 테이블을 만드는 것이다. 회원별 누적 API 사용시간을 측정하여 저장할것이다. package com.sparta.myselectshop.entity;import jakarta.persistence.*;import lombok.Getter;import lombok.NoArgsConstructor;import lombok.Setter;@Entity@Getter@Setter@NoArgsConstructor@Table(name = "api_use_time")public class ApiUseTime { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Lo..

7. Controller는 어떻게 테스트할까?

Spring에서 제공하는 기본 Filter를 구현한다. 16번째 줄의 SecurityContextHolder가 인증객체를 담고있는 컨텍스트를 담는 공간 setAuthentication = 인증객체 주는것 우리는 인증객체를 실제로 만들것이다. Mock처럼 우리는 가짜 필터를 만드는 것이다. Security가 동작하면 테스트하는데 방해가 된다. 그래서 가짜 Security를 만들어서 사용한다.이 애노테이션을 통해서 컨트롤러를 테스트할 수 있다 또한 테스트할 컨트롤러를 지정한다. 여기서는 UserController.class, ProductController.class 컨트롤러를 지정했다. excludeFilters = 제외할 것 WebSecurityConfig.class는 개발자가 만든 클래스다.저 부분에서..

6. 통합 테스트란 무엇일까

단위 테스트 VS 통합 테스트1. 단위 테스트(Unit Test) 하나의 모듈이나 클래스에 대해 세밀한 부분까지 테스트가 가능하다. 하지만 모듈 간에 상호 작용 검증은 할 수 없다. 2. 통합 테스트(Integeration Test) 두 개 이상의 모듈이 연결된 상태를 테스트 할 수 있다. 모듈 간의 연결에서 발생하는 에러 검증 가능하다. Spring Boot를 이용한 통합 테스트통합 테스트 여러 단위 테스트를 하나의 통합된 테스트로 수행한다. 단위 테스트 시 Spring은 동작되지 않는다. "@SpringBootTest" 스프링이 동작되도록 해주는 애너테이션이다. 테스트 수행 시 스프링이 동작한다. Spring IoC/DI 기능을 사용 가능하다. Repository를 사용해 DB CRUD가 가능하다. ..

5. Mockito란 무엇일까?

테스트 코드에서는 Bean객체를 주입받아 사용하는 메서드를 어떻게 처리할까? @Mock이 붙어있는 객체는 가짜객체이다.  Mockito가 가짜객체를 넣어준다. 이 가짜객체를 이용해서 Service 코드를 테스트할 수 있다. Service 테스트를 하려하는데 Repository에 연결이 되어있어서 분리해서 테스트를 할 수 없는 상황이다. 이런 문제점을 해결하기 위해 Mockito라는 프레임워크가 만들어졌다.가짜 객체를 사용해서 Service 생성자를 만들어서 테스트하고있다. 하지만 그대로 사용하면 오류가 발생한다.  41번줄에서 productService.updateProduct(productId, requestMyPriceDto);에서 productId의 번호를 찾지 못해 오류가 발생한다. 이 부분을 직..

4. 단위 테스트란 무엇일까?

단위 테스트란?버그 발견 시간이 늦어짐에 따라 비용이 기하급수적으로 커지는 것을 알 수 있다. 1. Development : 개발 2. Unit Tests (단위 테스트) : 개발자 테스트 3. QA Testing : 블랙박스 테스팅, 주로 QA팀이 Production 환경과 유사한 환경(Stage)에서 테스팅 4. Production : 실 서비스 운영 환경 따라서 테스트 코드를 작성한다면 프로그램의 버그를 사전에 발견하여 기하급수적인 비용의 증가가능성을 사전에 방지할 수 있다. 개발자는 단위 테스트를 작성하여 프로그램을 테스트 할 수 있다. 단위 테스트는 작은 단위로 쪼개서 각 단위가 정확하게 동작하는지를 검사하는 테스트 기법이다. 단위 테스트는 빠르게 작성할 수 있고 문제 발생 시 어느 부분이 잘 ..

3. 카카오 사용자 정보로 회원가입 구현

카카오 사용자 회원가입 설계관심 상품 등록을 했을 때 회원 구분이 필요하기 때문에, 카카오서버에서 받은 사용자 정보를 이용해 회원 가입을 한다. 현재 User 테이블 확인카카오로 부터 받은 사용자 정보 1. kakaoid 2. nickname 3. email 카카오 사용자 정보 JSON의 예테이블 설계 옵션1. 카카오 User를 위한 테이블 (ex. KakaoUser)을 하나 더 만든다. 장점 : 결합도가 낮아짐 성격이 다른 유저 별로 분리 -> 차후 각 테이블의 변화에 서로 영향을 주지 않음 예) 카카오 사용자들만 profile_image 컬럼 추가해서 사용 가능 단점 : 구현 난이도가 올라감 예) 관심상품 등록 시, 회원별로 다른 데이블을 참조해야 함 1. 일반회원 : User - Product 2...

2. 카카오 사용자 정보 가져오기

카카오 서버에서 인가코드 받기https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#request-code Kakao Developers카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.developers.kakao.com카카오 인가코드 받기 우리가 전에 카카오에 등록한 애플리케이션(현재 애플리케이션)에 REST API를 등록해야한다.그리고 아까 빨간 네모부분을 이렇게 붙여넣기 한다. 이제 카카오 로그인하기 버튼을 클릭하면 카카오 로그인 창이 뜰것이다.인가 코드를 컨트롤에서 받으면 그것을 처리할 서비스 클래스를 만듦 KakaoService 클래스파일이다. 우..

1. 소셜 로그인

1. 소셜 로그인 탄생 배경 모든 웹사이트에서 회원가입 과정을 거치는 것은 사용자에게 부담이 된다. 매번 번거로운 회원가입 과정을 수행해야 할 뿐 아니라, 웹 사이트마다 다른 아이디와 비밀번호를 기억해야 한다. 또한 웹사이트를 운영하는 측에서도 회원들의 개인정보를 지켜야하는 역할이 부담이된다. 바이러스와 백신의 관계처럼, 발전해가는 해킹 기술을 막기 위해 보안을 강화하는 노력이 지속적으로 필요하기 때문이다. 이런 문제를 해결하기 위해 OAuth를 사용한 소셜 로그인이 등장한다. OAuth란?OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다. ..