일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 백준
- 오픈챌린지
- 객체지향
- 내일배움카드
- UXUIPrimary
- 디자인챌린지
- 백엔드개발자
- 자바
- 부트캠프
- 내일배움캠프
- 국비지원취업
- 패스트캠퍼스
- mysql
- 환급챌린지
- Spring
- 티스토리챌린지
- 국비지원교육
- UXUI챌린지
- 오블완
- 디자인교육
- 국비지원
- Be
- 오픈패스
- OPENPATH
- 백엔드 부트캠프
- baekjoon
- KDT
- Java
- UXUI기초정복
- 디자인강의
- Today
- Total
목록목록 전체 보기 (176)
군만두의 IT 공부 일지

목차 책 '주니어 백엔드 개발자가 반드시 알아야 할 실무 지식' 3장을 읽고, 데이터베이스 성능 최적화를 위해서 인덱스에 대해 공부했다. 단일 인덱스부터 복합 인덱스, 그리고 커버링 인덱스까지 언제 어떻게 활용해야 하는지 정리하려고 한다.1. 인덱스가 필요한 이유DB 서버 성능 문제의 주요 원인 중 하나는 풀 스캔이다. 호출 빈도가 높은 기능에 풀 스캔을 유발하는 쿼리가 있으면 사용자가 조금만 증가해도 DB 장비의 CPU 사용률이 90%를 넘긴다. DB에 문제가 생기면 전체 서비스에 영향을 주기 때문에 신경써야 한다.풀 스캔: 테이블의 모든 데이터를 순차적으로 읽는 것일반적인 시스템에서는 조회 기능의 실행 비율이 높다. (게시판 - 게시글 조회)풀 스캔이 발생하지 않도록 하려면 조회 패턴을 기준으로 인덱..
목차6장. 다양한 연관관계 매핑- 다중성: 다대일(@ManyToOne), 일대다(@OneToMany), 일대일(@OneToOne), 다대다(@ManyToMany)- 단방향, 양방향: 객체 관계에서 한 쪽만 참조하는 것을 단방향 관계, 양쪽이 서로 참조하는 것을 양방향 관계라 한다.- 연관관계의 주인: JPA는 두 객체 연관관계 중 하나를 정해서 데이터베이스 외래키를 관리한다.6.1 다대일객체 양방향 관계에서 연관관계의 주인은 항상 다쪽이다.6.1.1 다대일 단방향 [N:1]예) 회원은 Member.team으로 팀 엔티티를 참조할 수 있지만, 반대로 팀에는 회원을 참조하는 필드가 없다. 따라서 회원과 팀은 다대일 단방향 연관관계다.6.1.2 다대일 양방향 [N:1, 1:N]양방향은 외래키가 있는 쪽이 연관..
목차5장. 연관관계 매핑 기초- 객체의 참조와 테이블의 외래키를 매핑하는 것이 목표- 방향(Direction): 단방향, 양방향- 다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M)- 연관관계의 주인(owner): 객체를 양방향 연관관계로 만들면 정해야 한다.5.1 단방향 연관관계객체 연관관계와 테이블 연관관계 차이점:참조를 통한 객체의 연관관계는 단방향이다. 객체간 연관관계를 양방향으로 만들려면 반대쪽에도 필드를 추가해서 참조를 보관해야 한다. 정확히는 서로 다른 단방향 관계 2개다.외래키를 사용하는 테이블의 연관관계는 양방향이다.객체는 참조(주소)로 연관관계를 맺고 테이블은 외래키로 연관관계를 맺는다. 연관된 데이터를 조회할 때 객체는 참조를 사용하..

⭐요약채팅 서비스 개발 중 메시지 조회 API에서 103개의 쿼리가 실행되는 N+1 문제를 발견했다.QueryCountInterceptor를 구현하여 쿼리 수를 모니터링하고, JOIN FETCH를 활용하여 쿼리 수를 약 96% 감소시켰다.최종적으로 메시지 조회 성능을 200ms → 48ms (약 76% 개선), 채팅방 목록 조회를 66ms → 35ms (약 47% 개선) 달성했다.⭐N+1 문제 발견채팅 서비스를 개발하던 중, 성능이 예상보다 느린 것을 느꼈다. 채팅방 목록과 메시지를 조회할 때 다른 기능보다 응답 시간이 긴 것을 발견했다. 문제를 정확히 파악하기 위해 QueryCountInterceptor를 구현하여 API별 쿼리 수를 측정했다.@Slf4j@Componentpublic class Quer..
목차4장. 엔티티 매핑- 객체와 테이블 매핑: @Entity, @Table- 기본키 매핑: @Id- 필드와 컬럼 매핑: @Column- 연관관계 매핑: @ManyToOne, @JoinColumn4.1 @EntityJPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야 한다. @Entity가 붙은 클래스를 엔티티라고 부른다.파라미터가 없는 기본 생성자는 필수다. (public 또는 protected)final 클래스, enum, interface, inner 클래스에는 사용할 수 없다. 저장할 필드에 final을 사용하면 안 된다.속성기능기본값nameJPA에서 사용할 엔티티 이름을 지정한다.클래스 이름▲ @Entity 속성4.2 @Table@Table은 엔티티와 매핑할 테이블을..
이전 게시글에 이어 3장에 나온 것처럼 "시스템 설계 면접"을 대비해서 "뉴스 피드 시스템"에 대해서 설계한 아키텍처를 구현하기로 했다.3단계 상세 설계1) 시스템 목표 및 기능 범위 재확인1~2단계에서 정한 요구사항을 바탕으로 시스템이 달성해야 할 구체적인 목표를 다시 정리해보자.기본 요구사항DAU: 1,000만 명 (일간 활성 사용자)친구 관계: 최대 5,000명플랫폼: 모바일 앱 + 웹 앱 지원핵심 기능: 포스트 발행, 뉴스 피드 조회 (시간 역순)미디어: 이미지, 비디오 파일 지원아키텍처 설계 방향MSA(마이크로서비스 아키텍처) 기반포스트 서비스, 피드 서비스, 사용자 서비스 분리비동기 처리 → 메시지 큐 활용캐시 전략으로 성능 최적화2단계에서 설계한 아키텍처를 바탕으로 다음과 같이 뉴스 피드 시..

목차 책 '주니어 백엔드 개발자가 반드시 알아야 할 실무 지식' 2장을 읽고, 웹 서비스의 성능 최적화를 위해서 캐시와 CDN에 대해 공부했다. 이 글에서는 서버 캐시부터 브라우저 캐시, 그리고 CDN까지를 정리할 것이다.1. 서버 캐시DB 서버를 확장하지 않고 응답 시간과 처리량을 개선하고 싶다면 캐시(cache)를 사용할 수 있다.캐시: (키, 값) 쌍을 저장하는 Map과 같은 형태의 데이터 저장소캐시에 데이터를 저장해두면 동일한 데이터를 요청할 때 DB가 아닌 캐시에서 데이터를 읽어와 응답할 수 있다.일반적으로 캐시에서 데이터를 읽는 속도가 DB보다 빠르기 때문에, 자주 조회되는 데이터를 캐시에 보관하면 응답 시간을 줄일 수 있다.DB뿐만 아니라 복잡한 계산 결과나 외부 API 연동 결과도 캐시에 ..
목차3장. 영속성 관리3.1 엔티티 매니저 팩토리와 엔티티 매니저데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 EntityManagerFactory를 하나만 생성한다.엔티티 매니저 팩토리는 여러 스레드가 동시에 접근해도 안전하므로 서로 다른 스레드 간 공유해도 되지만, 엔티티 매니저는 여러 스레드가 동시에 접근하면 동시성 문제가 발생하므로 스레드 간에 절대 공유하면 안 된다.// 엔티티 매니저 팩토리 생성, 비용이 아주 많이 든다.EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); // 엔티티 매니저 생성, 비용이 거의 안 든다.EntityManager em = emf.createEntityManager..