← projects
$ DungeonCreatures — Manga Reader
A manga reading platform I started with a partner. Focused heavily on image processing infrastructure and memory optimization. The project was discontinued due to a disagreement.
- →Isolated the domain layer from framework dependencies using hexagonal architecture. Image processing logic was written as an independent domain service, with Spring dependencies confined to the port/adapter layer. If the framework changes, the core processing logic continues to work with zero modifications.
- →Designed separate processing pipelines for three image types: Cover, Chapter Page, and Thumbnail. Each type is processed according to its own size, quality, and compression rules.
- →Processing high-resolution manga pages simultaneously created significant memory pressure. I adopted a streaming-based approach to minimize heap usage during image processing. Images are processed in chunks without loading the entire file into memory, substantially reducing RAM consumption.
- →Frequently accessed cover images and thumbnails are cached in Redis. The cache layer prevents repeated processing of the same image and reduces disk I/O load.
- →File type validation, size restrictions, and secure filename generation were applied during the image upload process. Uploaded images are stored under UUID-based names generated by the system, not their original filenames.
- →Designed the Kafka module independently and made image processing asynchronous. When an upload request arrives, the task is queued and a response is returned to the user immediately — the image is processed and stored in the background.
JavaSpring BootRedisKafkaImage ProcessingHexagonal Architecture