배포 URL : www.sroom.kr
스룸 Organization : 4m9d Organization
FrontEnd Repo : github.com/4m9d/sroom-fe
AI Repo : github.com/4m9d/sroom-ai
-
스룸은 유튜브 강의를 효과적으로 공부하게 돕는 서비스입니다.
-
유튜브의 모든 컨텐츠에 접근 가능하며, 나만의 강의 코스를 생성할 수 있습니다.
-
각 강의마다 자막을 기반으로 한 강의노트와 퀴즈를 제공합니다.
-
강의코스의 모든 강의자료를 PDF로 다운받아 공부할 수 있습니다.
-
가장 인기있는 강의와 함께, 주제별로 재미있는 강의를 추천받을 수 있습니다.
분야 | 개발자 |
---|---|
BackEnd | 정두원, 손경식 |
AI | 손경식 |
FrontEnd | 이종준 |
Java : 11
SpringBoot : 2.3.8
JPA : 2.3.8
MariaDB : 3.0.8
Docker : 24.0.2
ehcache : 2.10.6
logstash : 7.2
swagger : 3.0.0
h2 : 1.4.200
okhttp : 4.10.0
AWS ECS, ECR, KMS, RDS
-
SwaggerHub 사용
-
yaml 파일로 작성, 현재(2024.03) 2.0.0 ver
-
Jira 칸반보드 사용
-
Confluence 사용한 스프린트 플래닝, 데일리 스크럼, KPT 회고, 백로그 작성
-
Postman MockAPI 사용
-
프론트엔드 팀원에게 원활한 개발환경을 제공
-
Slack의 스레드 생성해 논의
-
필요하다면 백로그 추가
-
프로덕션 환경과 같은 환경으로 테스트 서버 구축
-
Pull Request 할 시 테스트서버 반영하여 디버깅
-
Github-flow 방식 채택
-
생성된 지라이슈 티켓으로 브랜치 생성, 개발 완료시 Main으로 PR, Merge
-
기능개발 전, 테스트코드를 먼저 작성
-
Service, Repository, Entity 계층의 유닛 테스트 코드 작성, API 단위의 통합테스트 작성
-
기능구현 후 테스트 요구사항 만족했는지 쉽게 확인 가능
-
리팩토링 시 기존기능이 잘 작동하는지 쉽게 확인 가능
-
총 76개의 테스트 코드 작성
날짜 | 타입 | 개발 사항 | 내용 |
---|---|---|---|
2023-06-27 |
API 개발 | 유튜브 컨텐츠 검색기능 구현 |
SWM-214 - Youtube Data API(3rd-party API) 사용 |
2023-07-06 |
기능개발 | 구글 소셜 로그인 | SWM-103 - google id token, jwt 사용 - accessToken, refreshToken 발급 |
2023-07-24 |
리팩토링 | 현직자 코드리뷰, 학습내용 적용 |
SWM-177 - 테스트DB H2사용 - SQL문은 Groovy 클래스에 선언 - 상태코드 및 서비스 계층 문자열은 모두 상수처리 - 서버에러 발생시 로그생성 - 무분별한 트랜잭션 어노테이션 수정 - 클린코드 스터디 적용(적절한 함수명, 변수명) |
2023-08-03 |
성능개선 | http라이브러리 성능비교 | SWM-214 - Youtube Data API 사용하여 키워드검색, 상세검색하는 인터페이스 구현 - 자바 http 라이브러리인 HttpUrlConnection, OkHttpClient, WebClient 사용하는 클래스 구현, 성능비교 |
2023-09-10 |
API개발 | chatGPT사용 AI서버 연동 |
SWM-230 - FastAPI에게 강의자료 생성 요청, 즉각 202응답 - 자바 스케줄러를 통해 일정시간마다 Celery에서 처리된 task를 확인하고 강의자료를 받아와 저장 - 이 방법을 통해 chatGPT를 사용하는 동안 스레드가 불필요하게 물려있는 현상을 해결 |
2023-09-16 |
운영 | KMS 암호화 적용 | SWM-299 - AWS KMS(Key Management Service) 사용하여 DB url, username,pw, jwt secret, google client key 등을 암호화 |
2023-09-27 |
CI/CD | Github Action 사용 배포 | SWM-296 - Github Action, AWS ECS, ECR 사용 구축 - 프로덕션 환경과 같은 환경의 테스트 서버 구축 |
2023-10-30 |
리팩토링 | 객체의 협력과 책임을 고려한 프로그래밍 |
SWM-361 - '오브젝트'책을 읽고 책임주도 설계를 적용 - 객체에게 적절한 책임을 부과, 협력하게끔 코드작성 - 기존 Service 계층 코드길이가 200줄 이상되었던 문제점 해결 |
2023-11-03 |
성능개선 | 강의추천을 위한 rating방법 개선 |
SWM-388 - 기존에 리뷰개수와 리뷰총합으로 계산, 정렬해오던 강의추천방식을 개선 - rating칼럼을 생성하고, 일정주기로 accumulated_rating, review_count를 사용해 계산, 업데이트하여 추천될 때마다 rating을 인덱스로 하는 DB 리스트 업데이트를 최소화 |
2023-11-06 |
운영 | ELK 구축 | SWM-385 - ELK(Elasticsearch, Logstash, Kibana) 로그저장, 모니터링 툴 설치 - 로그 내용을 Elasticsearch에서 사용 가능한 json 형태로 바꾸기 위해 Logstash에서 Grok 필터를 사용하여 해결 |
2024-01-26 |
리팩토링 | JPA 사용 | SWM-412 - 기존 JdbcTemplate을 직접 사용하던 방식에서 JPA사용으로 리팩토링 - 영속성 컨텍스트에 대한 쓰임 이해 |
2024-02-27 |
성능개선 | 로컬 캐시 적용 | SWM-426 - 서로다른 사용자가 같은 유튜브 강의를 검색할 때, 해당 영상정보를 불러오기 위한 Youtube Data API 중복 호출하는 문제점 해결 - tps 측정 가능한 nginder, 컴퓨터 리소스 모니터링 가능한 사용하여 성능 확인 - 1시간 이내 같은 키워드를 검색하는 경우 Latency 60% 감소 |
url | 기능(PR) | 파라미터 | 담당 |
---|---|---|---|
GET /lectures |
강의 키워드 검색 | keyword, filter, limit, next_page_token |
정두원 |
GET /lectures/{lectureCode} |
강의 상세검색 | index_only, review_only, index_limit, review_limit, index_next_token |
정두원 |
POST /members/login |
멤버 로그인 | 정두원 | |
POST /members/refresh |
재로그인 | 정두원 | |
PUT /members/profile |
프로필 설정 | 정두원 | |
POST /courses |
강의코스 생성 | use_schedule | 정두원 |
GET /courses |
모든 강의코스 불러오기 | 손경식 | |
GET /courses/{courseId} |
강의코스 불러오기 | 정두원 | |
POST /courses/{courseId} |
강의 추가 | 정두원 | |
DELETE /courses/{courseId} |
강의 삭제 | 손경식 | |
PUT /lectures/{courseVideoId}/time |
수강시간 업데이트 | is_completed_manually | 정두원 |
GET /reviews/courses/{courseId} |
리뷰 평점 강의 리스트 조회 | 손경식 | |
POST /reviews/lectures/{lectureId} |
리뷰 평점 작성 | 손경식 | |
GET /courses/materials/{courseId} |
강의자료 불러오기 | 정두원 | |
PUT /materials/summaries/{courseVideoId} |
강의노트 수정 | 정두원 | |
POST /materials/quizzes/{courseVideoId} |
퀴즈채점 | 정두원 | |
PUT /materials/quizzes/{courseQuizId}/scrap |
오답노트 등록, 취소 | 정두원 | |
GET /courses/materials/{courseId} |
강의자료 pdf 변환 | 정두원 | |
POST /materials/{materialId}/feedback |
강의자료 사용자피드백 | type | 정두원 |
GET /dashboards |
대시보드 | 손경식 | |
GET /lectures/recommendations |
강의추천 | 손경식 |