본문 바로가기

분류 전체보기93

(Spring/Redis/@Cacheable) Spring Cacheable로 캐싱기능 적용 Spring Redis @Cacheable Spring Cacheable 쿠팡 메인페이지의 상품섹션 일부입니다. 유저 만족도에 중요한 응답속도를 높히기 위해 여러 영역에 여러방법으로 캐시가 적용되어 있을 것으로 예상해봅니다. Spring 환경에서는 캐시적용에 Spring에서 제공하는 @Cacheable 인터페이스를 사용할 수 있습니다. @Override @Cacheable(value = "example", keyGenerator = "customKeyGenerator", cacheManager = "cacheManager") public List example(Param p1, Praram p2) ... } : 위 설정으로 특정 메소드, 파라메터 기반으로 캐시를 생성합니다. ex) 상품목록 파라메터를 기.. 2020. 3. 21.
(Spring/JPA) Spring transaction logging / jpa entity manager logging Spring transaction logging jpa entity manager logging logging: level: org: hibernate: SQL: debug type: descriptor: sql: BasicBinder: debug springframework: transaction: DEBUG orm: jpa: DEBUG application.yml 파일에 설정 설정전 ↓ 보이는 transaction 관련 로깅은 springframework.test 에서 제공하는 로깅. 설정후 ↓ transaction 생성/ 종료/ 참여 여부 및 전파 유형, 고립레벨 로깅 EntityManger 생성 / 종료 로깅 생성되는 쿼리 로깅 2020. 3. 11.
(JPA) JPA 성능개선이란? 성능개선 적용기 (fetch join/BatchSize) JPA 성능개선 적용기 fetch join BatchSize 이전글: jpa 성능개선 목록 ↓ https://lion-king.tistory.com/entry/JPA-Performance-Improvement-list 마이페이지 개편 중 구매내역 api를 호출해보니 응답속도가 매우 느린 이슈가 있었습니다. (서비스 메소드만 테스트 하였는데도 1분이상..) 테스트 계정이어서 구매내역이 많은 탓도 있었겠지만 개선이 필요할 것 같아 실행되는 쿼리를 확인해보니 엄청난 수의 select 문이 실행되는 것을 확인할 수 있었습니다. 업무시간 외에 이것저것 테스트를 하였고 fetch join과 BatchSize를 사용해서 성능개선 되는 과정을 기록에 남깁니다. (개선 전 77초 -> 개선 후 2초) 기존 Entity .. 2020. 3. 9.
(JPA) JPA 성능개선이란? 성능개선 목록 (N+1문제/read-only/Non-Transactional..) JPA 성능개선 목록 1. N+1 문제 개선 JPA 사용시 성능상 가장 조심해야하는 것이 N+1 문제이다. N+1 문제는 연관관계 설정이 되어있는 Entity 조회시 연관된 다른 Entity를 가져오기 위해 조회한 수 만큼 다시 SQL문이 수행되는 문제를 뜻한다. 예시) : select 문이 여러번 사용되는 것이 보이시나요? 위 쿼리는 한 Entity를 조회했는데 연관된 Entity들을 가져오려고 생성되는 쿼리들 입니다. 성능이 많이 느렸습니다 - 해결방법 a. (fetch = FetchType.EAGER) :FetchType을 EAGER 로 변경 (즉시 로딩 전략) : Entity 조회시점에 Mapping된 Entity를 join 문으로 함께 가져온다 b. JPQL fetch join 사용 (JPQL의.. 2020. 3. 7.
(AWS/CloudWatch) EC2 인스턴스 디스크 사용량 알림/모니터링 구현 EC2 인스턴스 디스크 사용량 알림 모니터링 Node 서버에서 root 경로에 로그가 제한없이 계속 쌓여 용량을 다 사용해버려서 배포가 막히는 이슈가 발생하였습니다... 따로 마운트 해준 EBS 볼륨에 쌓는것이 아니었나봅니다 ㅠㅠ 제가 Node 서버 EC2 인스턴스와 로드밸런서 세팅을 다 해주기는 했지만 Node를 개발하지도 않고 많이 신경을 쓰지못해서 조금 큰일이 터졌네요 먼저 근본적인 문제를 해결하고 추후 이런일을 방지하기위해 모니터링 시스템을 구축하기로 하였습니다. AWS CloudWatch를 통해 디스크 사용량을 모니터링 하려고 하였으나 관련 기능을 도저히 찾을 수 없어 AWS 인프라 파트너사에 문의하였습니다. 답변요약 ↓ aws 자체 서비스로는 cloudwatch agent를 이용하는 것 외에는.. 2020. 2. 28.
(Spring Controller Logging) Spring에서 http request 로깅하기 - 2 https://lion-king.tistory.com/entry/Spring-http-request-logging-with-aop-1 (Spring Controller Logging) Spring에서 http request 로깅하기 - 1 Spring Controller Logging - Spring에서 http request 로깅하기 @GetMapping("/{code}") public ResponseEntity example( @PathVariable(name = "code") String code { final String requestUri = request.ge.. lion-king.tistory.com 이전 글에서 AOP를 활용하여 http request를 로깅하기로 결정하였습니다. AOP에 .. 2020. 2. 21.
(Spring/Spring Boot) transactional annotation 속성 격리 isolation @Transactional isolation 옵션 종류 및 설명 * Isolation (= 격리) : 트랜잭션의 격리 수준을 설정하는 속성 사실 @Transacitonal의 속성일 뿐만 아니라 기본적으로 트랜잭션은 4단계의 격리 수준이 존재합니다. 이 격리수준을 설정하는 속성이 isolation 속성 입니다. Isolation Level Level 1. READ UNCOMMITED (커밋되지 않은 읽기) : Dirty Read / Non-repeatable read / phantom read 발생가능 Level 2. READ COMMITED (커밋된 읽기) : Non-repeatable read / phantom read 발생가능 Level 3. REPEATABLE READ (반복 가능한 읽기) : ph.. 2020. 2. 19.
(Spring/Spring Boot) transactional annotation 속성 전파 propagation @Transactional 이란? : https://lion-king.tistory.com/3?category=854359 (Spring Boot) @Transactional 이란? / @Transactional에 대하여 @Transactional StackOverflow 질문중 UserNameNotFoundException 발생시 delete method가 실행되지않는다는 질문에 답을 하였습니다. https://stackoverflow.com/questions/52619924/how-to-execute-transaction.. lion-king.tistory.com 이전글과 이어서 @Transactional을 사용할 때 고려해야 할 속성들에 대해 알아보겠습니다. * Propagation (= 전파) :.. 2020. 2. 1.
(MySQL / MariaDB) Too many connections 해결 (max connections 오류) Too many connections 해결 얼마전 테스트 환경(beta)에서 사용하는 DB에 연결이 계속 실패되는 현상이 발생하였습니다. "Too many connections" com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Too many connections 베타 DB인데 이게 무슨일이지? 하고보니 다들 로컬에서 커넥션을 유지시켜놓고 해제하지 않아 커넥션이 엄청 잡혀있는 상태였어요. (MSA 환경이어서 서비스마다 DB커넥션을 유지하기 때문에 한명당 6~7개 이상 잡아먹고 있음..) 베타 DB는 성능이 좋은 서버를 쓰지 않았기 때문에 버티지 못한것이었습니다.. ㅠㅠ 사용중인 제품은 AWS RDS MariaDB를 사용하고있고 .. 2020. 1. 19.