본문 바로가기

Spring38

Web Server / Web Application Server 차이정리 웹 서버, 웹 애플리케이션 서버(WAS)의 차이 > 웹 서버는 정적 리소스(파일)을 다루는데 특화 > WAS는 애플리케이션 로직을 실행하여 동적으로 움직이는데 특화 [각 서버에 대한 설명] 해당 특징으로 인해 보통 웹 시스템 구성은 아래와 같이, WAS와 DB로 이루어진다. WAS는 정적 리소스, 애플리케이션 로직 모두 제공이 가능하기 때문이다. 하지만! 아래와 같은 이유로 인해 해당 구성으로만 진행하기엔 무리가 있다. 1. WAS가 너무 많은 역할을 담당, 서버 과부하 우려됨 2. 가장 비싼 애플리케이션 로직이 정적 리소스 때문에 수행이 어려울 수 있음 3. WAS 장애시 오류 화면도 노출 불가능 그런 이유로 실제 일반적인 구성은 아래와 같이 진행한다. 1. 정적 리소스는 웹 서버가 처리 2. 웹 서버.. 2022. 12. 7.
Transactional / 동시성 제어 / DB Replication (Master-Slave) 관련정보 Transactional 관련정보 1. saveandflush는 @Transactional을 대체할 수 있다. Transational은 작업단위가 끝날 시 DB에 flush를 내린다. saveandflush는 이와 같은 작업을 해주는 것이기에, flush만 생각하고 있다면 이를 대체할 수 있다. 2. Transactional 격리레벨 1. Read Uncommitted - 거의 사용하지 않음 - 트랜잭션에서 처링 중인 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용 2. Read Committed - 커밋되어 확정된 데이터만 다른 트랜잭션이 읽도록 허용함으로써 Dirty Read를 방지 3. Repeatable Read - 트랜잭션 내에서 쿼리를 두 번 이상 수행할 때, 첫 번째 쿼리에 있던.. 2022. 11. 26.
Querydsl 관련정보 모를 때마다 꼭, 다시 한번씩 복기하면서 이해하자. 자주 사용해야 머리에 들어오는 법이다. Querydsl vs JPQL @Test public void startJPQL() { //member1을 찾아라. String qlString = "select m from Member m " + "where m.username = :username"; Member findMember = em.createQuery(qlString, Member.class) .setParameter("username", "member1") .getSingleResult(); assertThat(findMember.getUsername()).isEqualTo("member1"); } @Test public void startQuer.. 2022. 11. 21.
페치조인 (Fetch Join) > SQL조인종류는 아니다. > 연관된 Entity나 컬렉션을 SQL한번에 함께 조회하는 성능 최적화 방법이다. ex) member를 조회할 때 연관된 team을 한번에 끌고와서 join한다 => 핵심 : 연관된 엔티티를 한번에 최적화해서 조회! ※ 쿼리가 2번 날아갈 상황을 쿼리 1번으로 조회할 수 있게 해준다. ※ 지연로딩으로 설정했어도, 즉시 조회하게 된다 (LAZY무시) Join, Fetch Join 차이점 [ 일반 Join ] - Fetch Join과 달리 연관 Entity에 Join을 걸어도 실제 쿼리에서 SELECT 하는 Entity는 오직 JPQL에서 조회하는 주체가 되는 Entity만 조회하여 영속화 - 조회의 주체가 되는 Entity만 SELECT 해서 영속화하기 때문에 데이터는 필요하.. 2022. 11. 7.
JOIN종류 / ON절의 의미 / Query 조회기능 최적화 팁 [참조사이트] https://jaenjoy.tistory.com/7 https://superman28.tistory.com/23 [JOIN 종류] 예제 테이블 mysql> select * from demo_people; name phone pid Mr brown 01225 708225 1 Miss Smith 01225 899360 2 Mr Pullen 01380 724040 3 mysql> select * from demo_property; pid spid selling 1 1 Old House Fram 3 2 The Willows 3 3 Tali Trees 3 4 the Melksham Florist 4 5 Dun Roamin 1. 기본 JOIN (= INNER JOIN) - 기본적으로 JOIN은 교집.. 2022. 11. 7.
Elasticsearch란? (작성중) 현재 나는 백엔드 조회/검색 성능 최적화 작업을 진행중이다. (기간 : 11월 4일 ~ 12월 2일) 최종목표는, 대용량 데이터 핸들링 속도를 최적화하는 것이며, 목표 데이터수는 최소 600만건을 목표로 잡고있다. 이를 위한 첫번째로, 검색기능에 querydsl의 동적쿼리를 사용하며 fetch join / 페이징기법 / dto 프로젝션반환 등등을 시도 중에 있다. 헌데 속도가 그리 뛰어나지 않은 상태이다. 현재 위 사항들을 적용한 결과 검색결과 반환시간이 최소 7분이다. 이를 해소시키기 위해 검색기능에 특화된 Elasticsearch를 도입하고자하며, 도입시키기 이전에 개념에 대한 부분을 정리하고자 한다. Elasticsearch > 아파치 루씬 기반으로 만들어진 기능이다 (루씬 기능 대부분을 지원한다).. 2022. 11. 5.