게시판 프로젝트를 진행하면서 코드의 중복과 Null 처리를 어떻게 해야할 지 고민했다. 게시판의 전체 게시글과 특정 회원이 작성한 게시글을 뿌려주는 Service layer의 로직이 거의 유사했다. 단지 SQL문에 memberId를 where 조건문에 포함시키는 여부만 달랐다. 코드의 중복을 피하기위해서 기존의 전체 게시글을 뿌려주는 메서드에 memberId만 추가해서 구현하기로 결정했었다. Service 레이어의 메서드는 재사용이 가능해졌지만 한 가지 문제점이 있었다. 바로 null처리였다. 위 메서드를 사용하는 컨트롤러 메서드는 2개다. 문제는 첫 번째 컨트롤러다. memberId에 null을 건내주고있다는 점인데 저 부분이 상당히 마음에 걸렸다. memberId에 Null을 주면 전체 게시글을 조회..
Auto Flush 조건 지금까지 알고있었던 자동 flush 조건은 셋 중 하나였다. em.flush() 호출 트랜잭션 Commit 시점 JPQL 호출 직전 정말 JPQL 호출 직전 flush 할까? 눈으로 확인해보자. JQPL 호출 직전 flush 한다면 쿼리의 순서는 INSERT -> SELECT -> SELECT 순이여야한다. 실제 쿼리를 확인해보자. 예상이 아주 기분좋게 빗나갔다. 실제 순서는 SELECT -> INSERT -> SELECT 순이다. 이 이유는 Hibernate 공식 가이드에서 찾아볼 수 있다. Hibernate ORM 6.2.6.Final User Guide Fetching, essentially, is the process of grabbing data from the data..
문제상황 : 댓글에 좋아요가 눌린 뒤 댓글이 삭제되면 좋아요도 DB에서 삭제돼야했지만 삭제가 되지않았다. 외래키를 참조하고있기 때문에 삭제를 할 수 없다는 에러다. 먼저 Entity는 아래와 같다. @Entity @Getter @ToString @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Comment extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long commentId; // 댓글 식별자 @Column(nullable = false) private String content; // 댓글 내용 @ManyToOne(fetc..
GitHub - DiUS/java-faker: Brings the popular ruby faker gem to Java Brings the popular ruby faker gem to Java. Contribute to DiUS/java-faker development by creating an account on GitHub. github.com Java에서 테스트데이터를 편하게 만들때 사용할 수 있는 라이브러리다. 현재 중고차 판매시스템에서 중고차 100만대 회원 50만건을 만들어보려한다. Faker 사용법은 위 링크를 참조하면 간단하게 사용할 수 있다. 문제점 1 커넥션 비용 @Test void createCar() { for (int i = 0; i < 300000; i++) { Car car..
Exception Performance Cost 예외가 성능에 미치는 영향을 정리한 글이다. Performance Effects of Exceptions in Java | Baeldung Java exceptions are considered expensive and shouldn't be used for flow control. This tutorial will prove that this perception is correct. www.baeldung.com 결론부터 Since throwing and handling exceptions is expensive, we shouldn't use it for normal program flows. Instead, as its name implies, exc..
GitHub - songhaechan/Black_Jack Contribute to songhaechan/Black_Jack development by creating an account on GitHub. github.com 자바를 학습하고 처음으로 진행한 사이드프로젝트 BlackJack은 재미있는(?) 카드게임이다. 규칙도 정말 단순하고 구현하는데 그리 오래걸리진 않았다. 그래서인지 나의 문제점도 알지 못했고 돌아가면 그만이지 라는 아주 못된 생각을 하며... 코드리뷰를 받았다. 절대 코드는 돌아가면 그만이지라는 생각으로 작성해서는 안된다. 코드는 유지보수하기 쉬워야하며, 새로운 요구사항에 빠르게 반응할 수 있어야한다. 처음엔 이런 말 조차 와닿지가 않았다. 왜냐고? 유지보수를 할 필요성을 전혀 느끼고..