This portfolio is optimized for PC screens.
Please visit on a desktop browser for the full experience.
Select Language
scroll down to continue
Recent hands-on implementation
GKE-based cluster management with auto-scaling, health checks, and rolling deployments for zero-downtime updates.
Protocol Buffers for type-safe, high-performance service-to-service communication with streaming support.
Order and payment events are published to Kafka topics. Downstream services like notification and inventory consume asynchronously for decoupled processing.
Distributed tracing, structured logging, and metrics collection across all microservices.
src/features/users/api/useUsers.tsuseCreateUser.tscomponents/UserList.tsxCreateUserForm.tsxschema/user.schema.tsindex.tsorders/...shared/ui/lib/
import ky from 'ky'import { useQuery } from '@tanstack/react-query'import { userSchema } from '../schema/user.schema'const api = ky.create({ prefixUrl: '/api/v1' })export function useUsers() {return useQuery({queryKey: ['users'],queryFn: async () => {const data = await api.get('users').json()return userSchema.array().parse(data)},})}
import { useForm } from '@tanstack/react-form'import { zodValidator } from '@tanstack/zod-form-adapter'import { createUserSchema } from '../schema/user.schema'const form = useForm({validatorAdapter: zodValidator(),defaultValues: { name: '', email: '' },onSubmit: async ({ value }) => {await createUser.mutateAsync(value)},})<form.Subscribe selector={(s) => s.isSubmitting}>{(isSubmitting) => (<Button disabled={isSubmitting}>{isSubmitting ? <Spinner /> : 'Submit'}</Button>)}</form.Subscribe>
Structured, Type-Safe, Production-Ready
Co-locate components, hooks, and types by feature. Each feature is self-contained with its own API layer, UI, and validation logic.
HTTP client ky for clean API calls, TanStack Query for server state management with caching, retry, and optimistic updates.
Zod schemas for runtime validation, TanStack Form for type-safe form state. Loading spinners and error states are handled consistently.
# Build stageFROM golang:1.24-alpine AS builderWORKDIR /appCOPY go.mod go.sum ./RUN go mod downloadCOPY . .RUN CGO_ENABLED=0 go build -o server ./cmd/server# Runtime stageFROM gcr.io/distroless/staticCOPY --from=builder /app/server /serverENTRYPOINT ["/server"]
From Code to Production
Distroless base image for minimal attack surface. Build stage compiles Go binary, runtime stage contains only the executable.
Every push to main triggers build, test, and deploy. Docker images are tagged with commit SHA and pushed to Artifact Registry.
Zero-downtime deployments with health checks, readiness probes, and automatic rollback on failure.
openapi: 3.1.0info:title: User Service APIversion: 1.0.0paths:/api/v1/users:get:summary: List all usersresponses:'200':content:application/json:schema:$ref: '#/components/schemas/Users'
OpenAPI 3.1 Specification
API design starts with OpenAPI specification before any code is written. This ensures consistent contracts between services and clients.
Swagger UI and ReDoc are automatically generated from the spec, keeping documentation always in sync with the actual API.
Server stubs and client SDKs are generated from the spec, ensuring compile-time validation of request/response types.
## Architecture- Clean Architecture + Hexagonal- Always follow SOLID principles## Rules- Backend: Go language- Database: Always add Korean comments- Never guess unknown features## Error Corrections- GKE Spot VM: no taint needed- Terraform: use ADC auth- Always check project ID first
Systematic AI-Assisted Development
Architecture rules, coding conventions, and error corrections are documented in CLAUDE.md. AI follows these constraints consistently across sessions.
Define clean architecture boundaries and SOLID principles before generating any code. The AI works within well-defined guardrails, not freestyle.
Every mistake is analyzed, documented, and fed back into CLAUDE.md. The system learns and never repeats the same error twice.
Startups are my top priority. I believe the best products are built by people who understand both the technology and the business behind it.
I've worn many hats — designing cloud infrastructure with Kubernetes, building real-time data pipelines with Kafka, crafting frontend experiences, and even automating manufacturing workflows. Every project taught me to think beyond code and focus on the problems that truly matter.
I'm looking for a team where I can bring this full-stack perspective to the table and grow a product from zero to one together. If you're building something ambitious, let's talk.
© 2026 Woojeong. All rights reserved.