분류 전체보기
-
Crawling 성능 40배 올리기, 160분에서 4분대로 -요구사항 충족-Dev Azit/크롤링 성능튜닝 여행기 2023. 4. 4. 21:41
👕 크롤링 애플리케이션은 JBLY 프로젝트 요구 사항인 "파이썬 환경에서 최소 세 개 이상의 쇼핑몰을 모아볼 수 있다."를 수행하는 애플리케이션입니다. 시리즈 포스팅은 성능 개선 과정에서 겪은 문제점과 해결하는 과정을 담고 있습니다. ✒️ 첫 번째 요구사항 충족 글은 성능이 개선되기 전 요구 사항 달성 과정을 포스팅합니다. (160분 소요) ✒️ 두 번째 도구 선택의 중요성 글은 Selenium Tool 걷어내는 과정에서 성능 개선 방법에 대해 포스팅합니다. (30분대로 성능 개선) ✒️ 세 번째 병렬 처리 글은 병렬 처리를 통해 성능을 높일 수 있는 방법에 대해 포스팅합니다.(4분대로 성능 개선) 🍎 Crawling 지정한 임의의 세 개의 쇼핑몰을 모아볼 수 있는 기능을 구현하기 위해선 어떤 방법으로 ..
-
Hard, Soft Delete and etc..TIL 2023. 4. 3. 15:12
🍎 프로젝트 관련 수영장 정보 삭제 시 오늘 알게 된 Soft Delete를 사용했습니다. 이유는 잠재적인 미래 사용을 생각했기 때문입니다. 잠재적인 미래 사용으론 운영되고 있지 않은 수영장을 사용자가 고르게 되면 다른 체육 활동 시설, 운영되고 있는 수영 시설을 제공하기 위함입니다. 좌표계산 부분을 어느 계층에 두어야할 지 고민하고 있습니다. 나중에 리팩토링이 필요한 부분이고 일단 infra에 정의해 진행합니다. 🍏 예외는 정말 예외인 곳에서 사용해야 합니다. 이유는 예외를 생성할 때 스택 추적 전체를 캡처하기 때문에 비용이 많이 발생하기 때문입니다. 🍏 Query Parameter vs Path Variable의 차이 위 두 방식은 어디에 어떤 데이터(명사)를 요청하는 것인지 명확하게 정의하기 위해 ..
-
동기화와 병렬 처리 둘의 상관 관계 그리고 JavaTIL 2023. 4. 3. 15:04
🍎 많은 곳에서 등장하는 Keyword인 동기화와 병렬 처리를 이번 기회에 확실하게 하고자 정리합니다. 나아가 사용하고 있는 Java 라는 언어, 특히 JVM 위에서 어떤 방식으로 동기화와 병렬 처리를 수행하는지 알아보고자 해당 글을 작성합니다. ❓동기화란? 동시다발적으로 실행되는 프로세스들은 공동의 목적을 올바르게 수행하기 위해 서로 협력하며 영향을 주고 받기도 합니다. 협력하여 실행되는 프로세스들은 실행 순서와 자원의 일관성을 보장해야 하기 때문에 반드시 “동기화” 되어야 합니다. 프로세스 동기화란 프로세스들 사이의 수행 시기를 맞추는 것을 의미합니다. 또한 실행의 흐름을 갖는 모든 것은 동기화의 대상입니다. 동기화에는 실행 순서 제어를 위한 동기화가 있고, 상호 배제를 위한 동기화가 존재합니다. ❓..
-
Spring Resolver, Json and ObjectMapper 내부에선 어떤 일들이 발생할까?TIL 2023. 4. 3. 14:42
🍎 큰 양의 데이터를 한꺼번에 적재해본 적이 없어 다량의 데이터가 아닌 한 건의 데이터로 Flow를 잡은 후 큰 데이터를 처리하는 방법을 선택했습니다. 🍎 코드 작성 시 Domain을 우선적으로 생성하는 것이 아닌 Presentation 계층 먼저 작성하기 시작했습니다. ❓ 왜 Domain을 먼저 작성하지 않고 Presentation(Controller)부터 코드를 작성했나요? Controller 부터 작성한 이유는 행위를 먼저 결정하기 위함입니다. 여기서 이야기하는 행위는 객체가 갖는 메소드를 이야기하기보단 프로젝트에서 받은 요청이 수행되는 행위를 뜻합니다. 이를 통해 얻을 수 있는 장점은 데이터 중심적으로 생각하지 않게되고 유연하게 Domain의 상태(property)를 가져갈 수 있습니다. ⚠️ 문..
-
Local 환경에서 프로젝트 인터넷 연결TIL 2023. 4. 3. 14:34
🍎 공공데이터에서 얻은 데이터를 어떤 방식으로 핸들링해야 할지 고민을 했습니다. 🍎 데이터 처리를 고민하던 중 공공데이터에서 OpenAPI 형식으로 API 서버를 통해 데이터를 받을 수 있는 방법을 발견했습니다. ❓ 궁금증이 생겼습니다. 현재 로컬에서 개발하는데 어떻게 OpenApi에 데이터를 가져올 수 있는 건지? ❓ 인터넷에 프로젝트를 연결할 적이 없는데 어떤 방식으로 인터넷 연결이 되어 데이터를 요청할 수 있는 건지? 너무나도 당연하게 숨 쉬듯 인터넷을 사용하고 있어 개발 환경에서 인터넷을 어떤 방식으로 이용하고 있는지 알고 있지 못해 생긴 의문점이었습니다. 이전의 생각으론 WAS 서버를 개발하고 개발한 서버를 “배포”를 해야 인터넷 통신을 할 수 있다는 생각을 하고 있었는데 이런 생각이 틀리다는 ..
-
개인 프로젝트 <내 주변에 수영장>, Project SettingTIL 2023. 4. 3. 14:27
🍎 주변 가까이 있는 수영장을 사용자에게 보여주는 프로젝트를 진행합니다. 프로젝트는 Spring boot를 통해 생성했습니다. ❓ 왜 boot를 통해 프로젝트를 생성했나요? 스프링 부트가 초기 애플리케이션의 설정을 간편하게 처리해 주기 때문에 사용했습니다. 간단한 초기 설정 이외에도 자체적인 웹 서버를 내장하고 있어 빠르고 간편하게 배포를 진행할 수 있습니다. 또한, boot를 사용하면 독립적으로 실행 가능한 Jar 파일로 프로젝트를 빌드할 수 있어, 향후 클라우드 서비스 및 도커와 같은 가상화 환경에 빠르게 배포할 수 있습니다. 🍎 부트를 통해 빠르게 프로젝트 초기 설정을 마칠 수 있었습니다. 서비스를 제공하기 위해 데이터를 어디서 어떤 방식으로 가져와야 하는지 고민이 됐습니다. 🍎 사용자에게 제공할 ..
-
Process와 Thread. 다다익프? 다다익쓰?TIL 2023. 4. 3. 14:15
🍎 크롤링 애플리케이션을 개발하던 중 병렬 처리를 위해 Multi Process와 Multi Thread를 사용했습니다. 몇 개의 Process와 Thread를 사용해야 효율이 좋을지 고민이 생겼습니다. 고민을 해결하기 위해 Process와 Thread를 알아보고 사용 시 주의사항을 알아보는 블로그 글입니다. 🍏 본격적으로 들어가기 전 Processd와 Thread에 관련해 가볍게 정리합니다. Process : Process는 실행 중인 프로그램의 인스턴스이며, 자신만의 독립적인 메모리 공간과 실행 컨텍스트를 갖습니다. 각각의 프로세스는 OS에 의해 별도의 프로세스 ID(PID)가 할당되며, 각각의 프로세스는 자신만의 실행 스레드를 가질 수 있습니다. 여러 프로세스는 서로 독립적이기 때문에 서로의 메모리..