TIL
-
Redis Container vs Embedded Redis 어떤 것을 선택해야 할까요?TIL 2023. 6. 7. 12:19
🍎 Test Package에서 Redis 환경 구축 중 어떤 Redis 환경을 선택해야 할지 고민이 생겨 글을 포스팅합니다. 📚 Redis Container vs Embedded Redis 두 환경은 Redis를 사용하지만 다른 점이 존재합니다. 각각의 장단점을 알아보고 어떤 조건에서 어떤 환경을 선택해야 하는지 알아봅시다. 🍎 Redis Container의 장단점 - Container Redis는 독립된 Redis 서버를 Container 형태로 실행합니다. 주로 Docker를 사용합니다. ✅ 장점 - 외부 Redis 서버와 동일한 기능과 구성 옵션을 제공합니다. 테슽 환경에서 실제 운영 환경과 동일한 Redis 서버를 사용할 수 있습니다. - 복잡한 환경이나 다른 시스템과의 통합 테스트를 보다 유연하..
-
[Python] Multi Processing과 [Java] Multi Processing 차이TIL 2023. 4. 24. 20:12
🍎 Python Crawling Application을 개발하면서 I/O Bound 작업 처리는 Thread를 사용해 처리하는 것이 유리하고 CPU Bound 작업 처리 시엔 자식 프로세스를 여럿 생성해 작업을 처리하는 것이 유리하다고 배웠습니다. 그런데 Java 진영에선 Multi Processing을 어떻게 처리할까요? ❓ 어디서부터 비롯된 궁금증인가요? • Python 진영에선 Multi Processing을 자식 프로세스를 생성해 CPU Bound 작업을 맡아하는 반면 Java 진영에선 여러개의 JVM Instance를 추가적으로 생성해 처리하지 않습니다. 어떤 방식으로 Java 진영에서 Multi Processing을 처리할까요? 🍎 Java는 Thread를 통해서 Multi Processing..
-
노출되면 안되는 데이터는 어떤 방식으로 처리할 수 있을까요?TIL 2023. 4. 16. 13:45
🍎 주소 값을 기반으로 외부 API와 통신해 좌표를 얻어 올 수 있었습니다. 여기서 고민할 부분이 생겼습니다. 외부 API 요청에 대한 응답 시 계정에 부여된 ClientId, ClientKey를 어떤 방식으로 관리하는지입니다. 🍎 노출을 관리해야 하는 이유는 외부에 ClientId, ClientKey가 노출되면 불특정 사용자가 API를 사용하게 될 것이고 이는 많은 문제를 유발할 수 있기 때문입니다. ❓ 외부에 노출되면 안 되는 데이터는 어떤 방식으로 관리해야 안전할까요? 🍏 찾아본 결과 크게 세 가지 방법이 존재합니다. 1. Hard Coding : 필드에 노출되는 값을 정의하고 사용합니다. 2. 환경 변수에 등록해 사용 : Spring 환경에서 @Value를 통해 값을 주입해 사용합니다. 3. 외부..
-
[Python] Thread 설계 의도를 파악한 성능 개선. 7초에서 3초로TIL 2023. 4. 11. 14:42
💻 Crawling Application Code에서 I/O Bound 작업 처리 시, threading Module과 concurrent.futures Module를 사용했습니다. - 두 Module의 장단점을 알지 못한 채 사용해 이번 포스팅에서 깊게 다뤄보겠습니다. 🍎threading Module과 concurrent.futures Module을 사용하는 이유는 해당 포스팅에서 확인할 수 있습니다. 🍎 thread.Thread와 concurrent.futures.ThreadPoolExecutor의 특징을 알아봅시다. 🍏thread.Thread의 특징 - Process안에 존재해 작업 처리 시 사용됩니다. Thread를 사용하는 두 가지 이유는 아래와 같습니다. 1️⃣ Target Method를 실행..
-
파이썬 성능을 높이고 싶을 때 알아야 할 것TIL 2023. 4. 6. 21:16
❓ 파이썬 환경에서 Multi Thread, Multi Processing의 차이점 그리고 성능을 높이고 싶다면? 파이썬에서 멀티 스레드와 멀티 프로세스는 동시에 여러 작업을 수행하는 방식이지만, 그 구현 방식에 차이가 있습니다. • 멀티 스레드는 한 프로세스 내에서 여러 개의 스레드가 동시에 실행되는 방식입니다. 각 스레드는 공유된 메모리에 접근하여 작업을 수행합니다. 이로 인해 스레드 간의 통신이 빠르고 간단하며, 메모리를 공유하기 때문에 메모리 사용량이 적습니다. • 하지만, 공유 메모리에 대한 동시성 제어가 필요하며, 이를 관리하는데 복잡한 코드가 필요할 수 있습니다. 또한, Global Interpreter Lock 제약 조건이 있어 하나의 스레드만 파이썬 인터프리터 내에서 실행될 수 있습니다...
-
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)를 가져갈 수 있습니다. ⚠️ 문..