본문 바로가기

개발/Java6

Repository 계층, 도메인과 영속성 엔티티 사이의 간극 메꾸기 안녕하세요. 이번 글에서는 미션 동안 제가 느낀 도메인과 엔티티의 좁혀지지 않는 간극, 그리고 이를 어떻게 대처하려 했는지에 대해 다뤄보려고 합니다. 먼저, 제가 사용한 도메인과 엔티티의 용어 정리를 하고 갈 필요가 있을 것 같습니다. 도메인: 실제 비즈니스 로직을 정의하는 영역 엔티티: DB 테이블의 정보와 1:1 매핑되는 영속성 엔티티 저는 도메인과 엔티티를 위와 같이 분리하여 생각했습니다. 도메인 객체는 흔히 말하는 객체지향 세상 속에서 살아가는 친구들이었고, 엔티티 객체는 DB 테이블의 컬럼 값들을 필드로 가지는, 일종의 DTO 같은 친구들이었죠. 문제점 여기서 문제는, 객체지향 세상과 RDBMS 세상의 패러다임이 불일치한다는 점이었고, 이는 곧 도메인 객체와 엔티티 객체 사이의 엄청난 괴리감으로.. 2023. 5. 21.
반환형이 void인 메서드, 어떻게 테스트할까? (with 행위 검증) 난관 서비스 계층에 대한 슬라이스 테스트를 작성하던 중, 저는 큰 난관에 봉착했습니다. 바로 void를 반환하는 메서드를 테스트해야하는 상황을 마주한 것이었는데요, 먼저 상황을 같이 볼까요? @Transactional @Service public class ProductService { private final ProductDao productDao; public ProductService(final ProductDao productDao) { this.productDao = productDao; } public void addProduct(final CreateProductRequest request) { final Product product = new Product(request.getName(),.. 2023. 5. 7.
public VS private + getter 미션을 하다가, A 도메인이 가지고 있는 상수의 값을 B 도메인에서 필요로 하는 경우가 있었습니다. 지금까지 상수는 당연히 private static final 로 작성해왔는데, 위의 경우때문에 꽤 큰 고민에 빠졌습니다. 결론적으로 제가 생각한 선택지는 크게 3가지가 있었습니다. B 도메인에도 A 도메인이 가지고 있던 상수를 정의해서 사용한다. 이 경우는 좋은 판단이 아니라고 생각했습니다. 해당 상수가 가지는 의미가 B 도메인이 가지는 책임과는 거리감이 있다고 느꼈기 때문입니다. 상수를 도메인 필드로 바꿔서 getter를 연다. 이 경우도 썩 내키진 않았습니다. 이런 형태로 하면 블랙잭 게임 요구사항과는 다른 값(딜러의 이름이 더 이상 “딜러”로 한정되지 않는 것처럼!)들이 들어올 수 있고, 이는 요구사.. 2023. 4. 2.
취약한 기반 클래스 문제 문제의 발단 레벨 1 마지막 미션인 체스 미션을 진행하다가, 리뷰어에게 이런 피드백을 받은 적이 있습니다. 추상 메서드가 아닌 메서드를 override하는 것은 코드의 예측가능성이나 일관성의 측면에서 위험합니다. 당장은 문제가 없어보이지만, 코드 중복을 이런 식으로 처리하다보면 취약한 기반 클래스 문제를 맞이하게 될 거에요. 이 리뷰를 받게 된 발단은 이렇습니다. 체스 기물 클래스의 최상위 계층인 Piece, 그리고 그것을 상속하는 각각의 구체 기물들이 있는 상황이었죠. 그런데 도메인 로직을 작성하다보니, Piece로 업캐스팅된 구체 클래스가 Pawn인지 확인할 필요가 있었습니다. 다만, 주변의 여러 크루들로부터 “instanceof 연산자는 좋지 않다!” 라는 말을 자주 듣다 보니, 어떻게 해야 ins.. 2023. 3. 26.
JDBC, DB 접근을 위한 자바 표준 인터페이스 JDBC란? JDBC(Java Database Connectivity) 먼저 개념적인 의미부터 살펴볼까요? JDBC는 이름에서도 알 수 있듯이, 자바를 통해서 데이터베이스에 접근할 수 있도록 도와주는 자바 표준 API 입니다. 즉, JDBC API를 통해 자바 코드로 데이터베이스를 연결할 수 있고, SQL 쿼리문을 보내서 쿼리를 실행할 수도 있습니다. 여기서 주목해볼 점은 JDBC가 자바의 표준 API 라는 점입니다. 현존하는 자바 DB 관련 기술들 중, 인기 있는 SQL Mapper나 ORM 기술들 대부분 Low-Level 단에서는 JDBC API가 사용되고 있습니다. 이처럼 JDBC는 자바의 표준 인터페이스로서 정말 다양한 DB 기술들에 사용되고 있는데요, 정말 많이 사용되고 있는 JDBC, 과연 어.. 2023. 3. 12.