일단 해보고, 아니면 뭐

실패했어도 배웠으면 실패가 아냐.

무한한 개발세계 여행기

springboot 3

Concurrency Problem 올바른 대응방법 (1) - Lock

동시성 이슈 문제를 해결했던 업무 회고를 작성했던 지난 포스팅에 이어서 동시성 이슈 문제의 해결 방법 중 하나인 Lock이라는 거에 대해서 좀 더 자세히 알아보고자 한다. 지난 포스팅에서 나는 동시성 이슈를 JPA의 Lock Annotation을 이용하여 대응을 하였다. 동시성 이슈에 대해서 공부 하다보면 대응을 위해서 Redis 데이터베이스를 썼다는 이야기가 많이 나온다. 대략적인 이유를 보면 '단일 스레드 처리 방식과 데이터 잠금의 차이'라고 나와있다. 나는 그래서 Lock을 사용하고자 했던 거고 이번 기회에 Lock에 대해 더 공부를 하게 되었다. Lock? Lock이란 트랜잭션 처리의 순차성을 보장하기 위한 방법으로, 같은 데이터에 동시에 접근하는 경우 데이터의 일관성과 무결성의 유지를 위해 사용..

Programing/Java 2022.09.09

JPA Dynamic Query (1) - Querydsl 도입기

회사에 SaaS Portal을 개발을 진행한 지 반년이 막 넘어갈 때쯤 일 것이다. 기획과 개발 초기에는 프로젝트 규모가 굉장히 작았기 때문에 순수 Spring Data JPA만을 활용하여 데이터 CRUD 메서드 쿼리를 활용했는데, 규모가 커지면서 테이블 스키마도 복잡해지고, 조회 쿼리가 점점 복잡해지면서 JPA @Query Annotation을 이용하여 JPQL을 사용하는 일이 많아지고 직접 쿼리를 작성하는 일이 많아졌는데, 그러다 보니 스키마가 약간 변경이 될 때마다 수정해야 하는 쿼리들과 로직들이 많아지고 쿼리를 '직접' 쓰다 보니 수정점을 찾기가 힘들어지고 결국엔 수정점을 놓쳐 에러를 많이 내곤 했었다. 그래서 나는 '객체지향 쿼리 언어'인 Querydsl을 도입하게 되었다. 도입에 타당한 근거가..

Programing/Jpa 2022.06.05

WAS (Spring Boot) - DB 성능 개선과 최적화 (4) - RedisTemplate

드디어 마지막 시간이다. 이번에는 Redis 데이터베이스와 연동하여 사용 중인 RedisTemplate에 대해서 정리해보고자 한다. RestTemplate는 이름에서도 보이다시피 Redis Command를 도와주는 Template이다. 결론부터 보자면 나는 이렇게 사용중이다. 천천히 확인해보자 일단 설정값들을 확인해 보기 전에 Connection Pooling의 필요성 여부를 확인해 봐야 한다. Redis는 서버 자체가 Single Thread 기반이기 때문에 WAS 측에서 Connection Pooling을 한다고 하더라도 성능 상의 이점이 두드러지지 않는다. 왜냐면 Connection Pooling이라는 행위가 일단 Connection을 만들어 놓는 거기 때문에 그만큼에 메모리 자원을 점유하게 되기 ..

Programing/Spring 2022.06.02