Dev 20

[설계] 설계 시 우선되어야 할 계층 구조에 대하여

🍎 패키지 계층 구조와 클래스 계층 구조 중 어느 것을 우선으로 생각해야 하는지 정리합니다.- 애플리케이션 요구사항을 받아 코드 작성에 들어가기 전에, 당연하게 생각했던 개발팀 내부의 패키지 계층 구조와 클래스 계층 구조를 다시금 낯설게 바라보게 되었습니다.- 패키지 계층 구조가 아직 정해지지 않은 상황, 즉 백지 상태에서 설계를 시작해야 할 때, 무엇을 우선적으로 고려해야 할지 고민해 보았습니다.🍏 결론- 결론부터 이야기하자면 패키지 계층 구조 설계보다 클래스 계층 구조 설계가 먼저 선행되어야 하는 것이 좋습니다.- 이유는 하나의 패키지 안에 관계를 맺고 있는 클래스들이 존재한다 하더라도 클래스의 계층 구조는 깨지지 않습니다.- 패키지 계층 구조는 단지 클래스들을 보다 보기 쉽게 계층을 나눠 구성하..

Dev 2024.09.03

[Kotlin] reified, inline 그리고 Generic

🍎 Kotlin에서 제공하는 `reified`, `inline` 키워드의 기능을 정리합니다. 키워드들이 무엇인지, 그리고 어떤 상황에서 사용되는지 알아보겠습니다.🍎 `reified`와 `inline`의 사전적 의미- `reified`는 reify의 과거형으로 사전적 의미로 "개념이나 아이디어를 구체적이고 실질적인 형태로 변환하다"라는 의미를 갖습니다.- `inline`은 "줄지어 있는, 일렬로 나란히 있는"을 의미하며 컴퓨터 용어로는 코드를 다른 코드 내에 직접 삽입하는 방식을 의미합니다.🍏 예를 통한 `refied` 이해 - `reified`를 알기 위해선 우선 `inline` 키워드를 알아야 합니다.fun printYourName(operation: () -> Any) { println(..

Dev 2024.09.03

[Kotlin] Any, *, Generic의 공통점과 차이점

🍎 Kotlin 환경에서 Type에 관련해 제공되는 기능 Any, *, Generic을 이해하기 위해 정리한 글🍎 공통점- Any, *, Generic은 Kotlin 환경에서 특정 타입에 구애받지 않고 다양한 타입에 대해 작업할 수 있는 유연성을 제공합니다.🍎 차이점Any, *, Generic은 모두 타입 시스템에서 유연성을 제공하는 역할을 하지만, 각각의 사용 목적과 상황이 다릅니다. 각 요소의 특징을 살펴보면 어떤 상황에서 어떤 타입을 사용하는 것이 적절한지 더 잘 이해할 수 있을 것입니다. 🍏 Any- Any는 모든 타입의 최상위 타입입니다. 모든 Kotlin 타입은 Any 타입을 상속합니다.- Any는 Java의 Object와 유사한 역할을 수행합니다.- 모든 값이 Any Type으로 취급..

Dev 2024.09.01

General한 Cache 적용 위치

🍎 일반적인 상황에서 Cache를 위치시킬 때 참고할만한 사항을 글로 정리합니다. 일반적인 상황이며 경우에 따라서 Cache 적용 위치가 달라질 수 있습니다.❓ Cache는 무엇이며 어떨 때 사용해야 할까?- Cache는 데이터를 저장하여 빠르게 접근할 수 있도록 하는 메모리 구조 또는 저장소입니다. 자주 사용되는 데이터나 계산 결과를 미리 저장해 두어, 동일한 데이터에 대한 요청이 있을 때 데이터를 다시 계산하거나 원본 데이터 소스에 접근하는 대신, 저장된 데이터를 빠르게 제공함으로써 성능을 개선할 때 사용합니다.🍏 어느 위치에 Cache를 적용했을 때 성능을 높일 수 있을까요?병목지점 파악 : 병목지점은 여러 요인에 의해 파악할 수 있습니다. 데이터가 얼마나 자주 변경되는지, 얼마나 자주 조회되는..

Dev 2024.09.01

REST API 설계 및 사용 시 참고 사항

🍎 글의 시작점- 서버 애플리케이션을 개발하며 클라이언트와의 통신을 위해 REST API 스펙을 설계할 때, 도움이 될 만한 팁과 방법을 정리한 글입니다.🍏 참고 사항- API는 기본적으로 Client 곳곳에서 사용할 걸 가정하고 만들어야 하므로, 가급적 범용적으로 만들고 갖다 쓰는 쪽에서 응용해서 사용해야 합니다.- 매우 제한적인 이유로 (퍼포먼스라든지) 전용 API를 만들어서 해결해야 하는 경우도 있지만 그건 원칙을 어긋나는 경우라고 생각합니다.제한적인 상황의 전용 API의 예시임시로 백 투 백으로 서버 데이터를 동기화하는 API의 경우 제한적으로 만들어 사용합니다. 이러한 API는 특정 상황이나 기간에만 필요하고, 시스템이 안정화되거나 이전이 완료되면 사용이 중단되는 경우가 많습니다.- AP..

Dev 2024.09.01

Crawling 성능 40배 올리기, 160분에서 4분대로 -병렬 처리-

👕 크롤링 애플리케이션은 JBLY 프로젝트 요구 사항인 "파이썬 환경에서 최소 세 개 이상의 쇼핑몰을 모아볼 수 있다."를 수행하는 애플리케이션입니다. 시리즈 포스팅은 성능 개선 과정에서 겪은 문제점과 해결하는 과정을 담고 있습니다.✒️ 첫 번째 요구사항 충족 글은 성능이 개선되기 전 요구 사항 달성 과정을 포스팅합니다. (160분 소요)✒️ 두 번째 도구 선택의 중요성 글은 Selenium Tool 걷어내는 과정에서 성능 개선 방법에 대해 포스팅합니다. (30분대로 성능 개선)✒️ 세 번째 병렬 처리 글은 병렬 처리를 통해 성능을 높일 수 있는 방법에 대해 포스팅합니다.(4분대로 성능 개선) 🍏 지금까지 Selenium을 사용해 Crawling을 진행하고 Selenium 도구의 단점을 알게 되어 걷..

Dev 2023.04.06

Crawling 성능 40배 올리기, 160분에서 4분대로 -도구 선택의 중요성-

👕 크롤링 애플리케이션은 JBLY 프로젝트 요구 사항인 "파이썬 환경에서 최소 세 개 이상의 쇼핑몰을 모아볼 수 있다."를 수행하는 애플리케이션입니다. 시리즈 포스팅은 성능 개선 과정에서 겪은 문제점과 해결하는 과정을 담고 있습니다.✒️ 첫 번째 요구사항 충족 글은 성능이 개선되기 전 요구 사항 달성 과정을 포스팅합니다. (160분 소요)✒️ 두 번째 도구 선택의 중요성 글은 Selenium Tool 걷어내는 과정에서 성능 개선 방법에 대해 포스팅합니다. (30분대로 성능 개선)✒️ 세 번째 병렬 처리 글은 병렬 처리를 통해 성능을 높일 수 있는 방법에 대해 포스팅합니다.(4분대로 성능 개선) 🍎 우선, Selenium에서 성능을 향상할 수 있는 방법을 찾아봤습니다.🍏 Selenium을 사용해 요구..

Dev 2023.04.05

Crawling 성능 40배 올리기, 160분에서 4분대로 -요구사항 충족-

👕 크롤링 애플리케이션은 JBLY 프로젝트 요구 사항인 "파이썬 환경에서 최소 세 개 이상의 쇼핑몰을 모아볼 수 있다."를 수행하는 애플리케이션입니다. 시리즈 포스팅은 성능 개선 과정에서 겪은 문제점과 해결하는 과정을 담고 있습니다.✒️ 첫 번째 요구사항 충족 글은 성능이 개선되기 전 요구 사항 달성 과정을 포스팅합니다. (160분 소요)✒️ 두 번째 도구 선택의 중요성 글은 Selenium Tool 걷어내는 과정에서 성능 개선 방법에 대해 포스팅합니다. (30분대로 성능 개선)✒️ 세 번째 병렬 처리 글은 병렬 처리를 통해 성능을 높일 수 있는 방법에 대해 포스팅합니다.(4분대로 성능 개선) 🍎 Crawling지정한 임의의 세 개의 쇼핑몰을 모아볼 수 있는 기능을 구현하기 위해선 어떤 방법으로 해결..

Dev 2023.04.04

동기화와 병렬 처리 둘의 상관 관계 그리고 Java

🍎 많은 곳에서 등장하는 Keyword인 동기화와 병렬 처리를 이번 기회에 확실하게 하고자 정리합니다. 나아가 사용하고 있는 Java 라는 언어, 특히 JVM 위에서 어떤 방식으로 동기화와 병렬 처리를 수행하는지 알아보고자 해당 글을 작성합니다. ❓동기화란?동시다발적으로 실행되는 프로세스들은 공동의 목적을 올바르게 수행하기 위해 서로 협력하며 영향을 주고 받기도 합니다. 협력하여 실행되는 프로세스들은 실행 순서와 자원의 일관성을 보장해야 하기 때문에 반드시 “동기화” 되어야 합니다.프로세스 동기화란 프로세스들 사이의 수행 시기를 맞추는 것을 의미합니다. 또한 실행의 흐름을 갖는 모든 것은 동기화의 대상입니다.동기화에는 실행 순서 제어를 위한 동기화가 있고, 상호 배제를 위한 동기화가 존재합니다. ❓병렬..

Dev 2023.04.03

Process와 Thread. 다다익프? 다다익쓰?

🍎 크롤링 애플리케이션을 개발하던 중 병렬 처리를 위해 Multi Process와 Multi Thread를 사용했습니다. 몇 개의 Process와 Thread를 사용해야 효율이 좋을지 고민이 생겼습니다. 고민을 해결하기 위해 Process와 Thread를 알아보고 사용 시 주의사항을 알아보는 블로그 글입니다.🍏 본격적으로 들어가기 전 Processd와 Thread에 관련해 가볍게 정리합니다.Process : Process는 실행 중인 프로그램의 인스턴스이며, 자신만의 독립적인 메모리 공간과 실행 컨텍스트를 갖습니다. 각각의 프로세스는 OS에 의해 별도의 프로세스 ID(PID)가 할당되며, 각각의 프로세스는 자신만의 실행 스레드를 가질 수 있습니다. 여러 프로세스는 서로 독립적이기 때문에 서로의 메모리..

Dev 2023.04.03