Programming/Study22 계층별로 분리해서 DTO를 사용하기로 한 이유와 결과 우리는 DTO를 통해 각 계층별 데이터의 전송을 수행한다. 클라이언트에서 서버로 보내는 정보를 JSON 데이터 타입으로 활용하기 위해 DTO를 사용하기도 하고, API 계층에서 애플리케이션 계층으로 정보를 넘겨줄 때 DTO를 사용하기도 한다. 아니면, 클라이언트에서 서버로 보내준 DTO를 그대로 애플리케이션 계층까지 내리는 경우도 있다. 이번에 헥사고날 아키텍처를 프로젝트에 적용해보는 시도를 하면서, DTO에 대해 고민해봤고 그 생각을 좀 정리해보고자 한다. DTO의 역할 위에서는 언급하지 않았지만, DTO의 역할과 책임에 대해서도 DTO는 Data Transfer Object의 줄임말이다. 말 그대로 '데이터를 전송하는 객체'다. 즉, DTO가 지닌 책임은 데이터의 전송이다. 그런 DTO에게 데이터의 .. 2023. 12. 13. 헥사고날 아키텍처 얕게 공부한 뒤 느낀점 - 기본이나 잘하라 어제 내 프로젝트 구조에 대해 글을 작성한 뒤로, 헥사고날 아키텍처에 대한 여러 글을 읽고 예제들을 살펴보며 느낀점은 '이게 도대체 레이어드 아키텍처랑 뭐가 다른거지?' 였다. (물론 내 기존 코드에는 문제가 많다. 기존 코드에 문제가 없다고 말하려는게 아니다. 고칠 점은 당연히 고쳐야한다.) 물론 다르다. 다른데, 그게 막 헥사고날 아키텍처는 위대하고 레이어드 아키텍처는 별로다라고 말할만큼 다른가?이다. 결국 요청 처리 흐름은 큰 틀을 벗어나지 않는다. 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. 이전 1 2 3 4 5 다음 반응형