버킷 CORS

버킷 정책 설정

튜터님이 쉽다고 여러 번 강조하셨는데 그럴 만큼 CRUD와 JPA에 충실한 문제가 나왔다. 크게 응용을 요하는 부분이 없어서 다행히 다 풀었다.
조건을 설정해서 찾는 JPA는 꽤나 직관적이어서 홈페이지를 들어간 뒤 풀었다.
1주차에서는 update만 서비스에서 처리했고 2주차는 전부 서비스에서 처리했는데 나는 2주차의 방식을 따랐다. 임포트 한 번씩만 하면 되니까 ㅎㅎ...
또한 처음부터 dto를 만들어 진행했는데 이메일이 들어가지 않는 경우가 필요해서 dto를 하나 더 만들었다. dto 자체에 email이 안 들어가야한다는 생각으로 그런건데... 지금와서 생각해보니까 그냥 dto 그대로 받고 함수를 설정하기만 했어도 됐겠다.
사실 어제까지 제출 기한이어서 마감을 한참 넘겼다.
하지만 어제 하루를 css & js와 싸우며 보냈는 걸요...😭
죽도록 안되던 css는 앞에 슬래시를 하나 더 붙이는 걸로 말끔히 해결되어서 너무 어이가 없었다. 시큐리티를 얼매나 건드렸던가...
자스는 할 말도 없다... 어휴...
게다가 어제는 안 되던, 로그인 직후 권한별 페이지 이동을 달리 하는 것도 오늘은 거짓말처럼 됐다. 하룻밤 자고 일어나면 시간이 해결해 주는 것도 있나보다^^... 그래도 이거 한 번 해보고 나니까 프로젝트할 때는 좀 덜 헤맬 것 같...기도 하다ㅎ

▶ 스프링에서 제공하는 테스트 프레임 워크를 사용하여 테스트 코드 작성법을 배워본다!
테스트의 필요성
버그(bug): 소프트웨어가 예상치 못한 결과를 내는 것
블랙박스 테스팅 사용자 입장에서 검사
➕
누구나 테스트가 가능
➖
기능 증가에 따라 테스트의 범위도 증가
개발자 테스트(화이트박스 테스팅) 개발자가 테스트 코드 작성
➕
빠르고 정확한 테스트
테스트 자동화
기존 코드 정상 작동
배포 시 항상 검증 가능
➖
개발 시간이 오래 걸림
테스트 코드 유지보수 비용
▶ Unit Test
단위 테스트는 클래스 단위로 생각하면 된다
객체 하나에 function 하나당 테스트
▶ Product.java 관심 상품을 생성하는 함수를 테스트해보자!
테스트에는 @Test 어노테이션이 붙는다.
@DisplayName()은 실행 화면에서 보여질 이름이다.
기본적으로 1씩 더해지는 id는 초기값이 null인 것을 확인하는 것이 중요하다.
테스트 에러가 나는 경우 그 뒤의 동작들은 수행하지 않는다.
▶ Edge Case 고려하기
: 모든 입력값의 여러 상황을 고려해본다.
▶ URL 입력값 예외 처리 함수
public class URLValidator {
public static boolean urlValidator(String url)
{
try {
new URL(url).toURI();
return true;
}
catch (URISyntaxException exception) {
return false;
}
catch (MalformedURLException exception) {
return false;
}
}
}
toURI() function of URL class converts the URL object to a URI object
MalformedURLException url 문자열이 null이거나 프로토콜을 알 수 없는 등의 상황에 발생
▶ 위의 테스트에 맞춰 상품 테스트 클래스를 수정해보자!
@Nested 하위 테스트가 존재할 때
@BeforeEach 초기값 세팅
// when
Exception exception = assertThrows(IllegalArgumentException.class, () -> {
new Product(requestDto, userId);
});
// then
assertEquals("회원 Id 가 유효하지 않습니다.", exception.getMessage());
입력값 Validation에 따라 처리될 예외의 경우를 예상되는 경우로 지정해 확인한다.
❔ TDD(Test-Driven Development)?
테스트 코드를 먼저 만들고 개발을 시작하는 것!
▶ Mock Object
이상적인 테스트를 위해서는 Mock Object로 연관된 클래스들이 아닌 하나의 클래스를 테스트하는 것이 좋다.
DB에 저장되는 것처럼 리스트에 넣어서 임시로 쓸 수 있게끔 만들어 준다.
❔ Mockito? Mock 객체를 쉽게 만들 수 있는 방법을 제공하는 프레임워크
@ExtendWith(MockitoExtension.class)
@Mock
ProductRepository productRepository;
ProductService productService = new ProductService(productRepository);
when(productRepository.findById(productId))
.thenReturn(Optional.of(product));
레포를 알아서 만들어준다. 하지만 초기값을 쓸 수 있게 정해줘야 한다!
SAVE 💾
티스토리는 복붙하면 알아서 코드로 넣어주는데 벨로그 이 바보야... 귀찮다고...
고생많으셨습니다~ㅋㅋ dto를 나누고 엔티티와 변수명을 다르게 하는건 보안적인 측면과 관리의 측면 둘 다 있으니 나누신게 잘 하고 계신거에요~