분류 전체보기

    jpa에서 cascade를 써야하는 이유

    1. 연관관계를 맺고 있는 엔티티들의 저장을 위해선 영속화를 해줘야하는데, 일일이 영속화를 해주지 않아도 된다. 2. spring data jpa를 사용하는 경우에 영속화를 위해선 각 엔티티들을 타입으로 갖고 있는 JpaRepository가 필요한데, Service 클래스에서 해당 repository들에 의존하게 되고 많은 의존성을 관리하게 된다. cascade를 이용하면 service에서 repository로 향하는 의존성을 줄일 수 있다.

    좋은 설계를 위해 생각해보기

    1. dto를 어디까지 사용할 것인가? - service에 dto를 넘겨주는 것이 좋은 방법일까? - dto는 service쪽 패키지에 존재해야할까? controller쪽 패키지에 존재해야할까? 2. enum들은 어느 패키지에 속해 있어야하는걸까? - dto에서 enum을 써도 되는가? - domain에서 enum을 정의해서 사용하는건 어떤가? - domain에서 enum을 정의했을 때, 다른 패키지에서 enum을 사용하는 것은? 1. service쪽에 dto를 넘겨주는 것이 맞는 것 같음. 패키지 의존성을 그려보면 그래야만이 사이클 의존성을 제거할 수 있음 - controller에서 request로 받기만 하고, response로 넘겨주기만 한다면 controller(web)쪽에 있는 것이 좋음. 하지..

    JPA에서 발생하는 예외에 관하여(롤백)

    JPA를 사용하다 보면 NoResultException, NonUniqueResultException, EntityExistsException, OptimisticLockException, RollbackException 등 다양한 예외들이 발생할 수 있다. 이 때 우리는 어떤 자세를 취해야할까? 여러 관점 중 롤백 관점에서 알아보도록 하자. JPA 표준 예외(JPA에서 발생하는)는 모두 언체크드 예외이며, javax.persistence.PersistenceException의 자식 클래스이다. JPA 표준 예외는 '트랜잭션 롤백을 표시하는 예외'와 '트랜잭션 롤백을 표시하지 않는 예외'로 나눌 수 있다. (롤백을 표시한다는 것은 트랜잭션 상태에 롤백을 해야하는지 안해도 되는지 기록을 해놓는 것이다. 커..

    Enum

    enum을 써야하는 이유가 뭐가 있을까? - 클래스의 변수 타입을 enum으로 만들면, 해당 값으로 어떤 값들이 와야하는지 한정할 수 있다. - 컴파일 타임에 오류가 있는지 도움을 받을 수 있다.

    AcceptanceTest 정리(1) - SpringBootTest

    AcceptanceTest 정리(1) - SpringBootTest

    인수테스트를 할 때, 상속받을 AcceptanceTest 클래스에 대한 설명이다. 기본적으로 아래와 같이 작성이 되어있어야, api통신을 할 수가 있다. 이 코드는 최종 코드이고 하나씩 작성하면서 각 설정들이 왜 필요한지 알아보자. 1. 기본적인 인수테스트 클래스 User에 대한 인수테스트를 작성할 클래스이다. 아직 다른 클래스들은 존재하지 않는다. 이 클래스에 테스트를 작성해보도록 하자. 유저이름을 조회하는 인수테스트를 작성해보았다. @Test 어노테이션을 붙였기 때문에 테스트 실행이 가능하다. API호출은 RestAssured를 통해서 할 예정이다. 테스트를 실행해보겠다. 테스트는 실패했다. 아래 빨간 글씨를 보면 Connecttion refused: connect라고 나오고 바로 윗줄의 Test w..

    인터셉터 메서드 제어

    블로그 토이프로젝트 진행 중에 인증과 인가 부분을 인터셉터로 구현해서 진행하였다가 해결해야할 문제가 발견됐다. 글을 작성하는 URL은 POST /posts 글을 조회하는 URL은 GET /posts/글번호 글을 수정하는 URL은 PUT /posts/글번호 글을 삭제하는 URL은 DELETE /posts/글번호 여기서 로그인한 사람(USER)은 POST, GET, PUT, DELETE 요청을 모두 할 수 있다. 로그인하지 않은 사람(GUEST)은 GET을 요청할 수 있다. 문제는 여기서 발생한다. 요청 URL을 인가인터셉터를 태우기 위해서는 인가인터셉터.addPathPatterns()에 요청 URL을 등록해주어야한다. 글 작성, 수정, 삭제는 인가인터셉터를 통과해야하고, 따라서 인가인터셉터.addPathP..

    윈도우 git clone invalid path 에러

    윈도우 git clone invalid path 에러

    github에서 프로젝트를 clone 했더니 아래와 같은 에러를 만났다. 해결방법은 이렇다. 1. clone한 디렉터리로 이동한다. 2. 해당 디렉터리에서 터미널이나 git bash를 열고 아래 명령어를 차례대로 쳐준다. git config core.protectNTFS false git checkout -f HEAD 그러면 아래와 같은 메시지를 볼 수 있고, 디렉터리에는 제대로 clone이 된 것을 확인할 수 있다. 원인은 clone하는 파일 이름에 특수문자가 있어 윈도우 파일 시스템이 인식하지 못하는 파일이 있는 것이라고 한다.

    JdbcTemplate update 예시 (Spring Batch)

    JdbcTemplate update 예시 (Spring Batch)

    jdbctemplate로 db update하는데 있어 종종 궁금했던 점이 몇가지 있었다. update하고 나온 결과 int를 어떻게 처리하는게 좋을까? parameter로 넘어가는 값들의 valid는 어디서 어떻게 처리해주는 것이 좋을까? Spring Batch를 보던 중, getJobReposiotry().update(stepExecution); 이 눈에 띄었고, 이는 저 두 질문의 실마리가 될 수 있었다. 해당 메소드를 타고 들어가보니 SimpleJobRepository가 JobRepository를 구현하고 있었고, 해당 클래스는 여러 Dao를 가지고 있었다. 봐야할 건 update 메소드! 우선 여기서 dao에 넘길 값들의 validation을 체크하고 있었다. 오 그럼 dao를 호출하기 전에 va..