분류 전체보기 235

Optimizer 中 인덱스 여부에 따른 검색 속도 향상

👣 개요 인덱스의 여부에 따른 검색 속도 향상 여부를 확인하는 실험. 👣 실험 계획 Item은 name에 인덱스가 부여되지 않았고 해당 Item 테이블의 Row 갯수는 100만 개 입니다. 실험을 위해 사용된 코드는 위와 같이 Name 칼럼을 기준으로 검색하는 메서드다. 실험에 사용되는 테스트 코드는 위와 같이 순차적으로 N번 메서드를 호출하고 해당 실행 시간을 확인하는 형태로 진행된다. 👣 실험 수행 ⚗️ 대조군 - 인덱스 없이 검색 우선 100번 정도 메서드를 호출했을 때의 결과다. 20129 ms, 즉 20.129초가 걸림을 알 수 있다. 겨우 100번 호출했음에도 불구하고 20초나 걸린다는 것을 알 수 있다. ⚗️ 실험군 - 인덱스 생성 후 검색 인덱스를 만들기 위해 다음과 같은 쿼리를 실행한다...

프로젝트 회고 2023.11.27

Optimizer 프로젝트 소개

👣 개요 그동안의 프로젝트는 기능 구현에 초점이 맞춰져 있을 뿐 서버 최적화에 대해 진지한 논의가 있던 프로젝트는 없었다. 때문에 오로지 서버 최적화에 대해서만 실험하는 프로젝트를 진행하고자 하여 Optimizer 프로젝트를 진행하고자 한다. Optimizer 프로젝트는 다음과 같은 형식으로 진행될 예정이다. 1. 다양한 연관 관계의 엔티티들을 정의한다. 더보기 Item, Member라는 기본 엔티티 오직 Member 만으로 연관 관계가 설정된 Follow 엔티티 Member와 Item과의 연관 관계가 설정된 Wish 엔티티 차후 평균 별점과 같은 통계를 위한 Rating 엔티티 2. 각 엔티티를 위한 더미 데이터를 최소 1만개 ~ 최대 100만개 적재한다. GitHub - iksadNorth/sql-m..

프로젝트 회고 2023.11.27

Mine Sweeper 프로젝트 中 CORS 테스트 코드 작성

👣 개요 프로젝트 진행 중 React와 Spring을 동시에 사용해서 프로젝트를 구성했기 때문에 CORS 문제는 언제나 따라다녔습니다. CORS 문제 이외의 구현은 테스트 코드를 작성해서 문제를 조기에 예방했기 때문에 버그 발생 확률이 현저히 낮았습니다. 하지만 CORS 문제의 경우, 브라우저를 이용해야 버그가 발생하기에 조기에 발견하기 너무 어려웠습니다. 혹시나 하는 마음에 CORS 테스트 코드를 찾고자 구글링을 해보아도 간단한 JS 코드를 이용해 웹 페이지에서 직접 서버로 API 호출하는 경우 이외에는 뾰족한 수가 보이지 않았습니다. 하지만 CORS에 대해 조금 더 공부해본 결과 브라우저에서 CORS 정책대로 유효성을 확인해볼 때, Preflight 요청을 보낸다는 것에 착안해서 테스트 코드를 작성해..

프로젝트 회고 2023.11.19

Re:USE 프로젝트 中 근처 상품 조회 기능 구현

👣 구현 배경 Re:USE 프로젝트는 의류 중고 거래 웹 서비스로서 사용자와 사용자가 직접 거래를 하기 위해선 판매자와 구매자의 거리가 짧을수록 좋을 것이라 가정했습니다. 때문에 사용자에게 추천하는 상품 중 거리가 가까운 상품을 보여줘야 할 필요성이 느껴져서 해당 기능을 구현하고자 기획했습니다. 사용자에게 받는 주소는 문자열 형식의 주소를 받게 되어 있으며 예를 들자면, " 서울특별시 중구 세종대로 110"와 같은 도로명 주소로 입력되도록 유도했습니다. 👣 구현 시도 1st - 행정 구역 기준 카테고리화 처음에는 도로명 주소로 입력받은 위치를 시/도/동/구 등등으로 Parsing하고 각 카테고리가 동일하면 동일할수록 거리가 가까운 것으로 가정하자는 논의가 이뤄졌습니다. 예를 들어, 3개의 주소가 주워졌다..

프로젝트 회고 2023.11.19

Re:USE 프로젝트 中 테스트 코드 작성 회고

👣 개요 해당 프로젝트는 개발 초기에 WireFrame이 확정되지 않았기 때문에 각 API가 전달해야 하는 응답 JSON 형식이 수시로 바뀌는 상황이었다. 때문에 Lazy Loading에 의존해서 API를 제작했고 Entity를 DTO로 변환하는 과정 중 N+1 문제가 발생했었다. 때문에 MVP 달성 이후 더이상 변경될 확률이 적은 API를 보다 최적화시키기 위해 Projection 기능과 적절한 Join 연산으로 1개의 쿼리로 필요한 모든 정보를 불러올 계획을 세웠다. 하지만 이전 프로젝트 경험 중 정상 작동되는 API를 함부로 수정했다가 오류를 일으킨 경우가 있었기에 코드 리펙토링 이전에 테스트 코드를 작성하고자 했다. 👣 테스트 계획 처음 테스트는 통합 테스트로 진행하려 했었다. 왜냐 하면, 단순히..

프로젝트 회고 2023.11.17

기술 면접 대비 예상 질문 모음 - 11/14 ~ 11/17

39. CI/CD에 대해서 설명해주세요. my) CI/CD는 각각 "Continuous Integration"과 "Continuous Deploy"의 줄임말로서 소프트웨어의 개발 및 배포를 자동화함으로서 더 빠르고 Human Error가 개입할 가능성을 차단해 신뢰성을 높이는 기술 개념입니다. CI는 개발자들이 공유 코드 저장소에 통합할 때마다 빌드 및 테스트를 수행하는 과정을 의미하며, 이것을 통해 코드 통합을 더 자주하게 되어 코드 병합 충돌을 줄여갈 수 있고 버그를 조기에 발견할 수 있다는 이점이 생깁니다 CD는 테스트를 통과한 코드의 프로덕션으로의 배포를 자동화 시키는 것을 의미하며, 이것을 통해 Human Error에 의해 배포할 수 없는 상황이 일어나지 않게 해줍니다. 40. TDD에 대해서 ..

기술 면접 대비 예상 질문 모음 - 10/30 ~ 11/3

31. 대용량 트래픽 발생 시 어떻게 대응해야 하나요? my) 대용량 트래픽이 발생해서 서버의 응답 속도가 도저히 서비스를 진행시키기 어려울 정도라면 2단계에 걸쳐서 해결할 계획입니다. 첫 번째 단계는 서버 내부에 불필요한 계산을 수행하는 로직을 찾아서 제거하는 것 입니다. Java의 Boxing, UnBoxing이라던지 N+1 문제라던지 잘못된 자료구조 적용 등등의 이유로 인해 똑같은 업무를 수행하지만 잘못된 로직으로 인해 발생한 속도 저하를 점검할 것 입니다. 두 번째 단계는 Scale-Up이나 Scale-Out을 하는 것 입니다. 첫 번째 단계를 거쳤음에도 불구하고 응답 속도가 느리다면, 서버의 스펙을 늘려서 처리 속도를 늘리던지 아니면 서버의 갯수를 늘리고 트래픽을 분산시켜야 합니다. 다만, 서버..

기술 면접 대비 예상 질문 모음 - 10/23 ~ 10/27

21. RDBMS의 정규화에 대해 설명해주세요. my) 데이터를 사용할 때, 데이터가 유일하지 않다면 수정, 삭제, 삽입 시 모든 데이터에 일괄 적용되지 않을 수 있습니다. 이것을 DB 이상 현상이라고 부르며 삽입 이상, 수정 이상, 삭제 이상가 이에 해당 합니다. 이런 이상 현상을 없애기 위해선 정규화라는 작업을 수행해야 하는데 주 목적은 데이터의 중복성을 향상시키는 것이라 볼 수 있습니다 정규화는 정말 다양한 것이 존재하지만 3가지의 정규화를 말씀드리겠습니다. 제 1 정규화는 List 형식의 데이터를 분해해 여러 개의 Tuple로 만드는 과정입니다. 예를 들어, 게시글 테이블의 속성 중 댓글들이라는 속성이 있다면 해당 열에는 댓글들의 목록이 할당될 것입니다. 이 때, 게시글 테이블과 댓글 테이블을 분..

기술 면접 대비 예상 질문 모음

👣 문답 7. JVM의 스택과 힙메모리 영역에 대해 아는 만큼 설명해주실 수 있을까요? my) JVM은 프로그램 중 필요한 메모리들을 관리해주는 역할을 가지고 있습니다. JVM이 관리하는 메모리를 영역을 'Runtime Data Area'라고 부르는데 메모리 영역 중 함수를 실행하기 위해 지역 변수를 저장하는 공간을 '스택'이라고 부르며 배열 혹은 참조형 변수를 저장하는 공간을 '힙메모리 영역'이라고 부릅니다. '스택'은 이름 그대로 Stack 자료 구조를 가지고 있으며, 함수가 시작될 때마다 Stack에 Stack Frame이 하나씩 쌓이며 함수가 종료되면 해당 Stack Frame을 Pop시킵니다. 이러한 구조로 인해 굳이 Garbage Collector가 직접 메모리 정리를 하지 않아도 된다는 장점..