의도치 않은 재 취준모드 회사가 갑작스럽게 청산하여 다시 취준 생활에 돌입했습니다 개발자 호황기였던 신입 취준때와 달리 시장이 좋지 않았기에 멘탈이 많이 무너졌었습니다 할 수 있는 일을 찾아보고 부족한 구멍을 찾아 매우는 일에 집중했었지만 취준이란 게, 인생이란 게 노력한다고 해서 그에 비례한 보상이 오는 건 아니라는 걸 한번 더 절감하게 되었습니다 그럼에도 불구하고 뚯밖의 기회로 첫회사에 재입사하게 되었습니다 퇴사했던 사람으로서 다시 돌아간다는 게 부끄럽기도 하고 괜히 움츠러들기도 했었는데요 다들 반갑게 맞아주셔서 지금은 무사히 적응하면서 잘 지내고 있습니다 스터디 기록 강의 MongoDB : 2023.01.08 ~ 2023.03.24 / 강의노트 Redis : 2023.04.09 ~ 2023.05.2..
회사에서 사이드 프로젝트(?)로 소소하게 도커를 다룰 일이 있었습니다. 도커 스터디도 하고 컨테이너를 띄우는건 얼추 했지만 Dockerfile을 정의하고 목적에 맞게 도커 이미지를 빌드하는 게 처음이었어서 이번에 알게된 내용들을 간단히 정리합니다. Dockerfile과 docker compose의 관계 Dockerfile : 도커 이미지 빌드를 위한 레시피같은 것 docker compose : 도커파일을 실행하는 커맨드의 집합 (ex. docker run, docker build를 한꺼번에 하는 역할) 컨테이너 IP 각 컨테이너에는 독립된 랜덤 IP가 부여된다. 이 ip는 컨테이너를 띄울 때마다 바뀌는 것 같다. docker inspect {container_name} 명령어로도 확인 가능 (JSON데이..
https://www.youtube.com/watch?v=ZBu_slSH5Sk 유튜브 쉬운코드의 맵, 해시테이블 설명을 보고나서 추가로 궁금한 부분들을 정리해보았습니다. 영상의 설명이 너무 좋아 같이 봤으면 해서 영상도 같이 올립니다. Map key-value pair들을 저장하는 ADT 같은 key를 가지는 pair는 최대 1개만 존재 associative array, dictionary라고 불리기도 함 구현체 Hash Table Tree-based 💡 ADT (Abstract Data Type, 추상 데이터 타입) 데이터와 해당 데이터에 적용되는 연산들을 묶어놓은 개념. 데이터 내부 구현을 감추고 데이터와 연산의 인터페이스만을 노출시켜 코드의 모듈성과 재사용성 향상을 목표로 함. ex) Stack, ..
문제상황 사내 백오피스 애플리케이션에서 거래내역을 조회하는 페이지에 첫 진입할 때 5.48초가 걸리는 문제를 발견하였습니다 원인 분석 현재 거래내역 페이지는 offset 기반의 페이지네이션을 사용하고 있었고 리스트의 전체 행 수를 구하는 부분(이하 totalCount)에서 시간이 많이 소요되고 있음을 발견하였습니다. 페이지 첫 진입 시 데이터 조회 범위가 정해져있지 않았기 때문에 서비스 오픈부터 쌓여온 10만여건의 데이터를 전부 조회하고 있었습니다. 또한 실행계획을 조회해보니 거래 테이블에서 테이블 풀 스캔이 발생하고 있었습니다. 페이지 첫 진입 시 최근 한달 간의 거래내역만 조회하고 옵션에서 범위를 늘릴 수 있게 변경하고자 하였으나 운영팀에서는 조금 느리더라도 전체 범위 검색을 디폴트값으로 해달라는 요..
캐러셀이란 캐러셀은 슬라이드쇼와 같은 방식으로 콘텐츠를 표시하는 UX 구성 요소입니다. 회사에서 운영하는 서비스에서도 테마 별 캐러셀을 사용하고 있습니다. 문제 상황 staging QA에서 홈화면에 접근 시 메인배너만 보이고 새로고침 전 까진 캐러셀들이 보이지 않는다는 리포트가 들어왔습니다. 브라우저 네트워크 탭에서 확인해보니 캐러셀 목록 데이터를 조회하는 API의 응답속도가 17초 이상 나왔습니다. 분석 일단 어디가 병목지점인지를 확인하기 위해 코드 중간중간 타이머를 심어 시간을 측정했습니다. 확인 결과, 상품정보목록를 불러오는 부분에서 10초 이상을 소요되어 이 부분을 더 자세히 살펴보았습니다. 서비스는 PHP Laravel로 개발되어있습니다. (기존 로직을 간결하게 재현한 코드로, 실 운영 중인 코..
String 숫자넣으면 incre decre 기능 사용 가능 활용사례 : 좋아요 수 증감처리 mset mget으로 한번에 여러 키/벨류 삽입 조회 가능 List 링크드리스트 자료구조 인덱스 조회 불가, 데이터 넣고빼기 용이 파이썬 deque와 비슷한 느낌? Set 활용사례 : 이벤트 쿠폰 발급하고 중복사용 막기. 사용한 유저id를 셋에 삽입 Hash 벨류가 오브젝트 처럼 여러 필드를 갖고있음 기존 스트링에 json으로 보관하는 것 과의 차이점 : 특정 필드에 따로 접근 가능 각 필드에 접근하여 incre decre도 가능 : 특정 숫자 증가 가능 (string inc와의 차이점) SortedSet Set의 필드에 score값이 포함되어있음 활용사례 : 게임 랭킹 시스템 Bitmap 비트벡터로 아루어짐 활..
Pageable Spring data core api에서 제공하는 인터페이스 JPA Repository 메소드 파라미터에 Pageable 객체를 넣어주면 자동으로 페이지네이션 적용 public interface UserRepository extends JpaRepository { List findByLastname(String lastName, Pageable pageable); } 반환타입 : Page, Slice, List Page : 페이지 + totalCount Slice : 페이지 + 전후 슬라이스 존재 여부 List : 페이징 안된 전체리스트 PageRequest 페이징 요청 정보 생성 쿼리스트링으로 사용하는 법 컨트롤러에 파라미터로 PageRequest 삽입 쿼리스트링에 page=3&size..
BSON(Binary JSON) JSON과 유사한 문서를 바이너리 형태로 인코딩한 데이터 포맷 날짜 타입, BinData 타입 등 JSON보다 많은 타입을 지원 Protocol Buffer, Thrift와 같은 바이너리 교환 형식(Binary Interchange Format) BSON은 Protocol Buffer 대비 schema-less 하여 유연하다는 장점이 있지만, 직렬화된 데이터의 필드명에 대한 오버헤드가 있어 공간 효율성 면에서 약간의 단점이 있다 특징 가볍다 쉬운 데이터 순회 (Traversable) 타입과 길이 정보를 인코딩하여 순회를 빠르게 할 수 있다 효율적이다 문서 맨 앞에 길이 정보를 포함하고 있어 빠르게 스캔 및 쿼리 가능 C언어의 데이터 타입을 사용하기 때문에 대부분의 프로그래..
Schema Design Pattern 데이터 모델링 시 자주 나타나는 과제들을 해결하기 위한 방법들을 비슷한 특징끼리 묶어 정리한 것 디자인 패턴의 데이터 모델링 버전이라고 볼 수 있다 소프트웨어 개발 방법에서 사용되는 디자인 패턴은 프로그램 개발에서 자주 나타나는 과제를 해결하기 위한 방법 중 하나로, 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 이후에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것이다. 알고리즘과 같이 프로그램 코드로 바로 변환될 수 있는 형태는 아니지만, 특정한 상황에서 구조적인 문제를 해결하는 방식을 설명해 준다. - 위키피디아 사실 MongoDB만을 위한 패턴은 아니다. 다만 유연한 스키마를 가진 MongoDB에서 사용하기에 효과적이다..
Ranged Sharding 샤드키의 값을 기준으로 청크에 분산 연속된 숫자들이 같은 샤드와 같은 청크에 존재함 데이터의 값으로 정확히 어떤 샤드에 존재하는지 알기 때문에 데이터가 존재하는 샤드에만 쿼리를 요청하는 Target Query가 가능 단점 : 데이터가 균형있게 분산되지 않을 가능성이 높다 usage 타겟쿼리가 필수일 경우 hash shrading을 이용하지 못하는 경우 Hash Sharding 샤드키의 값의 해시값을 기준으로 분산 균등 분산 카디널리티가 낮으면 부하편중을 완전히 막을 순 없음 샤디드 클러스터의 목적이 분산이므로 균등분산이 잘되는 해시샤딩을 대부분 사용 주의할 점 데이터가 연속되어있지 않고 분산되어있으므로 모든 샤드에 다 요청해서 데이터를 가져온 후 필터링 해야 할 수도 있음 →..
- Total
- Today
- Yesterday
- 샤딩
- kubernetes
- docker
- phpUnit
- 라라벨
- mockery
- 대규모 데이터 처리
- 주니어개발자
- NoSQL
- 분산처리
- pods
- 샤드
- index
- MySQL
- php
- 도커
- 백엔드
- 쿠버네티스
- database
- mongoDB
- redis
- laravel 테스트
- devops
- java
- laravel 테스트코드
- springboot
- laravel
- 리눅스 컨테이너
- k8s
- 몽고디비
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |