From 30511c3b112f8a77366845ba56d335e3ae4992a2 Mon Sep 17 00:00:00 2001 From: projectmiluju Date: Mon, 15 Sep 2025 17:45:26 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat(start-dev):=20=EA=B8=B0=EC=88=A0=20?= =?UTF-8?q?=EC=8A=A4=ED=83=9D=20=EC=B6=94=EA=B0=80=20DP-430?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- start-dev.sh | 252 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 250 insertions(+), 2 deletions(-) diff --git a/start-dev.sh b/start-dev.sh index 37e3e6d1..8c060539 100755 --- a/start-dev.sh +++ b/start-dev.sh @@ -122,24 +122,148 @@ create_or_recreate_techstacks_index() { "spring boot, springboot, 스프링부트, 스프링 부트", "spring data jpa, springdatajpa, 스프링데이터 jpa, 스프링 데이터 jpa, 스프링데이터 제이피에이, 스프링 데이터 제이피에이, jpa, 제이피에이", "spring security, 스프링시큐리티, 스프링 시큐리티", + "java, 자바", "kotlin, 코틀린", "python, 파이썬", + + "javascript, java script, js, 자바스크립트", "node, node js, nodejs, node.js, 노드, 노드제이에스", "express, 익스프레스, 엑스프레스", + "typescript, ts, 타입스크립트", + "react, 리액트", "next, next js, nextjs, next.js, 넥스트, 넥스트 js", "vue, vue js, vuejs, vue.js, 뷰, 뷰 js", "angular, 앵귤러", + "svelte, 스벨트", + "sveltekit, svelte kit, 스벨트킷", + "nuxt, nuxt js, nuxtjs, nuxt.js, 넉스트, 넉스트 js", + "remix, 리믹스", + "astro, 아스트로", + "tailwind css, tailwind, tailwindcss, 테일윈드, 테일윈드 css", + "scss, sass, 사스", + "vite, 비트", + "webpack, 웹팩", + "rollup, 롤업", + "swc, 에스더블유씨", + "babel, 바벨", + + "react native, rn, 리액트 네이티브", + "flutter, 플러터", + "swiftui, swift ui, 스위프트ui", + "jetpack compose, compose, 제트팩 컴포즈, 젯팩 컴포즈", + "mysql, my sql, 마이에스큐엘", "postgresql, postgres, psql, 포스트그레스, 포스트그레스큐엘", "redis, 레디스", "mongodb, mongo, 몽고디비, 몽고 db", + "oracle, 오라클, 오라클 db", + "mariadb, 마리아디비", + "sqlite, 스큐라이트, 에스큐엘라이트", + "microsoft sql server, sql server, ms sql, mssql, 마이크로소프트 sql 서버", + "cassandra, 카산드라", + "dynamodb, 다이나모디비", + "neo4j, neo 4j, 네오4j", + "clickhouse, 클릭하우스", + "influxdb, influx db, 인플럭스디비", + "timescaledb, timescale db, 타임스케일디비", + "opensearch, 오픈서치", + "meilisearch, meili search, 메일리서치, 멜리서치", + "typesense, 타입센스", + "minio, 미니오", + "docker, 도커", + "docker compose, docker-compose, 도커 컴포즈", "kubernetes, k8s, 쿠버네티스", + "aws, 아마존웹서비스, 아마존 웹 서비스", - "github actions, gh actions, 깃허브액션, 깃허브 액션, 깃헙액션, 깃헙 액션" + "aws lambda, lambda, 람다", + "gcp, google cloud, google cloud platform, 구글 클라우드", + "azure, microsoft azure, ms azure, 애저", + "cloudflare, 클라우드플레어", + "cloud run, gcp cloud run, 클라우드 런", + "cloudflare workers, workers, 클라우드플레어 워커", + + "github actions, gh actions, 깃허브액션, 깃허브 액션, 깃헙액션, 깃헙 액션", + "gitlab ci, gitlab-ci, gitlabci", + "circleci, circle ci", + + "go, golang, 고, 고랭", + "rust, 러스트", + "c/c++, c, c언어, c language, c++, cpp, c plus plus", + "c#, c sharp, 씨샵, 씨샾, 씨샤프", + ".net, dotnet, 닷넷", + "php, 피에이치피", + "ruby, 루비", + "scala, 스칼라", + "dart, 다트", + "swift, 스위프트", + + "spring webflux, webflux, 웹플럭스", + "spring cloud, 스프링 클라우드", + "spring batch, 스프링 배치", + "hibernate, 하이버네이트", + "mybatis, 마이바티스", + "micronaut, 마이크로나ut, 미크로나ut", + "quarkus, 쿠아르쿠스, 콰르쿠스", + "vert.x, vertx, vert x, 버텍스", + "jooq, jOOQ", + + "maven, 메이븐", + "gradle, 그레이들", + + "nestjs, nest js, nest.js, 네스트", + "fastify, 패스티파이", + "koa, 코아", + "hapi, 하피", + "typeorm, 타입오알엠", + "prisma, 프리즈마", + "sequelize, 시퀄라이즈", + + "django, 장고", + "flask, 플라스크", + "fastapi, 패스트api, 패스트 api", + "celery, 셀러리", + + "apache kafka, kafka, 카프카", + "rabbitmq, 래빗mq, 래빗 엠큐", + "nats, 낫츠", + "apache pulsar, pulsar, 펄사", + + "graphql, 그래프큐엘", + "apollo, apollo graphql, 아폴로", + "grpc, gRPC, 지알피씨", + "trpc, tRPC, 티알피씨", + + "nginx, 엔진엑스", + "traefik, traefik proxy, 트래픽 프록시", + "envoy, envoy proxy, 엔보이", + "kong, kong gateway, 콩 게이트웨이", + + "prometheus, 프로메테우스", + "grafana, 그라파나", + "loki, 로키", + "elk stack, elk, elastic stack, 엘라스틱 스택", + "efk stack, efk, 엘에프케이 스택", + "elasticsearch, 엘라스틱서치, 일래스틱서치", + "logstash, 로그스태시", + "kibana, 키바나", + + "opentelemetry, open telemetry, otel, 오픈텔레메트리, 오텔", + "jaeger, 예거", + "zipkin, 집킨", + "sentry, 센트리", + + "terraform, 테라폼", + "ansible, 앤서블", + "helm, 헬름", + "argo cd, argocd, 아르고 cd", + "flux cd, fluxcd, 플럭스 cd", + + "vercel, 버셀", + "netlify, 넷리파이" ] }, @@ -149,24 +273,148 @@ create_or_recreate_techstacks_index() { "spring boot, springboot, 스프링부트, 스프링 부트", "spring data jpa, springdatajpa, 스프링데이터 jpa, 스프링 데이터 jpa, 스프링데이터 제이피에이, 스프링 데이터 제이피에이, jpa, 제이피에이", "spring security, 스프링시큐리티, 스프링 시큐리티", + "java, 자바", "kotlin, 코틀린", "python, 파이썬", + + "javascript, java script, js, 자바스크립트", "node, node js, nodejs, node.js, 노드, 노드제이에스", "express, 익스프레스, 엑스프레스", + "typescript, ts, 타입스크립트", + "react, 리액트", "next, next js, nextjs, next.js, 넥스트, 넥스트 js", "vue, vue js, vuejs, vue.js, 뷰, 뷰 js", "angular, 앵귤러", + "svelte, 스벨트", + "sveltekit, svelte kit, 스벨트킷", + "nuxt, nuxt js, nuxtjs, nuxt.js, 넉스트, 넉스트 js", + "remix, 리믹스", + "astro, 아스트로", + "tailwind css, tailwind, tailwindcss, 테일윈드, 테일윈드 css", + "scss, sass, 사스", + "vite, 비트", + "webpack, 웹팩", + "rollup, 롤업", + "swc, 에스더블유씨", + "babel, 바벨", + + "react native, rn, 리액트 네이티브", + "flutter, 플러터", + "swiftui, swift ui, 스위프트ui", + "jetpack compose, compose, 제트팩 컴포즈, 젯팩 컴포즈", + "mysql, my sql, 마이에스큐엘", "postgresql, postgres, psql, 포스트그레스, 포스트그레스큐엘", "redis, 레디스", "mongodb, mongo, 몽고디비, 몽고 db", + "oracle, 오라클, 오라클 db", + "mariadb, 마리아디비", + "sqlite, 스큐라이트, 에스큐엘라이트", + "microsoft sql server, sql server, ms sql, mssql, 마이크로소프트 sql 서버", + "cassandra, 카산드라", + "dynamodb, 다이나모디비", + "neo4j, neo 4j, 네오4j", + "clickhouse, 클릭하우스", + "influxdb, influx db, 인플럭스디비", + "timescaledb, timescale db, 타임스케일디비", + "opensearch, 오픈서치", + "meilisearch, meili search, 메일리서치, 멜리서치", + "typesense, 타입센스", + "minio, 미니오", + "docker, 도커", + "docker compose, docker-compose, 도커 컴포즈", "kubernetes, k8s, 쿠버네티스", + "aws, 아마존웹서비스, 아마존 웹 서비스", - "github actions, gh actions, 깃허브액션, 깃허브 액션, 깃헙액션, 깃헙 액션" + "aws lambda, lambda, 람다", + "gcp, google cloud, google cloud platform, 구글 클라우드", + "azure, microsoft azure, ms azure, 애저", + "cloudflare, 클라우드플레어", + "cloud run, gcp cloud run, 클라우드 런", + "cloudflare workers, workers, 클라우드플레어 워커", + + "github actions, gh actions, 깃허브액션, 깃허브 액션, 깃헙액션, 깃헙 액션", + "gitlab ci, gitlab-ci, gitlabci", + "circleci, circle ci", + + "go, golang, 고, 고랭", + "rust, 러스트", + "c/c++, c, c언어, c language, c++, cpp, c plus plus", + "c#, c sharp, 씨샵, 씨샾, 씨샤프", + ".net, dotnet, 닷넷", + "php, 피에이치피", + "ruby, 루비", + "scala, 스칼라", + "dart, 다트", + "swift, 스위프트", + + "spring webflux, webflux, 웹플럭스", + "spring cloud, 스프링 클라우드", + "spring batch, 스프링 배치", + "hibernate, 하이버네이트", + "mybatis, 마이바티스", + "micronaut, 마이크로나ut, 미크로나ut", + "quarkus, 쿠아르쿠스, 콰르쿠스", + "vert.x, vertx, vert x, 버텍스", + "jooq, jOOQ", + + "maven, 메이븐", + "gradle, 그레이들", + + "nestjs, nest js, nest.js, 네스트", + "fastify, 패스티파이", + "koa, 코아", + "hapi, 하피", + "typeorm, 타입오알엠", + "prisma, 프리즈마", + "sequelize, 시퀄라이즈", + + "django, 장고", + "flask, 플라스크", + "fastapi, 패스트api, 패스트 api", + "celery, 셀러리", + + "apache kafka, kafka, 카프카", + "rabbitmq, 래빗mq, 래빗 엠큐", + "nats, 낫츠", + "apache pulsar, pulsar, 펄사", + + "graphql, 그래프큐엘", + "apollo, apollo graphql, 아폴로", + "grpc, gRPC, 지알피씨", + "trpc, tRPC, 티알피씨", + + "nginx, 엔진엑스", + "traefik, traefik proxy, 트래픽 프록시", + "envoy, envoy proxy, 엔보이", + "kong, kong gateway, 콩 게이트웨이", + + "prometheus, 프로메테우스", + "grafana, 그라파나", + "loki, 로키", + "elk stack, elk, elastic stack, 엘라스틱 스택", + "efk stack, efk, 엘에프케이 스택", + "elasticsearch, 엘라스틱서치, 일래스틱서치", + "logstash, 로그스태시", + "kibana, 키바나", + + "opentelemetry, open telemetry, otel, 오픈텔레메트리, 오텔", + "jaeger, 예거", + "zipkin, 집킨", + "sentry, 센트리", + + "terraform, 테라폼", + "ansible, 앤서블", + "helm, 헬름", + "argo cd, argocd, 아르고 cd", + "flux cd, fluxcd, 플럭스 cd", + + "vercel, 버셀", + "netlify, 넷리파이" ] } }, From 17596736efed5c0a4db672cb4eaa0d32bed00abc Mon Sep 17 00:00:00 2001 From: projectmiluju Date: Mon, 15 Sep 2025 17:45:42 +0900 Subject: [PATCH 2/4] =?UTF-8?q?feat(techstack):=20=EA=B8=B0=EC=88=A0=20?= =?UTF-8?q?=EC=8A=A4=ED=83=9D=20=EC=B6=94=EA=B0=80=20DP-430?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-prod.yml | 7 ++++++- src/main/resources/application.properties | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 52dccfeb..2e661ca8 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -110,4 +110,9 @@ ai: clova: streamUrl: https://clovastudio.stream.ntruss.com model: HCX-005 - studio-api-key: ${CLOVA_STUDIO_API_KEY} \ No newline at end of file + studio-api-key: ${CLOVA_STUDIO_API_KEY} + + +app: + techstack: + defaults: Spring Boot, Spring Data JPA, Spring Security, Java, Kotlin, Python, Node.js, Express, JavaScript, TypeScript, React, Next.js, Vue.js, Angular, MySQL, PostgreSQL, Redis, MongoDB, Docker, Kubernetes, AWS, GitHub Actions, Go, Rust, C#, .NET, PHP, Ruby, Scala, Dart, C/C++, Spring WebFlux, Spring Cloud, Spring Batch, Hibernate, MyBatis, Micronaut, Quarkus, Vert.x, jOOQ, Maven, Gradle, NestJS, Fastify, Koa, Hapi, TypeORM, Prisma, Sequelize, Django, Flask, FastAPI, Celery, Svelte, SvelteKit, Nuxt.js, Remix, Astro, Tailwind CSS, SCSS, Vite, Webpack, Rollup, SWC, Babel, React Native, Flutter, SwiftUI, Jetpack Compose, Oracle, MariaDB, SQLite, Microsoft SQL Server, Cassandra, DynamoDB, Neo4j, ClickHouse, InfluxDB, TimescaleDB, OpenSearch, Meilisearch, Typesense, MinIO, Apache Kafka, RabbitMQ, NATS, Apache Pulsar, GraphQL, Apollo, gRPC, tRPC, NGINX, Traefik, Envoy, Kong, Prometheus, Grafana, Loki, ELK Stack, EFK Stack, OpenTelemetry, Jaeger, Zipkin, Sentry, Terraform, Ansible, Helm, Argo CD, Flux CD, Docker Compose, Jenkins, GitLab CI, CircleCI, GCP, Azure, Cloudflare, Vercel, Netlify, AWS Lambda, Cloud Run, Cloudflare Workers \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d723ee26..7517e056 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -21,7 +21,7 @@ spring.data.redis.host=localhost spring.data.redis.port=6379 app.techstack.seed-on-startup=true -app.techstack.defaults=Spring Boot, Spring Data JPA, Spring Security, Java, Kotlin, Python, Node.js, Express, TypeScript, React, Next.js, Vue.js, Angular, MySQL, PostgreSQL, Redis, MongoDB, Docker, Kubernetes, AWS, GitHub Actions +app.techstack.defaults=Spring Boot, Spring Data JPA, Spring Security, Java, Kotlin, Python, Node.js, Express, JavaScript, TypeScript, React, Next.js, Vue.js, Angular, MySQL, PostgreSQL, Redis, MongoDB, Docker, Kubernetes, AWS, GitHub Actions, Go, Rust, C#, .NET, PHP, Ruby, Scala, Dart, C/C++, Spring WebFlux, Spring Cloud, Spring Batch, Hibernate, MyBatis, Micronaut, Quarkus, Vert.x, jOOQ, Maven, Gradle, NestJS, Fastify, Koa, Hapi, TypeORM, Prisma, Sequelize, Django, Flask, FastAPI, Celery, Svelte, SvelteKit, Nuxt.js, Remix, Astro, Tailwind CSS, SCSS, Vite, Webpack, Rollup, SWC, Babel, React Native, Flutter, SwiftUI, Jetpack Compose, Oracle, MariaDB, SQLite, Microsoft SQL Server, Cassandra, DynamoDB, Neo4j, ClickHouse, InfluxDB, TimescaleDB, OpenSearch, Meilisearch, Typesense, MinIO, Apache Kafka, RabbitMQ, NATS, Apache Pulsar, GraphQL, Apollo, gRPC, tRPC, NGINX, Traefik, Envoy, Kong, Prometheus, Grafana, Loki, ELK Stack, EFK Stack, OpenTelemetry, Jaeger, Zipkin, Sentry, Terraform, Ansible, Helm, Argo CD, Flux CD, Docker Compose, Jenkins, GitLab CI, CircleCI, GCP, Azure, Cloudflare, Vercel, Netlify, AWS Lambda, Cloud Run, Cloudflare Workers spring.batch.job.enabled=false spring.batch.jdbc.initialize-schema=always From 1e76bf146194717833cb6b781d75f081eed7b1b2 Mon Sep 17 00:00:00 2001 From: projectmiluju Date: Mon, 15 Sep 2025 17:45:54 +0900 Subject: [PATCH 3/4] =?UTF-8?q?refactor(techstack):=20=EA=B8=B0=EC=88=A0?= =?UTF-8?q?=20=EC=8A=A4=ED=83=9D=20=EC=B6=94=EA=B0=80=20DP-430?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/goorm/ddok/member/bootstrap/TechStackSeeder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/goorm/ddok/member/bootstrap/TechStackSeeder.java b/src/main/java/goorm/ddok/member/bootstrap/TechStackSeeder.java index 7b60ba7a..9e9e5834 100644 --- a/src/main/java/goorm/ddok/member/bootstrap/TechStackSeeder.java +++ b/src/main/java/goorm/ddok/member/bootstrap/TechStackSeeder.java @@ -22,14 +22,14 @@ public class TechStackSeeder implements ApplicationRunner { private final TechStackRepository techStackRepository; // 쉼표로 구분된 기본 스택 목록을 yml에서 주입 (미설정 시 기본값 사용) - @Value("#{'${app.techstack.defaults:Spring Boot,Spring Data JPA,Spring Security,Java,Kotlin,Python,Node.js,Express,TypeScript,React,Next.js,Vue.js,Angular,MySQL,PostgreSQL,Redis,MongoDB,Docker,Kubernetes,AWS,GitHub Actions}'.split(',')}") + @Value("#{'${app.techstack.defaults}'.split(',')}") private List defaultStacks; @Override @Transactional public void run(ApplicationArguments args) { long count = techStackRepository.count(); - if (count > 0) { + if (count > defaultStacks.size()) { log.info("[TechStackSeeder] Skip seeding. Existing rows: {}", count); return; } From fd2689666b2235e625bcd69787492d5f97d38de5 Mon Sep 17 00:00:00 2001 From: projectmiluju Date: Mon, 15 Sep 2025 17:48:23 +0900 Subject: [PATCH 4/4] =?UTF-8?q?refactor(search):=20=EC=9C=A0=EC=A0=80=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=20=EA=B2=B0=EA=B3=BC=20=EB=8B=89=EB=84=A4?= =?UTF-8?q?=EC=9E=84=20=EC=98=A4=EB=A6=84=EC=B0=A8=20=EC=88=9C=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20DP-430?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/goorm/ddok/player/service/ProfileSearchService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/goorm/ddok/player/service/ProfileSearchService.java b/src/main/java/goorm/ddok/player/service/ProfileSearchService.java index b5ebf74a..bdef069e 100644 --- a/src/main/java/goorm/ddok/player/service/ProfileSearchService.java +++ b/src/main/java/goorm/ddok/player/service/ProfileSearchService.java @@ -47,7 +47,7 @@ public Page searchPlayers(String keyword, int page, int s Pageable pageable = PageRequest.of( page, size, - Sort.by(Sort.Order.asc("nickname"), Sort.Order.asc("id")) + Sort.by(Sort.Order.asc("nickname")) ); Specification spec = Specification.where(null);