전체 글(130)
-
이번주 이슈
1. 검수자 배정 시, 트랜잭션 타임아웃 발생. 해당 상품은 연재 상품으로 마더와 차일드 관계로 이뤄짐. 500회차가 넘는 연재 상품. 로그를 보니 실행 쿼리가 2000회가 넘어가다가 뻗었다. 개별 쿼리 실행 속도가 길진 않았지만 워낙 많은 쿼리가 실행되다보니 트랜잭션 최대 시간인 30초를 초과하였다. 왜 이렇게 쿼리가 많이 실행되는지 이전 히스토리들을 보았는데 1000개를 넘는 경우가 간혹 있긴 했지만 수백개 내에서 실행되었다. 소스를 분석했다. 차일드 상품마다 반복문을 순회하며 쿼리를 실행하고 있었다. 반복문으로 회차마다 개별적으로 insert, update 등이 실행되다보니 500 * n번 실행된 것이다. 검수자를 배정할 때, 대개 많아봤자 100개 정도의 회차 정도가 최대였기에 그간 문제가 없었던..
2023.11.16 -
개발지식 블로그
https://inpa.tistory.com/ Inpa Dev 👨💻 성장 욕구가 가파른 초보 개발자로서 공부한 내용을 쉽게 풀어쓴 기술 블로그를 운영하고 있습니다. inpa.tistory.com
2023.02.24 -
ZonedDateTime
https://velog.io/@lsb156/Instant-vs-LocalDateTime Java8+ Instant vs LocalDateTime 각 사용방법 Java 8 이상되면서 Date, Time, Timestamp등이 레거시가 되어버리고 LocalDateTime, ZonedDateTime, LocalTime, Instant 등등이 나왔지만 어디에 적절하게 사용되어야 하는지 적절하게 구분하기 휘애 블로깅을 했씁니 velog.io
2023.02.23 -
@JoinColumn(nullable) & @OneToOne(optional)
@JoinColumn(nullable = false, name = "notify_id") @OneToOne(fetch = FetchType.LAZY, optional = false) lateinit var notify: NotifyEntity JPA의 앤티티 셋팅을 하다가 특이한 점을 발견하였다. 1대1의 관계를 갖고 있고, FK를 필수로 갖게 하기 위해, @JoinColumn의 nullable 옵션을 false로 설정하였다. 그런데 @OneToOne의 옵션 중 optional 이란 특성을 알게 되었다. 일단 각각의 설명은 다음과 같다. @JoinColumn의 "nullable = false"에 대한 설명이다. @JoinColumn의 "nullable = false" (Optional) Whether ..
2023.01.25 -
Controller & Service & Repository role setting
1. 컨트롤러(Controller) - 클라이언트에서 요청한 데이터 검증 - 클라이언트 응답 DTO(Data Transfer Object) 생성 2. 서비스(Service) - 비즈니스 유효성 검증 - 비즈니스 로직 3. 리포지토리(Repository) - DB 조회 컨트롤러, 서비스, 리포지토리의 역할에 대해 논의하였다. 컨트롤러의 역할이 많이 달라졌다. 이전에는 들어온 요청을 서비스로 전달하는 역할만을 가졌다면, 이제는 클라이언트가 요청한 데이터의 유효성을 검증하고, 서비스가 DTO를 만들어 리턴하는 것이 아니라, 앤티티로 리턴하고, 컨트롤러에서 DTO를 만든다. 이렇게 한 이유는, 컨트롤러와 서비스의 역할을 명확히 구분하기 위함이었다. 서비스는 비즈니스 로직만을 담당하게 하고, 컨트롤러는 서비스가 ..
2023.01.19 -
order by (PostgreSql, MariaDB)
queryDsl에서 조회 쿼리와 count() 쿼리의 공통 부분을 같이 쓰려고 작업하던 중 발견하게 되었다. PostgreSql은 count() 쿼리에서 order by 구문이 있으면 group by가 필요하다는 오류가 발생한다. count() 쿼리에서 order by 구문이 필요하지 않지만, MariaDB에서는 order by 구문이 있어도 쿼리가 실힝되었던 터라 이상함을 느꼈다. -- PostgreSql -> SQL Error [42803] select count(*) from test order by id desc ; -- MariaDB -> 실행 select count(*) from test order by id desc ; 검색하고 여러 방법을 시도해본 결과, MariaDB에서는 테이블 내의 컬..
2023.01.18