본문 바로가기

컴퓨터공학/Boot & Angular

Angular> 리팩토링

개발순서

1. 데이터베이스 테이블 삭제

2. 이메일 주소가 unique값을 갖도록 스키마 수정 

3. CustomerRepository 에서 findByEmail 메서드 생성

4. CheckoutServiceImpl 업데이트 

만약에 같은 이메일을 갖고 있는 고객이 있으면 이미 있는 유저를 사용한다. 

 

 

 

1. 2.

use `full-stack-ecommerce`;

set foreign_key_checks=0;

truncate customer;
truncate orders;
truncate order_item;
truncate address;

set fcustomeroreign_key_checks=1;

alter table customer add unique(email);

 

데이터 삭제를 해야 하므로 foreign key check를 비활성화한다. 

truncate는 delete보다 빠르고 auto increment를 초기화한다. 

 

데이터베이스 constraint의 unique은 같은 이메일을 넣으려고 시도할 때 에러를 발생하게 한다. 

 

 

3. 

 

select * from customer c where c.email = theEmail  과 같은 의미

못찾으면 null값 반환

 

4. 

 

 

 


개발순서

1. Spring Data REST 에서 메서드 수정

2. Spring Data REST 에서 CORS mapping 설정

3. @RestController 관련 CORS mapping 설정

4. HTTP PATCH 메서드 비활성화

5. Spring Data REST detection Strategy 수정

 

 

1. 

파라미터에 CorsRegistry를 추가

 

 

 

 

 

2. 

@CrossOrigin을 JapRepositories에서 제거할 수 있다.

Repository 클래스에 있는 @CrossOrigin("http://localhost:4200")를 모두 지우자.

 

 

 

CORS configuration에 있는 하드 코딩들을 지우고 applicaton.properties 파일에 내용을 추가하여 사용하자.

이렇게 추가하고

이렇게 지정해서

allowedOrigins의 내용(http://localhost:4200)

을 변수(theAllowedOrigins)에 두는데 변수는 application.properties 파일에 있는 값(allowed.origins)을 가져온다. 

 

/api 내용도 비슷한 원리를 적용한다. 

 

 

 

 

 

3.

 

RestController에도 위처럼 CrossOrigin을 지우고 싶다.

RestController용 Config를 만들어서 적용할 수 있다.

@RestController configuration은 Spring Data REST Configuration와 분리하자.

 

새로운 Config 로 쓸 클래스를 만든다. 

 

 

이렇게 하여 @RestController에서 @CrossOrigin을 지울 수 있다. 

 

 

 

 

 

 

4.

이전에 우리는 Spring Data REST API를 읽기 전용으로 만들기 위해 수정했다.

HTTP GET, POST, DELETE를 비활성화했다.

여기에 HTTP PATCH를 비활성화 해야 한다. 

 

 

5. 

Spring Data REST는 기본적으로 Spring Data Repository 를 REST API처럼 노출한다. 

우린 내부적으로 사용하고 싶다. 

Spring Data REST는 Detection Strategy 종류가 있다. 

ALL - Java visibility나 annotation configuration에 상관 없이 모든 Spring Data repositories를 노출한다. 

DEFAULT - public Spring Data repositories 나 @RepositoryRestResource를 가진 것에 노출한다. 

VISIBILITY - 오직 public Spring Data repositories에 노출한다. 

ANNOTATED - 오직 @RepositoryRestResource를 가진 Spring Data repositories 에 노출한다. 

 

 

이렇게 @RepositoryRestResource가 있는 Repository만 접근할 수 있다.