Table
Search
1. 프로젝트
•
프로젝트 명: Echo
•
소개
◦
프로젝트 주제: 스포츠 종목의 경기 일정 및 경기 결과 데이터를 제공하고 상품 판매, 핫딜 기능을 제공하는 웹서비스입니다.
◦
프로젝트 개요:
▪
경기 일정 및 결과, 댓글 도메인에 대용량 데이터를 추가하여 데이터 최적화와 전 후 nGrinder 이용해 성능 테스트를 진행합니다.
▪
핫딜 기능에 Redis, JPA를 이용해 대용량 트래픽에 대한 정합성, 동시성 처리가 가능한 웹서비스를 만들고자합니다.
프로젝트 백엔드 아키텍처
개발 과정에서 사용할 기술
1.
스포츠 경기 일정 및 결과 서비스
•
사용자는 축구(EPL), 농구(NBL), 야구(MLB) 종목의 최신 경기 일정 및 결과(Rapid API를 사용)를 확인할 수 있습니다.
◦
Rapid API의 호출을 이용해서 축구, 농구, 야구 분야에서 경기 일정 및 결과 데이터를 가져와 DB에 저장합니다.
◦
경기 결과 데이터는 Scheduler를 이용해 15분에 한 번씩 업데이트를 진행합니다.
▪
Timezone 최소 단위와 RepidAPI 호출 가능 토큰 갯수를 고려해 15분으로 결정했습니다.
▪
scale-out 가능한 서버를 구성할 경우 외부로 Scheduler를 분리해 이벤트를 발생시킬 예정입니다.
RapidAPI 응답 json 데이터 예제 이미지
•
각 스포츠 경기의 상세 정보에는 팀 구성, 경기 시간 및 장소가 포함됩니다.
•
각 스포츠 경기 일정의 경우 사용자들이 댓글을 달 수 있습니다.
2.
핫딜 및 상품 구매 서비스
•
스포츠 유니폼, 사인볼, 기념품 등 다양한 상품을 핫딜 형태로 제공합니다.
•
사용자는 상품 검색, 리뷰 확인, 장바구니 기능 등을 이용하여 쉽게 구매할 수 있습니다.
•
특별 행사 및 할인 정보도 제공하여 사용자가 최상의 거래를 할 수 있도록 합니다.
•
Redis Sorted Set을 활용하여 사용자들의 요청을 시간 순서대로 정렬하여 순차적으로 처리함으로써 DB에 가해지는 부하를 효과적으로 분산 시킬 수 있습니다.(예정)
•
데이터 무결성의 보장이 중요하다고 생각되어 비관적 락을 채택하여 동시성 문제를 해결하였습니다.(예정)
3.
WebSocket기반 STOMP를 이용한 응원 댓글 작성 서비스
•
사용자들은 각 경기별로 응원 채팅 기능을 이용할 수 있습니다.
•
Sub/Pub 구조의 STOMP를 이용하며 사용자들은 게임 채팅방 입장시 게임 id에 맞는 topic을 구독(Sub)하게 됩니다.
•
특정 사용자가 게임 채팅방에 메세지를 전송(Pub)하면 게임 채팅방을 구독하고있는 모든 사용자들에게 이벤트가 발생되고 메세지를 출력하는 형식으로 동작합니다.
1.
대용량 데이터 처리
•
경기 일정, 결과, 사용자 댓글 등 대용량의 데이터 처리를 위해 효율적인 데이터베이스 설계를 채택합니다.
•
데이터베이스 쿼리 최적화, 캐싱 전략, 데이터 파티셔닝 등을 통해 빠른 데이터 처리 속도를 보장합니다.
2.
대용량 트래픽 대응
•
스포츠 이벤트 동안 발생하는 급격한 트래픽 증가에 대비하여 확장 가능한 서버 구조를 설계합니다.
◦
재고가 n개인 핫딜 상품이 출시되었을때, 유저 n*100명이 동시에 서비스에 접근해 트래픽이 발생하는 경우
•
로드 밸런싱, 오토 스케일링, CDN 사용 등을 통해 사용자 경험을 최적화합니다.
3.
대용량 데이터 처리 및 트래픽 대응의 경우 대용량 데이터 처리는 예를 들어, 100~300만건의 댓글 데이터를 가지고 nGrinder를 이용한 부하테스트 및 최적화. 디비 인덱싱 등.. 을 한다
오늘의 질문 (팀장 마음대로 내는 문제) TIL에 작성해주시고 링크를 밑에 적어주시면 팀장이 답변도 보러가요~!
1월 4일 트랜잭션은 무엇인가요? 트랜잭션의 격리 레벨은 아시나요?
1월 5일 객체지향 프로그램은 무엇인가요???그 중에서도 오버로딩과 오버라이딩의 차이에 대해 설명해 주세요!!!!!!!!
1월 8일 RDBMS, NoSQL에서의 클러스터링/레플리케이션 방식이 뭔가요???
1월 9일 AOP는 무엇인가요?? 설명해주세요~
1월 10일 Redis란 무엇인가요???자세히 알려주세요
1월 11일 AOP는 무엇인가요???
1월 12일 JPA와 같은 ORM을 왜 사용하죠?
1월 15일 프로그램이 컴파일되어 실행되는 과정을 알려주세요
아무도 답을 안달아서 속상한 팀장은 그만두기로 했다고 한다….
→ 진짜 너무하시다…. 팀장님 마상
튜터님의 질문
1. 경기결과가 실시간으로 업데이트 되는 기능이 명시 되어있는데, 기술적으로 어떻게 구현을 할지 구체적으로 설명해주세요! (다이어그램 플로우도 같이 첨부되면 더 좋습니다.)
2. 경기에 대한 예측, 분석이 어떤 기능인지 구체적으로 서술해주세요. (데이타 기반으로 예측, 분석을 하는건지..?)
3. 장바구니 기능 구현 방식을 기술적으로 설명해주세요. (예시: 비로그인 사용자가 장바구니를 담아서 구매를 한다면?)
4. 쿼리 최적화를 하기 위해 어떤 지표를 보고 진행하시나요?
5. 어떤 캐시 전략을 사용할것이고, 프로젝트내에서 캐싱을 어떻게 활용하고 있는지 설명해주세요~
6.ngix 활용 용도를 설명해주세요.
7.Scheduler 동작되는 구조를 설명해주세요.
8.인프라에서 서버 scale-out 설정을 어떻게 하셨는지 설명해주세요. scale-out되는 조건도 설명해주세요.
9.동시성 문제를 해결하기 위해 락설정을 코드상에 어떻게 구현을 하는지 설명해주세요.
10.CDN은 어떻게 구성하시고 cache invalidate에 대해서 설명해주세요.
Ground Rules
public class SportEchoGoals {
public static void main(String[] args) {
System.out.println("1. TIL 작성을 잊지 않습니다.");
System.out.println("2. 죽어도 TIL 쓰고 죽습니다.");
System.out.println("3. TIL 쓰기 전에는 잠 잘 생각 하지 않습니다.");
System.out.println("4. 변명은 필요 없습니다.");
System.out.println("5. 한달에 반차,월차 각 1개씩 주말 포함임");
System.out.println("6. 주 7일 근무 야근수당 없음 ");
System.out.println("7. 11시 회의 탄력적인 근무.");
System.out.println("8. 사전에 미리미리 일정공유");
System.out.println("9. 옐로 카드(Y3 = R1) 도입 레드 받으면 보이스톡 상담 예정");
System.out.println("10. 불만사항 소리함에 기입해두기 (익명성보장)");
System.out.println("11. 다같이 끝까지 가봅시다!");
}
}
Java
복사
public class YellowCard {
public static void main(String[] args) {
System.out.println("1. TIL작성을 안했다.");
System.out.println("2. 지각을 했다.");
System.out.println("3. 팀원에게 화내고 나쁜말을 했다.");
System.out.println("4. 변명은 필요 없습니다.");
System.out.println("5. 마감기한 안지키면 안돼요~");
}
}
Java
복사
Goals
public class Goals {
public static void main(String[] args) {
System.out.println("1. 대용량 데이터 안정화.");
System.out.println("2. 대규모 트레픽 안정화.");
System.out.println("3. 끝까지 화목한 팀분위기 유지.");
System.out.println("4. 누구든 보면 이해가도록 이쁘게 코드 만들기.");
System.out.println("5. 마감기한을 지키며 안정적인 협업");
}
}
Java
복사
고정일정 공유
아침 회의는 11시 입니다
저녁 회의는 9시 전으로 예정이 되어있는데 특별한 사항이 없으면
자주자주 소통하는 방식으로 운영될 것입니다.
각자의 스터디를 적어주세요~
모든분들이
대략 2~3시까지는 스터디 예정
Plain Text
복사
회의록
기술 멘토링 노트
기술 조사 내용
테스트 시나리오
Project Rules
개발환경
계획표
SA 서면피드백
Plain Text
복사
4. 와이어프레임
WireFrame
5. API 명세서 (구현 기능 안에 상세 설명 추가)
Member
Game
Comment
Product
HotDeal
MemberProduct
Purchase
6. ERD DIAGRAM
Entity Relationship Diagram V0.1 (2024-01-04)
Entity Relationship Diagram V0.2 (2024-01-05)
Entity Relationship Diagram V0.3 (2024-01-10)
7. Backend Architecture
Echo Backend Architecture V0.1 (2024-01-08)
Echo Backend Architecture V0.2 (2024-01-15)
Table
Search
PROJECT
•
프로젝트 명: Echo
•
소개
스포츠 종목의 경기 일정 및 경기 결과 데이터를 제공하고 상품 판매, 핫딜 기능을 제공하는 웹서비스입니다.
경기 일정 및 결과, 상품 도메인에 대용량 데이터를 추가하여 데이터 최적화와 전 후 nGrinder/Jmeter 이용해 성능 테스트를 진행합니다.
•
사용자는 축구(EPL), 농구(NBL), 야구(MLB) 종목의 최신 경기 일정 및 결과(Rapid API를 사용)를 확인할 수 있습니다.
◦
Rapid API의 호출을 이용해서 축구, 농구, 야구 분야에서 경기 일정 및 결과 데이터를 가져와 DB에 저장합니다.
◦
요청 방식은 HTTP Request를 사용하였습니다
◦
경기 결과 데이터는 Scheduler를 이용해 12분에 한 번씩 업데이트를 진행합니다.
▪
Timezone 최소 단위와 RepidAPI 호출 가능 토큰 갯수를 고려해 12분으로 결정했습니다.
▪
스케줄러 서버를 scale-out하여 외부로 Scheduler를 구현하였습니다
RapidAPI 응답 json 데이터 예제 이미지
•
각 스포츠 경기의 상세 정보에는 팀 구성, 경기 시간 및 장소가 포함됩니다.
•
각 스포츠 경기 일정의 경우 사용자들이 댓글을 달 수 있습니다.
핫딜 및 상품 구매 서비스
WebSocket기반 STOMP를 이용한 응원 댓글 작성 서비스
Trouble Shooting
N+1
Persistence Context
MapStruct
test Concurrency
API 명세
API 명세서 (구현 기능 안에 상세 설명 추가)