해당 내용은 INFCON2023의 다시보기를 보고 요약하였습니다.
[무료] 인프콘 2023 다시보기 - 인프런 | 강의
성장하는 IT인들의 축제, 인프콘 2023에서 진행된 오프닝 및 발표 세션을 영상으로 다시 보실 수 있습니다., ✅ 확인해주세요 이 콘텐츠는 2023년 8월 15일 화요일 진행된 인프콘 2023 다시보기 녹화
www.inflearn.com
리팩토링 필요성
- 분리되지 않은 서비스 레이어
- 동일한 쿼리 중복 사용
분리되지 않은 서비스 레이어가 문제
- 테스트하기 어려움
- 확장성 저하
- 비즈니스 로직 + 데이터 접근 혼재
- 이를 해결하기 위해 서비스레이어에서 DB접근을 담당하는 영속성 레이어를 분리하기로 함.
동일한 쿼리 중복 사용
- 동일한 SELECT 를 사용하는 문장은 VIEW를 사용해서 최적화를 수행하였음.
리팩토링 전후 비교했을 때
- API 줄 수가 절반으로 줄어듬
- WRK2 툴을 이용하여 성능 측정을 할 수 있음.
- 리팩토링 이후에 표준편자카 큰 문제 발생 -> 이는 성능 양극화가 심하다 -> ORM의 캐싱 때문에 이러한 결과가 나타남.
TypeORM
- 타입스크립트의 ORM
- NodeJS, React Native등에서 사용 가능
- Active Record, Data mapper pattern
TypeORM에서 영속성 컨텍스트는 어디서관리할까?
- Spring DATA JPA 와 마찬가지로 Entity Manager라는 곳에서 관리한다.
TypeORM 의 특징
- 1차캐시
- 변경 감지
- 지연 로딩
- 트랜잭션에 의한 쓰기 지연
Query Runner?
- Connection pool에서 한개의 연결을 가져옴
- Connection pool 을 DB에서 지원하지 않는다면, 똑같은 연결을 전체적으로 사용.
아쉬운점
1. Prepared statement 미사용 부분 존재
Prepared statement
- SQL문의 템플릿
- 매 실행마다 템플릿 안의 특정 값이 대체됨
- SQL Injection 공격 방지
- ex) INSERT INTO user (id, pw) VALUES(?,?)
2.테스트의 부재
- 테스트 코드 작성 경험자 부재
- 테스트의 중요성 간과한 채로 개발에 집중
결론
- 리팩토링이 어디에 왜 필요한지를 살펴보고 그 부분을 어떻게 개선할지 고민해야한다.
- 테스트코드의 중요성 강조