Ingeniero Java
Java
Java es uno de los lenguajes de programación más utilizados en el mundo. La principal característica introducida por Java en el lejano 1995 fue incorporar una máquina virtual sobre la que ejecutar sus binarios, haciendo más fácil ejecutar un mismo programa en diferentes arquitecturas y/o plataformas instalando en éstas la máquina Java correspondiente. Otra de sus principales características es su recolector de basura (Garbage collector) que lo diferenció en su momento de otros lenguajes de programación y permite al desarrollador abstraerse de la gestión de memoria en el día a día.
GraalVM, uno de los proyectos más punteros lanzado por Oracle.
La gran adopción de Java, la gran cantidad de herramientas y librerías open-source en su ecosistema y su buen rendimiento lo han convertido en una de las plataformas más atractivas para elegirla como tecnología referencia en el Backend. La nueva versión LTS Java 21 ha modernizado significativamente tanto el lenguaje como la plataforma con funcionalidades que lo hacen mucho más adecuado para el desarrollo de microservicios Cloud Native como GraalVM y Project Loom.
Experiencia
Tengo más de cinco años de experiencia en Java, utilizando Java como base en diversas tareas de desarrollo en una plataforma digital con arquitectura de microservicios. Mi principal cometido ha sido entregar código óptimo y funcional que cumpla con los estándares de rendimiento esperados, que cumpla con las especificaciones del cliente y con las necesidades de los usuarios. También he trabajado en encontrar puntos de mejora tanto a nivel funcional como a nivel de rendimiento de la plataforma. Éstas serían las principales actividades llevadas a cabo desarrollando en Java.
http API REST
Implementación y diseño de APIs utilizadas por diferentes tecnologías cliente.
system_update_alt Desarrollo Backend
Análisis de plataforma backend nueva o existente. Optimización y mejora continua de aplicaciones heredadas.
swap_horiz Programación reactiva
Uso de la programación reactiva para poder implementar servicios no bloqueantes y mayor escalabilidad con menos recursos.
hexagon Arquitectura de microservicios
Desarrollo de microservicios utilizando patrones arquitecturales como Event-driven Architecture, Eventual Consistency y CQRS.
directions_boat Kubernetes y Docker
Orquestación de microservicios empaquetados en contenedores Docker con Kubernetes.
Spring Boot
Dentro del ecosistema Java, Spring Boot es el framework por excelencia para el desarrollo de servicios web. Dentro del mundo Spring, tengo experiencia en los siguientes paquetes.
-
Spring Web
Starter base para desarrollar servicios con APIs REST bloqueantes y/o aplicaciones web tradicionales. -
Spring Webflux
Starter base para desarrollar servicios con APIs REST con programación reactiva. -
Spring Security
Starter con soporte a infinidad de opciones de seguridad. Soporte OAuth2 y OIDC. -
Spring Data R2DBC
Starter para realizar acceso a bases de datos relacionales a través de una API reactiva. -
Spring Data JDBC
Starter para realizar acceso a bases de datos relacionales a través de JDBC. -
Spring Data Redis Reactive
Módulo para comunicar un servicio con Redis. Provee de una extensa API para ejecutar comandos Redis. -
Spring AMQP/RabbitMQ
Módulo para conectar con RabbitMQ con el objetivo de poder escuchar y producir mensajes en colas del broker de mensajería. Ofrece una API para poder gestionar colas y exchanges programáticamente. -
Project Reactor
Librería basada en la especificación Reactive Streams y estándar de facto a la hora de utilizar el paradigma de programación reactiva. -
Liquibase
Utilidad para gestionar migraciones del esquema de base de datos necesario para la ejecución de nuestro servicio/aplicación. -
Thymeleaf
Motor de plantillas HTML
Para el testeo automático de las funcionalidades proporcionadas por los microservicios cabe añadir las librerías que he utilizado a la hora de escribir tests automáticos.
Como herramientas de construcción de proyectos Java y microservicios destacaría las tecnologías.