본문 바로가기

study20

헥사고날 아키텍처 얕게 공부한 뒤 느낀점 - 기본이나 잘하라 어제 내 프로젝트 구조에 대해 글을 작성한 뒤로, 헥사고날 아키텍처에 대한 여러 글을 읽고 예제들을 살펴보며 느낀점은 '이게 도대체 레이어드 아키텍처랑 뭐가 다른거지?' 였다. (물론 내 기존 코드에는 문제가 많다. 기존 코드에 문제가 없다고 말하려는게 아니다. 고칠 점은 당연히 고쳐야한다.) 물론 다르다. 다른데, 그게 막 헥사고날 아키텍처는 위대하고 레이어드 아키텍처는 별로다라고 말할만큼 다른가?이다. 결국 요청 처리 흐름은 큰 틀을 벗어나지 않는다. API로 요청이 들어오면 도메인 로직을 수행하는데, 도메인 로직 수행을 위해선 데이터베이스에 뭔가 요청해야하고, 이렇게 저렇게 작업을 한 뒤에 필요하면 다시 뭔가 값을 반환한다. 그럼에도 불구하고 둘의 차이는 있는데, 내가 생각한 레이어드 아키텍처와 헥.. 2023. 12. 11.
임피던스 불일치 문제 해결을 위한 생각 + 현재 코드 개선할 점 찾기 고민의 시작은 '테이블 구조와 코드 구조의 불일치에서 발생하는 차이를 어떻게 해결해야할까?' 였다. 현재 내가 진행 중인 프로젝트의 게시판 테이블 구조는 다음과 같다. 이렇게 테이블 구조를 잡고 상속을 구현한 것까지는 문제가 없었다. 아니 사실은 똑같은 고민을 야기할 문제가 있었는데 이걸 인지하지 못했다고 하는게 더 적절할 것 같다. 그런데, 댓글을 적용하려고 하니 문제 상황을 알 수 있었다. 댓글까지 적용한 테이블 구조는 다음과 같다. 문제는 이걸 코드로 표현할 때 발생했다. Board는 추상 클래스다. 코드 단위에서 요구 사항을 처리할 때는 FreeBoard, Review, Recruitment 세 개의 엔티티를 사용한다. 요구 사항에 해당되는 실질적인 객체는 위의 세 객체이기 때문에, 이들을 추상위.. 2023. 12. 9.
Querydsl 적용한 Repository에 @DataJpaTest 적용하기 @DataJpaTest를 사용하면 Querydsl이 적용된 Repository가 @Autowired되지 않는다. 기본적으로 @DataJpaTest는 JPA와 관련한 설정만 적용해주기 때문이다. 그러나 Querydsl을 사용하면 JpaRepository에 추가적으로 @Repository 애너테이션을 이용해 Spring Bean으로 등록한 QRepository를 적용시켜줘야 한다. @DataJpaTest는 Bean등록을 하지 않기 때문에 Repository에 적용될 QRepository의 등록이 이루어지지 않고, 따라서 @Autowired도 실패하는 것이다. 그럼 Bean을 등록해주면 해결되지 않을까? Bean 등록을 위해서는 Configuration을 이용해야 한다. 기본적으로 Spring Context에.. 2023. 12. 8.
@BeforeEach vs @BeforeAll - 한 테스트 클래스에 여러 개의 테스트가 있으면 반드시 동시에 돌려봐야 하는 이유 / @TestInstace 테스트를 하기 전에, 뭔가 밑작업을 해놓고 싶을 수 있다. 그 때 사용하는 대표적인 애너테이션 두 개가 바로 @BeforeEach와 @BeforeAll이다. 이름만 봐도 알 수 있듯이, @BeforeEach는 각 테스트 메서드가 수행되기 전에 매 번 수행되고, @BeforeAll은 전체 메서드가 수행되기 전에 한 번 수행된다. 이번에 Spring Security 통합 테스트를 진행하면서, @BeforeAll을 사용해 볼 기회가 생겨 기록으로 남긴다. 기존에 사용하던 테스트 set up 코드는 아래와 같았다. @BeforeEach void setUp(){ String email = "jk@gmail.com"; String password = PasswordEncoderFactories.createDeleg.. 2023. 12. 8.
테스트를 실행은 하고 싶은데 빌드에서는 제외하고 싶을 때 통합 테스트를 진행하면서 가장 걱정되는 부분은 배포 및 배포 자동화를 진행했을 때는 이 테스트들이 수행되면서 데이터베이스를 건들 것 같다는 점이었다. 또한 통합 테스트 메소드가 많아지면 많아질 수록 빌드에는 더욱 많은 시간이 들어갈 것이었다. 그렇다고 통합 테스트를 해보지 않을 수도 없었다. Spring Security가 잘 적용되는지를 알아봐야했다. 따라서 빌드에서는 해당 테스트를 빼고, 대신 테스트가 수행되게는 하고자 시도해봤다. 가장 먼저 수행해 본 방법은 build.gradle에서 아예 해당 테스트가 빌드에서 빠지게 설정한 방법이었다. 이렇게 설정하고 테스트를 수행하니 다음과 같은 결과가 나왔다. 우리가 수행하는 test는 기본적으로 gradle 기반으로 수행된다. 그런데, gradle빌드에서 해.. 2023. 12. 7.
반응형