Spring

    [Spring] CORS와 처리 방법에 대해

    CORS와 처리 방법에 대해 CORS(Cross-Origin Resource Sharing, CORS, 교차 출처 리소스 공유)는 추가 HTTP 헤더를 사용하여, 한 출처(origin)에서 실행 중인 웹 어플리케이션이 다른 출처(corss-origin)의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제를 말한다. 만약 내가 서비스하고 있지 않은 사이트에서 세션을 요청해서 세션을 획득할 수 있다면 해당 사이트는 악의적으로 내 세션을 탈취하거나 다른 행동을 할 수 있기에 브라우저에서는 이러한 요청을 막는다. 이 떄문에 CORS가 필요한 것이다. 여기서 origin이란 특정 페이지에 접근할 때 사용되는 URL의 Schema(프로토콜), host(도메인), 포트를 말한다. 만약 이 3가..

    [Spring] Spring Validation 처리에 대해

    Spring Validation 처리에 대해 지금까지 Validation이거나 연관된 주제에 대한 내용을 여러번 정리했었다. @Valid를 이용한 Exception처리와 ThymeLeaf 처리 Validator 생성 시 주의해야 할 점, Invalid target 오류 ErrorSerializer에 대해 Custom Validator 적용하기 @NotNull, @NotEmpty, @NotBlank 그런데 읽다보니 ResponseEntityHandlerException를 통해서 처리하는 방법, BindingResult, Errors로 처리하는 방법 등 여러 선택사항이 있어 대체 이것들이 뭐길레 방법이 이렇게 있지 헷갈렸다. 그래서 정리해본다. 먼저 다음과 같이 진행해보았다. @NotBlank를 달아주었고 ..

    [Spring] @Transactional 에 대해

    @Transactional 에 대해 트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다. 애플리케이션을 개발하다보면 여러 쿼리를 날려야 하는 로직을 맞닥뜨리게 된다. 만약, 쇼핑몰에서 상품을 구매할 때 잔여 금액이 충분한지 확인하고 잔여 금액이 상품 가격보다 높을 때 구매 로직으로 넘어가야 하고 상품의 재고가 있는지 확인 후에 잔여 금액을 상품 가격만큼 감소시키고 로직을 종료해야 한다고 하자. 그런데 선택상품구매 단계에서 예외가 발생하여 상품이 없음에도 불구하고 있다고 판단하였거나 잔여 금액이 감소하는 찰나에 서버의 전원이 나가서 상품을 구매했는데도 회원의 잔여 금액이 감소하지 않을 수가 있다. 이를 위해 ..

    [Spring] @BeforeEach @BeforeAll @AfterEach @AfterAll 에 대해

    @BeforeEach @BeforeAll @AfterEach @AfterAll 에 대해 테스트를 실행 시에 반복되는 세팅 로직 등이 있을 때에 이 어노테이션들을 사용할 수가 있다. 코드로 바로 확인해보자 @SpringBootTest public class eachAllTest { @BeforeEach public void beforeEach() { System.out.println("BeforeEach"); } @BeforeAll static void beforeAll(){ System.out.println("BeforeAll"); } @AfterEach public void afterEach() { System.out.println("AfterEach"); } @AfterAll static void a..

    [Spring] Validator 생성 시 주의해야 할 점, Invalid target 오류

    Validator 생성 시 주의해야 할 점, Invalid target 오류 Custom 한 Validator 를 많이들 생성할 것이다. 이번에 나는 프로젝트를 수행 도중에 크게 막히는 부분이 있었다. Invalid target for Validator [com.ticket.captain.festival.validator.FestivalCreateValidator@5d035ab6]: com.ticket.captain.festival.dto.FestivalUpdateDto@3407ded1 바로 다음과 같은 오류였다. 이 오류가 발생할 당시에 코드는 다음과 같았다. // validate 메서드는 생략 @Component @RequiredArgsConstructor public class FestivalCre..

    [Spring] @NotNull, @NotEmpty, @NotBlank 에 대해

    @NotNull, @NotEmpty, @NotBlank import javax.validation.constraints 에 들어가있는 세 어노테이션에 대해 알아보겠다. @NotNull @Setter @Getter public class BoardDto { @NotNull String value; } @BeforeAll public static void setupValidatorInstance(){ validator = Validation.buildDefaultValidatorFactory().getValidator(); } @Test public void validationTest() throws Exception{ BoardDto boardDto = new BoardDto(); Set violation..

    [Spring] @Builder에 대해

    @Builder에 대해 public class Member{ private final String email; private final String name; public static class Builder{ private final String email; private final String name; public Builder email(String val){ email = val; return this; } public Builder name(String val){ name = val; return this; } public Member build(){ return new Member(this); } } private Member(Builder builder){ email = builder.em..

    [Spring] 클래스의 ToString에 대해

    클래스의 ToString에 대해 클래스에는 Object 클래스의 .toString() 메서드를 기본적으로 사용하기 때문에 따로 오버라이드를 해주지 않으면 해당 클래스의 해시코드가 나오게 된다. 클래스 내의 필드들을 toString 하고 싶다면 내 입맛대로 구현해줄 수도 있지만, 이를 도와주는 여러 메서드들이 있다. ToStringBuilder org.apache.commons.commons-lang3 의 ToStringBuilder가 있다. new ToStringBuilder(this).append("id",id)....toString() 뭐 이런식으로 append 하면서 쭉 붙여서 사용할 수도 있지만 해당 클래스의 필드 값이 변하면 계속 변경을 해주어야 하는 단점이 있다. ToStringBuilder...