본문 바로가기

개발일지66

Offset과 Limit OFFSET과 LIMIT은 SQL 쿼리에서 페이징(paging)을 구현할 때 자주 사용하는 문법이다. 하지만 이들이 성능에 미치는 영향에 대해 이해하는 것이 중요하다. 다음은 OFFSET과 LIMIT을 사용했을 때 성능에 미칠 수 있는 영향이다.1. 큰 OFFSET 값의 성능 문제OFFSET은 결과 집합의 처음부터 지정된 수만큼의 행을 건너뛰기 위해 사용된다. 그러나 이 작업은 단순히 건너뛰는 것처럼 보이지만, 실제로는 데이터베이스가 OFFSET 이전의 모든 행을 여전히 읽어야 한다. 이 때문에 OFFSET 값이 클수록 성능이 저하될 수 있다.예를 들어, 다음과 같은 쿼리가 있다고 가정해보자SELECT id, data_value FROM tb_n_machine1 ORDER BY id OFFSET 1000.. 2024. 7. 22.
Mapstruct로 데이터 변환 적용하기 Mapstruct란? Spring Framework에서 개발할 때, 비즈니스 로직, 객체와 객체 간의 Mapping 등을 할 때 get, set을 일일이 넣어주는 것은 실수가 쉽고 생산성이 떨어진다. 특히나 Setter를 사용하는 것은 좋지 않다. Setter를 사용하면 안되는 이유는 Setter함수 호출을 통해 Entity의 값을 변경할 수 있다면, DB 데이터값 변경에 대한 히스토리를 코드를 보고 파악하기 어려워진다. 즉, Entity의 값을 변경한 의도를 파악하기 어렵다. get, set을 일일이 넣어주는 것을 대신 해주는 것이 Object Mapping 라이브러리이다. Object Mapping에는 여러 종류가 있는데,Mapstruct, ModelMapper, jmapper, orika 등이 있다.. 2022. 12. 16.
docker로 mariadb 컨테이너 생성후 외부에서 사용 시 에러 - Could not connect to localhost:3308 : unexpected end of stream, read 0 bytes from 4 (socket was closed by server) 나는 기존에 windows 에서 mariadb를 3307 포트로 사용하고 있었다. 기존 윈도우에 다운받은 mariadb를 유지한채 docker에서 mariadb를 다운 받았다. docker pull mariadb; 그러면 mariadb 이미지가 추가되었고 그러고 나서 docker run --name mariadb -d -p 3308:3308 --restart=always -e MYSQL_ROOT_PASSWORD=013174 mariadb 명령어로 3308 포트로 mariadb를 실행 시켰다. 그러면 컨테이너가 생성 됐다. 그 다음에 msa의 discovery-service(유레카), config, apigateway, order-service를 실행시키고 order-service의 h2-console에서.. 2022. 9. 30.
JPA 인덱스 걸기 참고로 findAllById 같은 경우에는 id는 pk라서 색인이 되있어서 성능상 문제가 없지만 findAllByPost, findAllByUser 같은 경우에는 인덱싱이 걸려있지 않아서 인덱스를 걸어줘야한다. 인덱싱을 걸지 않으면 일일이 테이블을 스캔하면서 post나 user를 찾아야하는데 인덱싱을 걸면 인덱스 한것만 찾으면 된다. 다음과 같이 인덱싱을 한다. @Entity @Table(name = "\"comment\"", indexes = { @Index(name = "post_id_idx", columnList = "post_id") // name : 인덱스 이름, columnList : 인덱스를 어떤 컬럼에 걸건지 }) @Getter @Setter @SQLDelete(sql = "UPDATE \.. 2022. 9. 26.
Exception 수천번 발생하는에러... postman으로 body에 다음 json값을 넣고 { "userName" : "test02", "password" : "test" } http://localhost:8080/api/v1/users/join 경로로 post 요청을 했다. 기존에 아이디가 있으면 DUPLICATED_USER_NAME 에러가 떠야하는데 java.lang.StackOverflowError: null 에러가 뜬다.. 아래 서비스 코드로 진행을 했다. 그런데 만약에 test03 이라는 유저가 db에 있으면 역시나 기존에 유저아이디가 있기 때문에 SnsApplicationException 에러가 발생합니다. 그런데 나는 java.lang.StackOverflowError: null 에러가 발생하고 at com.example.sns... 2022. 9. 10.
카프카 토픽 삭제할 때 문제 현재 아마 zookeeper와 kafka 만 킨것 같다 커넥트까지 킨지는 모르겠음... 현재 기존에 있던 orders와 my_topic_users 토픽을 삭제하려고한다. /c/Work/Kafka-practice/kafka 위치에서 $ ./bin/windows/kafka-topics.bat --bootstrap-server localhost:9092 --list 명령어로 토픽이름 확인하니까 잘나옴 __consumer_offsets connect-configs connect-offsets connect-status example-catalog-topic my_topic_users orders /c/Work/Kafka-practice/kafka 위치에서 $ ./bin/windows/kafka-topics.ba.. 2022. 9. 6.