일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Til
- 카카오코테
- 정보처리기사
- select
- 정처기
- 혼공파
- Android
- 코테
- 안드로이드
- SQL
- 알고리즘
- 혼공챌린지
- doitandroid
- 자료구조
- MySQL
- 기술면접
- 스터디
- java
- 안드로이드스튜디오
- 코틀린
- 티스토리챌린지
- 인프런
- 자바
- Kotlin
- 프로그래머스
- groupby
- CS
- 오블완
- join
- 혼공단
- Today
- Total
목록분류 전체보기 (372)
Welcome! Everything is fine.

기존 코드의 문제점기존 이벤트 API는 오픈 알림이 구현되지 않았고,단순 DB 기반 스케줄러로 1분마다 오픈 시간을 체크해 상태를 변경하는 구조였다. 하지만 지금과 같은 구조는 다음과 같은 단점이 있다.데이터베이스 부하 증가스케줄러는 매 분마다 WHERE open_at 모든 이벤트를 조회해야 한다. 기존 코드는 매 분마다 위와 같은 조건으로 풀스캔하고 있다. 인덱스를 적용하더라도 유저 수와 이벤트 수가 많아질수록 쿼리 부하가 커지고, 인덱싱만으로는 처리 한계가 생긴다. 이벤트 오픈 비동기 전파 필요성만약 알림 도메인과 직접적인 연결을 한다면?두 서비스가 서로의 생명주기와 내부 구조에 영향을 받을 수 있다.직접적인 연결은 유지보수를 어렵게 하고, 장애 전파 가능성을 높인다.MQ를 사용하면 이벤트 서비스는..

문제점이벤트 정원이 10명인데도 200명 신청 시 9명까지만 들어가는 문제가 발생했다.또한 로그에서 “이벤트 정원이 초과되었습니다.”라는 메세지가 떴다.Redis에는 이미 200명이 저장된 상태DB는 한 명이 누락된 상태DB에 존재하지 않는 ID로 다시 신청 → EVENT_ALREADY_JOINED 예외 발생원인Redis와 DB의 정합성이 깨졌는데, 검증 기준은 Redis에만 의존하고 있기 때문이다. Redis는 ID를 이미 참여한 유저로 보고 있지만, 실제 DB에는 들어가지 않았다.하지만 ZSet에 있는 것만 보고 판단하여 중복 신청으로 막아버린 것이다.Zset에는 실패한 유저도 들어있기 때문에 100% 신뢰할 수 없다.왜 지금까지 이런 문제가 한 번도 없었는지는 잘 모르겠다..😓해결 방법valida..

캐싱(caching)이란?Redis에 대해 알아보기 전, 먼저 캐시 & 캐싱이 무엇인지 알아보자! 파레토의 법칙에 따라 자주 사용되는 20%의 데이터를 미리 캐싱해둔다면 효과적인 성능 향상을 기대할 수 있다.캐시(Cache) : 원본 저장소보다 데이터를 더 빠르고 효율적으로 가져올 수 있는 임시 데이터 저장소.캐싱(Caching) : 캐시에 접근해 데이터를 빠르게 가져오는 방식.캐시 사용 시 주의사항자주 사용되면서 변경이 적은 데이터에 적합하다.유실되어도 크게 문제가 없는 데이터에 적합하다.DB와 함께 사용 시 데이터 정합성 문제를 고려해야한다.데이터 캐싱 전략단순히 "캐싱"만 한다고 성능이 무조건 보장되는 것은 아니다. 어떻게 캐싱하느냐가 중요하다.대표적인 데이터 캐싱 전략을 알아보자.Cache Asi..

문제점애플리케이션을 실행하자, 다음과 같은 에러가 발생했다.원인Bean 초기화 시에 순환 참조가 생기면서 앱이 실행되지 않았다.EventService → EventJoinService를 @RequiredArgsConstructor로 주입EventJoinService → EventService를 또 @RequiredArgsConstructor로 주입서로 의존성을 주입하고 있어서 다음과 같은 순환 의존 구조가 된 것이다.EventController → EventService → EventJoinService → EventService (다시 참조)해결 과정기존에 EventJoinService에서 사용하고 있던 EventService를 EventRepository로 바꿨다.EventServic..

🍽️최종 프로젝트 시작!드디어 최종 프로젝트를 시작했다. 사실 벌써 2주차가 끝났지만 정신없이 달려오다보니 블로그에 기록을 하지 못했다. 한 주가 끝날 때마다 꾸준히 기록하는 습관을 가지자.✍🏻우리 팀은 테이블링 서비스를 주제로 정했다!프로젝트명 : TableNow (테이블나우)주제 : 식당을 예약하고 방문할 수 있는 실시간 예약 관리 시스템📆 1 ~ 2주차 일정S.A 작성 후 피드백 받기기본 기능 개발 완료기본 기능 개발 후 코드리뷰 받기핵심 기능우리 팀의 핵심 기능은 다음과 같이 정리할 수 있다.인증/보안Spring Security + JWTRefresh Token 저장 및 관리(Redis)OAuth2.0 로그인 연동검색/캐싱인기 검색어 캐싱(Redis)Elasticsearch동시성 제어Redi..

처음으로 자동 배포를 설정하면서 겪은 트러블슈팅을 기록하고자 한다.✍🏻우선 CI/CD 환경은 다음과 같다.EC2: Ubuntu 22.04, Docker 설치ECR: Spring Boot 앱 이미지를 빌드하여 pushRDS: MySQL DB 사용배포 방식: GitHub Actions를 통한 CI/CD 자동화EC2 배포 시 오류 발생command not found 에러docker: command not found 에러는 EC2 서버에 Docker가 설치되어 있지 않아서 발생한 오류다. GitHub Actions에서 EC2로 SSH 접속은 성공했지만, EC2 안에 docker 명령어 자체가 없어서 전부 실패한 상황이다. EC2에 SSH 접속 후 아래 명령어 실행해 Docker를 설치한다.sudo apt up..
보호되어 있는 글입니다.
보호되어 있는 글입니다.