From b08e529d86e50eecd3a1e01fddcbc81eb511ff64 Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Mon, 28 Jul 2025 19:44:20 +0900 Subject: [PATCH 01/21] =?UTF-8?q?chore:=20internal=20=EB=AA=A8=EB=93=88?= =?UTF-8?q?=EC=97=90=20common=20=EB=AA=A8=EB=93=88=20=EA=B0=80=EC=A0=B8?= =?UTF-8?q?=EC=98=A4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/build.gradle | 1 + internal/src/main/resources/application.yml | 6 +++++- internal/src/test/resources/application.yml | 4 +++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/internal/build.gradle b/internal/build.gradle index 45dcdee..376861f 100644 --- a/internal/build.gradle +++ b/internal/build.gradle @@ -8,6 +8,7 @@ ext { dependencies { implementation project(':domain') + implementation project(':common') implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' diff --git a/internal/src/main/resources/application.yml b/internal/src/main/resources/application.yml index 801df34..2d5d760 100644 --- a/internal/src/main/resources/application.yml +++ b/internal/src/main/resources/application.yml @@ -1,6 +1,10 @@ spring: + application: + name: kokomen-notification-internal profiles: - include: domain + include: + - domain + - common jackson: property-naming-strategy: SNAKE_CASE default-property-inclusion: non_null diff --git a/internal/src/test/resources/application.yml b/internal/src/test/resources/application.yml index 47869b4..71202a2 100644 --- a/internal/src/test/resources/application.yml +++ b/internal/src/test/resources/application.yml @@ -1,6 +1,8 @@ spring: profiles: - include: domain-test + include: + - domain-test + - common-test main: lazy-initialization: true jackson: From 1e520b82626141b95951f450397445c7948a3be8 Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Mon, 28 Jul 2025 19:44:38 +0900 Subject: [PATCH 02/21] =?UTF-8?q?chore:=20logback-spring.xml=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/src/main/resources/logback-spring.xml | 45 ++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 common/src/main/resources/logback-spring.xml diff --git a/common/src/main/resources/logback-spring.xml b/common/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..8b0cbbc --- /dev/null +++ b/common/src/main/resources/logback-spring.xml @@ -0,0 +1,45 @@ + + + + + + + + [%X{requestId:-noRequest}] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + ./logs/app.log + + ./logs/app.%d{yyyy-MM-dd}.log + 30 + + + [%X{requestId:-noRequest}] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + + + + + + + + + + + + + + + + From 6ec5cf5387b2e4d94735d184fcb2c14d5b0487fd Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Mon, 28 Jul 2025 19:45:01 +0900 Subject: [PATCH 03/21] =?UTF-8?q?feat:=20=EC=9A=94=EC=B2=AD/=EC=9D=91?= =?UTF-8?q?=EB=8B=B5=EC=9D=84=20=EB=A1=9C=EA=B9=85=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=ED=95=84=ED=84=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kokomen/global/logging/LoggingFilter.java | 78 +++++++++++++++++++ .../kokomen/global/logging/LoggingFilter.java | 65 ++++++++++++++++ 2 files changed, 143 insertions(+) create mode 100644 api/src/main/java/com/samhap/kokomen/global/logging/LoggingFilter.java create mode 100644 internal/src/main/java/com/samhap/kokomen/global/logging/LoggingFilter.java diff --git a/api/src/main/java/com/samhap/kokomen/global/logging/LoggingFilter.java b/api/src/main/java/com/samhap/kokomen/global/logging/LoggingFilter.java new file mode 100644 index 0000000..52bc5ed --- /dev/null +++ b/api/src/main/java/com/samhap/kokomen/global/logging/LoggingFilter.java @@ -0,0 +1,78 @@ +package com.samhap.kokomen.global.logging; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; +import java.io.IOException; +import java.util.List; +import java.util.UUID; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; +import org.springframework.util.AntPathMatcher; +import org.springframework.util.StopWatch; +import org.springframework.web.filter.OncePerRequestFilter; + +@Slf4j +@Component +public class LoggingFilter extends OncePerRequestFilter { + + private static final List WHITE_LIST = List.of( + "/favicon.ico", + "/docs/index.html", + "/metrics", + "/actuator/**"); + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) + throws ServletException, IOException { + StopWatch stopWatch = new StopWatch(); + stopWatch.start(); + + String requestId = readRequestId(request); + MDC.put("requestId", requestId); + + try { + filterChain.doFilter(request, response); + } finally { + stopWatch.stop(); + log.info("{} {} {} ({}) - {}ms", + readMemberId(request), + request.getMethod(), + request.getRequestURI(), + HttpStatus.valueOf(response.getStatus()), + stopWatch.getTotalTimeMillis()); + + MDC.clear(); + } + } + + private String readRequestId(HttpServletRequest request) { + String requestId = request.getHeader("X-RequestID"); + if (requestId != null && !requestId.isEmpty()) { + return requestId; + } + return UUID.randomUUID().toString(); + } + + private String readMemberId(HttpServletRequest request) { + HttpSession session = request.getSession(false); + if (session != null) { + Long memberId = (Long) session.getAttribute("MEMBER_ID"); + if (memberId != null) { + return "memberId=" + memberId; + } + } + return ""; + } + + @Override + protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException { + String requestURI = request.getRequestURI(); + AntPathMatcher antPathMatcher = new AntPathMatcher(); + return WHITE_LIST.stream().anyMatch(path -> antPathMatcher.match(path, requestURI)); + } +} diff --git a/internal/src/main/java/com/samhap/kokomen/global/logging/LoggingFilter.java b/internal/src/main/java/com/samhap/kokomen/global/logging/LoggingFilter.java new file mode 100644 index 0000000..2b4e7af --- /dev/null +++ b/internal/src/main/java/com/samhap/kokomen/global/logging/LoggingFilter.java @@ -0,0 +1,65 @@ +package com.samhap.kokomen.global.logging; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; +import java.util.UUID; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; +import org.springframework.util.AntPathMatcher; +import org.springframework.util.StopWatch; +import org.springframework.web.filter.OncePerRequestFilter; + +@Slf4j +@Component +public class LoggingFilter extends OncePerRequestFilter { + + private static final List WHITE_LIST = List.of( + "/favicon.ico", + "/docs/index.html", + "/metrics", + "/actuator/**"); + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) + throws ServletException, IOException { + StopWatch stopWatch = new StopWatch(); + stopWatch.start(); + + String requestId = readRequestId(request); + MDC.put("requestId", requestId); + + try { + filterChain.doFilter(request, response); + } finally { + stopWatch.stop(); + log.info("{} {} ({}) - {}ms", + request.getMethod(), + request.getRequestURI(), + HttpStatus.valueOf(response.getStatus()), + stopWatch.getTotalTimeMillis()); + + MDC.clear(); + } + } + + private String readRequestId(HttpServletRequest request) { + String requestId = request.getHeader("X-RequestID"); + if (requestId != null && !requestId.isEmpty()) { + return requestId; + } + return UUID.randomUUID().toString(); + } + + @Override + protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException { + String requestURI = request.getRequestURI(); + AntPathMatcher antPathMatcher = new AntPathMatcher(); + return WHITE_LIST.stream().anyMatch(path -> antPathMatcher.match(path, requestURI)); + } +} From cc5b94b12da939f023c1ee19388fe0aa8e2192da Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Mon, 28 Jul 2025 19:45:15 +0900 Subject: [PATCH 04/21] =?UTF-8?q?chore:=20=EC=96=B4=ED=94=8C=EB=A6=AC?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=85=98=20=EB=84=A4=EC=9E=84=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/src/main/resources/application.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/api/src/main/resources/application.yml b/api/src/main/resources/application.yml index a33bbbb..82ec0bb 100644 --- a/api/src/main/resources/application.yml +++ b/api/src/main/resources/application.yml @@ -1,4 +1,6 @@ spring: + application: + name: kokomen-notification-api profiles: include: - domain From 0a4f5d8ab5cf35a81a9c2af9610ac8d3df6940cc Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Mon, 28 Jul 2025 19:45:51 +0900 Subject: [PATCH 05/21] =?UTF-8?q?chore:=20dev=20=ED=99=98=EA=B2=BD=20?= =?UTF-8?q?=ED=94=84=EB=A1=AC=ED=85=8C=EC=9D=BC=20=EC=BB=A8=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EB=84=88=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/dev/docker-compose-dev.yml | 19 +++++++++++++++++ docker/dev/promtail/promtail.yaml | 34 +++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 docker/dev/promtail/promtail.yaml diff --git a/docker/dev/docker-compose-dev.yml b/docker/dev/docker-compose-dev.yml index 1e00031..beb91af 100644 --- a/docker/dev/docker-compose-dev.yml +++ b/docker/dev/docker-compose-dev.yml @@ -76,9 +76,28 @@ services: networks: - dev-kokomen-net + promtail-notification-dev: + image: grafana/promtail + container_name: promtail-notification-dev + volumes: + - ./promtail/promtail.yaml:/etc/promtail/promtail.yaml + - ./notification/internal/app/logs:/logs/internal + - ./notification/api/app/logs:/logs/api + - promtail-notification-tmp:/tmp + command: + - "-config.file=/etc/promtail/promtail.yaml" + - "-config.expand-env=true" + restart: unless-stopped + environment: + TZ: Asia/Seoul + HOSTNAME: ${HOSTNAME} + networks: + - dev-kokomen-net + volumes: notification-mysql-data: notification-mysql-init: + promtail-notification-tmp: networks: dev-kokomen-net: diff --git a/docker/dev/promtail/promtail.yaml b/docker/dev/promtail/promtail.yaml new file mode 100644 index 0000000..a16d9d9 --- /dev/null +++ b/docker/dev/promtail/promtail.yaml @@ -0,0 +1,34 @@ +server: + http_listen_port: 9080 + +positions: + filename: /tmp/positions.yaml + +clients: + - url: http://loki:3100/loki/api/v1/push + +scrape_configs: + - job_name: kokomen-notification-api-dev + static_configs: + - labels: + job: kokomen-notification-api + app: kokomen-notification-internal + host: ${HOSTNAME} + __path__: /logs/api/app.log + pipeline_stages: + - regex: + expression: '\[.*?\] [\d\-:.\s]+ \[.*?\] (?P[A-Z]+)\s' + - labels: + level: + - job_name: kokomen-notification-internal-dev + static_configs: + - labels: + job: kokomen-notification-internal + app: kokomen-notification-api + host: ${HOSTNAME} + __path__: /logs/internal/app.log + pipeline_stages: + - regex: + expression: '\[.*?\] [\d\-:.\s]+ \[.*?\] (?P[A-Z]+)\s' + - labels: + level: From 8d893c4bfb921d2250d5e4c889af15bf2cfac385 Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Mon, 28 Jul 2025 19:48:22 +0900 Subject: [PATCH 06/21] =?UTF-8?q?chore:=20=EC=9E=84=EC=8B=9C=EB=A1=9C=20PR?= =?UTF-8?q?=EC=9D=B4=20=EC=97=B4=EB=A6=B4=20=EB=95=8C=20CD=20=EA=B0=80=20?= =?UTF-8?q?=EB=90=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/cd-api-dev.yml | 8 ++++---- .github/workflows/cd-internal-dev.yml | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/cd-api-dev.yml b/.github/workflows/cd-api-dev.yml index 7f91bba..8a7635c 100644 --- a/.github/workflows/cd-api-dev.yml +++ b/.github/workflows/cd-api-dev.yml @@ -1,7 +1,7 @@ name: CD API DEV on: - push: + pull_request: branches: [ develop ] jobs: @@ -78,10 +78,10 @@ jobs: [ -d kokomen-notification ] || git clone --filter=blob:none --no-checkout https://github.com/samhap-soft/kokomen-notification.git cd kokomen-notification git sparse-checkout init --cone - git fetch origin develop - git checkout develop + git fetch origin feature/#10 + git checkout feature/#10 git sparse-checkout set docker/dev - git pull origin develop + git pull origin feature/#10 - name: Docker Image pull run: sudo docker pull samhap/kokomen-notification-api:dev diff --git a/.github/workflows/cd-internal-dev.yml b/.github/workflows/cd-internal-dev.yml index de5d175..13ef692 100644 --- a/.github/workflows/cd-internal-dev.yml +++ b/.github/workflows/cd-internal-dev.yml @@ -1,7 +1,7 @@ name: CD INTERNAL DEV on: - push: + pull_request: branches: [ develop ] jobs: @@ -78,10 +78,10 @@ jobs: [ -d kokomen-notification ] || git clone --filter=blob:none --no-checkout https://github.com/samhap-soft/kokomen-notification.git cd kokomen-notification git sparse-checkout init --cone - git fetch origin develop - git checkout develop + git fetch origin feature/#10 + git checkout feature/#10 git sparse-checkout set docker/dev - git pull origin develop + git pull origin feature/#10 - name: Docker Image pull run: sudo docker pull samhap/kokomen-notification-internal:dev From e02998b92e35b3b7a3ccac5d82d53e341a9e08c2 Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Mon, 28 Jul 2025 21:43:00 +0900 Subject: [PATCH 07/21] =?UTF-8?q?chore:=20=EC=9E=84=EC=8B=9C=EB=A1=9C=20my?= =?UTF-8?q?sql=EB=8F=84=20=EA=B0=99=EC=9D=B4=20=EB=9D=84=EC=9A=B0=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/cd-api-dev.yml | 2 +- .github/workflows/cd-internal-dev.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cd-api-dev.yml b/.github/workflows/cd-api-dev.yml index 8a7635c..e35a7ae 100644 --- a/.github/workflows/cd-api-dev.yml +++ b/.github/workflows/cd-api-dev.yml @@ -95,4 +95,4 @@ jobs: run: | export HOSTNAME=$(hostname) cd kokomen-notification/docker/dev - sudo -E docker compose -f docker-compose-dev.yml up -d kokomen-notification-dev-api + sudo -E docker compose -f docker-compose-dev.yml up -d kokomen-notification-dev-api kokomen-notification-mysql-dev diff --git a/.github/workflows/cd-internal-dev.yml b/.github/workflows/cd-internal-dev.yml index 13ef692..3db28b8 100644 --- a/.github/workflows/cd-internal-dev.yml +++ b/.github/workflows/cd-internal-dev.yml @@ -95,4 +95,4 @@ jobs: run: | export HOSTNAME=$(hostname) cd kokomen-notification/docker/dev - sudo -E docker compose -f docker-compose-dev.yml up -d kokomen-notification-dev-internal + sudo -E docker compose -f docker-compose-dev.yml up -d kokomen-notification-dev-internal kokomen-notification-mysql-dev From 6cb109686b07cbd0fa9e8be0d504a4e250d828c2 Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Tue, 29 Jul 2025 16:19:40 +0900 Subject: [PATCH 08/21] =?UTF-8?q?chore:=20actuator=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/local-api-docker-compose.yml | 1 + api/src/main/resources/application.yml | 4 ++++ common/build.gradle | 3 +++ common/src/main/resources/application-common.yml | 16 +++++++++++++++- docker/dev/docker-compose-dev.yml | 2 ++ internal/local-internal-docker-compose.yml | 1 + internal/src/main/resources/application.yml | 4 ++++ 7 files changed, 30 insertions(+), 1 deletion(-) diff --git a/api/local-api-docker-compose.yml b/api/local-api-docker-compose.yml index b648071..de7418f 100644 --- a/api/local-api-docker-compose.yml +++ b/api/local-api-docker-compose.yml @@ -6,6 +6,7 @@ services: no_cache: true ports: - 8100:8080 + - 8001:8001 environment: SPRING_PROFILES_ACTIVE: local networks: diff --git a/api/src/main/resources/application.yml b/api/src/main/resources/application.yml index 82ec0bb..32a5121 100644 --- a/api/src/main/resources/application.yml +++ b/api/src/main/resources/application.yml @@ -1,3 +1,7 @@ +management: + server: + address: 0.0.0.0 + port: 8001 spring: application: name: kokomen-notification-api diff --git a/common/build.gradle b/common/build.gradle index 82fe083..e6d9b47 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -1,5 +1,8 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-redis' + implementation 'org.springframework.boot:spring-boot-starter-actuator' + + implementation 'io.micrometer:micrometer-registry-prometheus' } bootJar { diff --git a/common/src/main/resources/application-common.yml b/common/src/main/resources/application-common.yml index b975e1e..8ae6d40 100644 --- a/common/src/main/resources/application-common.yml +++ b/common/src/main/resources/application-common.yml @@ -1,4 +1,18 @@ -# Common configuration for all profiles +management: + endpoint: + health: + show-components: always + access: read_only + info: + access: read_only + metrics: + access: read_only + prometheus: + access: read_only + endpoints: + web: + exposure: + include: prometheus, info, health, metrics --- # local profile spring: diff --git a/docker/dev/docker-compose-dev.yml b/docker/dev/docker-compose-dev.yml index beb91af..7ca932b 100644 --- a/docker/dev/docker-compose-dev.yml +++ b/docker/dev/docker-compose-dev.yml @@ -6,6 +6,7 @@ services: restart: on-failure:3 expose: - 8080 + - 8000 volumes: - ./notification/internal/app/logs:/logs environment: @@ -24,6 +25,7 @@ services: restart: on-failure:3 expose: - 8080 + - 8001 volumes: - ./notification/api/app/logs:/logs environment: diff --git a/internal/local-internal-docker-compose.yml b/internal/local-internal-docker-compose.yml index b91c25f..295b201 100644 --- a/internal/local-internal-docker-compose.yml +++ b/internal/local-internal-docker-compose.yml @@ -7,6 +7,7 @@ services: no_cache: true ports: - 8090:8080 + - 8000:8000 environment: SPRING_PROFILES_ACTIVE: local networks: diff --git a/internal/src/main/resources/application.yml b/internal/src/main/resources/application.yml index 2d5d760..1d0eb15 100644 --- a/internal/src/main/resources/application.yml +++ b/internal/src/main/resources/application.yml @@ -1,3 +1,7 @@ +management: + server: + address: 0.0.0.0 + port: 8000 spring: application: name: kokomen-notification-internal From cc6567ba7ca6dfadf025860385e0442dc1f2bbbc Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Tue, 29 Jul 2025 17:27:17 +0900 Subject: [PATCH 09/21] =?UTF-8?q?chore:=20prod=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=ED=95=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/src/main/resources/application.yml | 14 ++++++++++++++ common/src/main/resources/application-common.yml | 10 ++++++++++ domain/src/main/resources/application-domain.yml | 16 ++++++++++++++++ internal/src/main/resources/application.yml | 7 ------- 4 files changed, 40 insertions(+), 7 deletions(-) diff --git a/api/src/main/resources/application.yml b/api/src/main/resources/application.yml index 32a5121..507dd68 100644 --- a/api/src/main/resources/application.yml +++ b/api/src/main/resources/application.yml @@ -52,3 +52,17 @@ server: cookie: domain: kokomen.kr secure: false +--- +# prod profile +spring: + config: + activate: + on-profile: prod +cors: + allowed-origins: https://kokomen.kr, https://www.kokomen.kr +server: + servlet: + session: + cookie: + domain: kokomen.kr + secure: true diff --git a/common/src/main/resources/application-common.yml b/common/src/main/resources/application-common.yml index 8ae6d40..42e3aa5 100644 --- a/common/src/main/resources/application-common.yml +++ b/common/src/main/resources/application-common.yml @@ -34,3 +34,13 @@ spring: redis: host: kokomen-redis-dev port: 6379 +--- +# prod profile +spring: + config: + activate: + on-profile: prod + data: + redis: + host: ${REDIS_PRIMARY_HOST_PROD} + port: 6379 diff --git a/domain/src/main/resources/application-domain.yml b/domain/src/main/resources/application-domain.yml index 1e73ec2..d70c17d 100644 --- a/domain/src/main/resources/application-domain.yml +++ b/domain/src/main/resources/application-domain.yml @@ -42,3 +42,19 @@ spring: show-sql: false hibernate: ddl-auto: validate +--- +# prod profile +spring: + config: + activate: + on-profile: prod + datasource: + url: ${NOTIFICATION_DATASOURCE_URL_PROD} + username: ${NOTIFICATION_DATASOURCE_USERNAME_PROD} + password: ${NOTIFICATION_DATASOURCE_PASSWORD_PROD} + driver-class-name: com.mysql.cj.jdbc.Driver + jpa: + database: mysql + show-sql: false + hibernate: + ddl-auto: validate diff --git a/internal/src/main/resources/application.yml b/internal/src/main/resources/application.yml index 1d0eb15..31b55bf 100644 --- a/internal/src/main/resources/application.yml +++ b/internal/src/main/resources/application.yml @@ -12,10 +12,3 @@ spring: jackson: property-naming-strategy: SNAKE_CASE default-property-inclusion: non_null - ---- -# local profile -spring: - config: - activate: - on-profile: local From 532c275a43bf0daec502f336a05396f33e71e5bc Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Tue, 29 Jul 2025 17:27:32 +0900 Subject: [PATCH 10/21] =?UTF-8?q?chore:=20prod=20yml=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/dev/promtail/promtail.yaml | 4 +- docker/prod/docker-compose-prod.yml | 85 +++++++++++++++++++++++++++++ docker/prod/nginx/nginx.conf | 64 ++++++++++++++++++++++ docker/prod/promtail/promtail.yaml | 34 ++++++++++++ 4 files changed, 185 insertions(+), 2 deletions(-) create mode 100644 docker/prod/docker-compose-prod.yml create mode 100644 docker/prod/nginx/nginx.conf create mode 100644 docker/prod/promtail/promtail.yaml diff --git a/docker/dev/promtail/promtail.yaml b/docker/dev/promtail/promtail.yaml index a16d9d9..a455e18 100644 --- a/docker/dev/promtail/promtail.yaml +++ b/docker/dev/promtail/promtail.yaml @@ -12,7 +12,7 @@ scrape_configs: static_configs: - labels: job: kokomen-notification-api - app: kokomen-notification-internal + app: kokomen-notification-api host: ${HOSTNAME} __path__: /logs/api/app.log pipeline_stages: @@ -24,7 +24,7 @@ scrape_configs: static_configs: - labels: job: kokomen-notification-internal - app: kokomen-notification-api + app: kokomen-notification-internal host: ${HOSTNAME} __path__: /logs/internal/app.log pipeline_stages: diff --git a/docker/prod/docker-compose-prod.yml b/docker/prod/docker-compose-prod.yml new file mode 100644 index 0000000..f436163 --- /dev/null +++ b/docker/prod/docker-compose-prod.yml @@ -0,0 +1,85 @@ +services: + kokomen-notification-api: + image: samhap/kokomen-notification-api:prod + container_name: kokomen-notification-api + restart: on-failure:3 + expose: + - 8080 + ports: + - "8001:8001" + volumes: + - ./notification/api/logs:/logs + environment: + TZ: Asia/Seoul + JAVA_TOOL_OPTIONS: -Duser.timezone=Asia/Seoul + HOSTNAME: ${HOSTNAME} + SPRING_PROFILES_ACTIVE: prod + REDIS_PRIMARY_HOST_PROD: ${REDIS_PRIMARY_HOST_PROD} + NOTIFICATION_DATASOURCE_URL_PROD: ${NOTIFICATION_DATASOURCE_URL_PROD} + NOTIFICATION_DATASOURCE_USERNAME_PROD: ${NOTIFICATION_DATASOURCE_USERNAME_PROD} + NOTIFICATION_DATASOURCE_PASSWORD_PROD: ${NOTIFICATION_DATASOURCE_PASSWORD_PROD} + + kokomen-notification-internal: + image: samhap/kokomen-notification-internal:prod + container_name: kokomen-notification-internal + restart: on-failure:3 + expose: + - 8080 + ports: + - "8000:8000" + volumes: + - ./notification/internal/logs:/logs + environment: + TZ: Asia/Seoul + JAVA_TOOL_OPTIONS: -Duser.timezone=Asia/Seoul + HOSTNAME: ${HOSTNAME} + SPRING_PROFILES_ACTIVE: prod + REDIS_PRIMARY_HOST_PROD: ${REDIS_PRIMARY_HOST_PROD} + NOTIFICATION_DATASOURCE_URL_PROD: ${NOTIFICATION_DATASOURCE_URL_PROD} + NOTIFICATION_DATASOURCE_USERNAME_PROD: ${NOTIFICATION_DATASOURCE_USERNAME_PROD} + NOTIFICATION_DATASOURCE_PASSWORD_PROD: ${NOTIFICATION_DATASOURCE_PASSWORD_PROD} + + nginx: + image: nginx:1.28.0 + container_name: nginx + ports: + - "80:80" + volumes: + - ./nginx/nginx.conf:/etc/nginx/nginx.conf + - ./nginx/logs:/var/log/nginx + restart: unless-stopped + environment: + TZ: Asia/Seoul + + node: + image: prom/node-exporter + container_name: node + restart: unless-stopped + pid: host + ports: + - 9100:9100 + command: + - '--path.rootfs=/host' + volumes: + - '/:/host:ro' + environment: + TZ: Asia/Seoul + + promtail: + image: grafana/promtail + container_name: promtail + volumes: + - ./promtail/promtail.yaml:/etc/promtail/promtail.yaml + - ./notification/api/logs:/logs/api + - ./notification/internal/logs:/logs/internal + - promtail-tmp:/tmp + command: + - "-config.file=/etc/promtail/promtail.yaml" + - "-config.expand-env=true" + restart: unless-stopped + environment: + TZ: Asia/Seoul + HOSTNAME: ${HOSTNAME} + +volumes: + promtail-tmp: diff --git a/docker/prod/nginx/nginx.conf b/docker/prod/nginx/nginx.conf new file mode 100644 index 0000000..fbf156d --- /dev/null +++ b/docker/prod/nginx/nginx.conf @@ -0,0 +1,64 @@ +events {} + +http { + charset utf-8; + + log_format api_log '$request_id $remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" "$request_time" ' + '"$http_user_agent" "$http_x_forwarded_for" ' + '"$ssl_protocol/$ssl_cipher" "$content_length" "$request_length"'; + + log_format internal_log '$http_x_requestid $remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" "$request_time" ' + '"$http_user_agent" "$http_x_forwarded_for" ' + '"$ssl_protocol/$ssl_cipher" "$content_length" "$request_length"'; + + server { + listen 80 default_server; + server_name _; + + return 404; + } + + server { + listen 80; + access_log /var/log/nginx/api/access.log api_log; + + set_real_ip_from 10.0.0.0/16; + set_real_ip_from 43.203.50.14; + real_ip_header X-Forwarded-For; + real_ip_recursive on; + + server_name notification-api.kokomen.kr; + server_tokens off; + + location / { + set $backend "kokomen-notification-api:8080"; + proxy_pass http://$backend; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-RequestID $request_id; + resolver 127.0.0.11 valid=5s; + } + } + + server { + listen 80; + access_log /var/log/nginx/internal/access.log internal_log; + + set_real_ip_from 10.0.0.0/16; + real_ip_header X-Forwarded-For; + real_ip_recursive on; + + server_name internal-notification-private-alb-prod-190218547.ap-northeast-2.elb.amazonaws.com; + server_tokens off; + + location / { + set $backend "kokomen-notification-internal:8080"; + proxy_pass http://$backend; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + resolver 127.0.0.11 valid=5s; + } + } +} diff --git a/docker/prod/promtail/promtail.yaml b/docker/prod/promtail/promtail.yaml new file mode 100644 index 0000000..2b5354d --- /dev/null +++ b/docker/prod/promtail/promtail.yaml @@ -0,0 +1,34 @@ +server: + http_listen_port: 9080 + +positions: + filename: /tmp/positions.yaml + +clients: + - url: http://10.0.37.94:3100/loki/api/v1/push + +scrape_configs: + - job_name: kokomen-notification-api + static_configs: + - labels: + job: kokomen-notification-api + app: kokomen-notification-api + host: ${HOSTNAME} + __path__: /logs/api/app.log + pipeline_stages: + - regex: + expression: '\[.*?\] [\d\-:.\s]+ \[.*?\] (?P[A-Z]+)\s' + - labels: + level: + - job_name: kokomen-notification-internal + static_configs: + - labels: + job: kokomen-notification-internal + app: kokomen-notification-internal + host: ${HOSTNAME} + __path__: /logs/internal/app.log + pipeline_stages: + - regex: + expression: '\[.*?\] [\d\-:.\s]+ \[.*?\] (?P[A-Z]+)\s' + - labels: + level: From bcadbe9ded56ec256b9925a135116f4cf4e2906d Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Tue, 29 Jul 2025 18:01:06 +0900 Subject: [PATCH 11/21] =?UTF-8?q?chore:=20nginx.conf=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/prod/nginx/nginx.conf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker/prod/nginx/nginx.conf b/docker/prod/nginx/nginx.conf index fbf156d..295319b 100644 --- a/docker/prod/nginx/nginx.conf +++ b/docker/prod/nginx/nginx.conf @@ -3,6 +3,8 @@ events {} http { charset utf-8; + server_names_hash_bucket_size 128; + log_format api_log '$request_id $remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" "$request_time" ' '"$http_user_agent" "$http_x_forwarded_for" ' From efc85344f9fba7c0a512378b87337242521ab781 Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Tue, 29 Jul 2025 18:05:12 +0900 Subject: [PATCH 12/21] =?UTF-8?q?chore:=20logback=20prod=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=ED=95=84=20=EC=84=A4=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/src/main/resources/logback-spring.xml | 7 +++++++ docker/prod/nginx/nginx.conf | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/common/src/main/resources/logback-spring.xml b/common/src/main/resources/logback-spring.xml index 8b0cbbc..0d80cde 100644 --- a/common/src/main/resources/logback-spring.xml +++ b/common/src/main/resources/logback-spring.xml @@ -36,6 +36,13 @@ + + + + + + + diff --git a/docker/prod/nginx/nginx.conf b/docker/prod/nginx/nginx.conf index 295319b..e51b6b5 100644 --- a/docker/prod/nginx/nginx.conf +++ b/docker/prod/nginx/nginx.conf @@ -3,7 +3,7 @@ events {} http { charset utf-8; - server_names_hash_bucket_size 128; + server_names_hash_bucket_size 128; # 서버 네임 길이 짧아서 안된다고함 log_format api_log '$request_id $remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" "$request_time" ' From f961150621c70617d5717de6a540ad853d2dea03 Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Tue, 29 Jul 2025 18:32:53 +0900 Subject: [PATCH 13/21] =?UTF-8?q?chore:=20nginx=20=EB=A1=9C=EA=B7=B8=20?= =?UTF-8?q?=EA=B2=BD=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/prod/docker-compose-prod.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/prod/docker-compose-prod.yml b/docker/prod/docker-compose-prod.yml index f436163..73dd388 100644 --- a/docker/prod/docker-compose-prod.yml +++ b/docker/prod/docker-compose-prod.yml @@ -46,7 +46,8 @@ services: - "80:80" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf - - ./nginx/logs:/var/log/nginx + - ./nginx/logs/api:/var/log/nginx/api + - ./nginx/logs/internal:/var/log/nginx/internal restart: unless-stopped environment: TZ: Asia/Seoul From ff7465ac7ebe376585d85c74118c6ec64822a707 Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Tue, 5 Aug 2025 01:14:50 +0900 Subject: [PATCH 14/21] =?UTF-8?q?chore:=20=EB=A1=9C=EA=B7=B8=EC=97=90=20no?= =?UTF-8?q?tification=20=EC=84=9C=EB=B2=84=EC=9E=84=EC=9D=84=20=EB=AA=85?= =?UTF-8?q?=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/src/main/resources/logback-spring.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/src/main/resources/logback-spring.xml b/common/src/main/resources/logback-spring.xml index 0d80cde..dee8162 100644 --- a/common/src/main/resources/logback-spring.xml +++ b/common/src/main/resources/logback-spring.xml @@ -17,7 +17,8 @@ 30 - [%X{requestId:-noRequest}] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + [%X{requestId:-noRequest}] %d{yyyy-MM-dd HH:mm:ss.SSS} [kokomen-notification] [%thread] %-5level + %logger{36} - %msg%n From ee093d678067725d35be110a5d333ec582b0bcb3 Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Tue, 5 Aug 2025 01:21:23 +0900 Subject: [PATCH 15/21] =?UTF-8?q?chore:=20=EB=A1=9C=EA=B7=B8=EA=B0=80=20?= =?UTF-8?q?=EC=B0=8D=ED=9E=88=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=B2=84?= =?UTF-8?q?=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/src/main/resources/logback-spring.xml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/common/src/main/resources/logback-spring.xml b/common/src/main/resources/logback-spring.xml index dee8162..f2ba0ab 100644 --- a/common/src/main/resources/logback-spring.xml +++ b/common/src/main/resources/logback-spring.xml @@ -5,7 +5,9 @@ - [%X{requestId:-noRequest}] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + [%X{requestId:-noRequest}] %d{yyyy-MM-dd HH:mm:ss.SSS} kokomen-notification [%thread] %-5level + %logger{36} - %msg%n @@ -17,7 +19,8 @@ 30 - [%X{requestId:-noRequest}] %d{yyyy-MM-dd HH:mm:ss.SSS} [kokomen-notification] [%thread] %-5level + + [%X{requestId:-noRequest}] %d{yyyy-MM-dd HH:mm:ss.SSS} kokomen-notification [%thread] %-5level %logger{36} - %msg%n From 2d275e4fd8135e6f9c498473adee104fa4fd2533 Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Tue, 5 Aug 2025 01:31:12 +0900 Subject: [PATCH 16/21] =?UTF-8?q?chore:=20=EC=A4=84=EB=B0=94=EA=BF=88?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=B4=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EA=B0=80=20=EC=B0=8D=ED=9E=88=EC=A7=80=20=EC=95=8A=EB=8A=94=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/src/main/resources/logback-spring.xml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/common/src/main/resources/logback-spring.xml b/common/src/main/resources/logback-spring.xml index f2ba0ab..fc03219 100644 --- a/common/src/main/resources/logback-spring.xml +++ b/common/src/main/resources/logback-spring.xml @@ -6,8 +6,7 @@ - [%X{requestId:-noRequest}] %d{yyyy-MM-dd HH:mm:ss.SSS} kokomen-notification [%thread] %-5level - %logger{36} - %msg%n + @@ -20,8 +19,7 @@ - [%X{requestId:-noRequest}] %d{yyyy-MM-dd HH:mm:ss.SSS} kokomen-notification [%thread] %-5level - %logger{36} - %msg%n + From 39f9415c4d2e55fd06dc67952ac037f201e7110b Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Tue, 5 Aug 2025 01:41:03 +0900 Subject: [PATCH 17/21] =?UTF-8?q?chore:=20=ED=94=84=EB=A1=AC=ED=85=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=A0=95=EA=B7=9C=ED=91=9C=ED=98=84=EC=8B=9D=20?= =?UTF-8?q?=EC=98=AC=EB=B0=94=EB=A5=B4=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/src/main/resources/logback-spring.xml | 2 +- docker/dev/promtail/promtail.yaml | 4 ++-- docker/prod/promtail/promtail.yaml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/common/src/main/resources/logback-spring.xml b/common/src/main/resources/logback-spring.xml index fc03219..4f71d6c 100644 --- a/common/src/main/resources/logback-spring.xml +++ b/common/src/main/resources/logback-spring.xml @@ -19,7 +19,7 @@ - + diff --git a/docker/dev/promtail/promtail.yaml b/docker/dev/promtail/promtail.yaml index a455e18..97c28f4 100644 --- a/docker/dev/promtail/promtail.yaml +++ b/docker/dev/promtail/promtail.yaml @@ -17,7 +17,7 @@ scrape_configs: __path__: /logs/api/app.log pipeline_stages: - regex: - expression: '\[.*?\] [\d\-:.\s]+ \[.*?\] (?P[A-Z]+)\s' + expression: '\[.*?\] [\d\-:.\s]+ [^\[\]]+ \[.*?\] (?P[A-Z]+)\s+' - labels: level: - job_name: kokomen-notification-internal-dev @@ -29,6 +29,6 @@ scrape_configs: __path__: /logs/internal/app.log pipeline_stages: - regex: - expression: '\[.*?\] [\d\-:.\s]+ \[.*?\] (?P[A-Z]+)\s' + expression: '\[.*?\] [\d\-:.\s]+ [^\[\]]+ \[.*?\] (?P[A-Z]+)\s+' - labels: level: diff --git a/docker/prod/promtail/promtail.yaml b/docker/prod/promtail/promtail.yaml index 2b5354d..fa37207 100644 --- a/docker/prod/promtail/promtail.yaml +++ b/docker/prod/promtail/promtail.yaml @@ -17,7 +17,7 @@ scrape_configs: __path__: /logs/api/app.log pipeline_stages: - regex: - expression: '\[.*?\] [\d\-:.\s]+ \[.*?\] (?P[A-Z]+)\s' + expression: '\[.*?\] [\d\-:.\s]+ [^\[\]]+ \[.*?\] (?P[A-Z]+)\s+' - labels: level: - job_name: kokomen-notification-internal @@ -29,6 +29,6 @@ scrape_configs: __path__: /logs/internal/app.log pipeline_stages: - regex: - expression: '\[.*?\] [\d\-:.\s]+ \[.*?\] (?P[A-Z]+)\s' + expression: '\[.*?\] [\d\-:.\s]+ [^\[\]]+ \[.*?\] (?P[A-Z]+)\s+' - labels: level: From eee351802116ab289f981d28726e45acc9c3c190 Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Mon, 11 Aug 2025 17:15:48 +0900 Subject: [PATCH 18/21] =?UTF-8?q?chore:=20=ED=94=84=EB=A1=AC=ED=85=8C?= =?UTF-8?q?=EC=9D=BC=EC=97=90=EC=84=9C=20=EB=A0=88=EB=B2=A8=EC=9D=84=20?= =?UTF-8?q?=EC=B6=94=EC=B6=9C=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=9C=20?= =?UTF-8?q?=EC=A0=95=EA=B7=9C=20=ED=91=9C=ED=98=84=EC=8B=9D=20=EC=98=AC?= =?UTF-8?q?=EB=B0=94=EB=A5=B4=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/prod/promtail/promtail.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/prod/promtail/promtail.yaml b/docker/prod/promtail/promtail.yaml index fa37207..aa37381 100644 --- a/docker/prod/promtail/promtail.yaml +++ b/docker/prod/promtail/promtail.yaml @@ -17,7 +17,7 @@ scrape_configs: __path__: /logs/api/app.log pipeline_stages: - regex: - expression: '\[.*?\] [\d\-:.\s]+ [^\[\]]+ \[.*?\] (?P[A-Z]+)\s+' + expression: '\[.*?\] [\d\-:.\s]+ [^\[\]]+ \[.*?\]\s+(?P[A-Z]+)' - labels: level: - job_name: kokomen-notification-internal @@ -29,6 +29,6 @@ scrape_configs: __path__: /logs/internal/app.log pipeline_stages: - regex: - expression: '\[.*?\] [\d\-:.\s]+ [^\[\]]+ \[.*?\] (?P[A-Z]+)\s+' + expression: '\[.*?\] [\d\-:.\s]+ [^\[\]]+ \[.*?\]\s+(?P[A-Z]+)' - labels: level: From 4fb9b2c68725079cd0a6a6b87b9bf5988e30eed9 Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Mon, 11 Aug 2025 17:22:40 +0900 Subject: [PATCH 19/21] =?UTF-8?q?chore:=20=EC=96=B4=ED=94=8C=EB=A6=AC?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=85=98=20=EC=9D=B4=EB=A6=84=EC=9D=84=20?= =?UTF-8?q?=EA=B0=80=EC=A0=B8=EC=98=A4=EB=8F=84=EB=A1=9D=20xml=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/src/main/resources/logback-spring.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/common/src/main/resources/logback-spring.xml b/common/src/main/resources/logback-spring.xml index 4f71d6c..3f75031 100644 --- a/common/src/main/resources/logback-spring.xml +++ b/common/src/main/resources/logback-spring.xml @@ -2,11 +2,13 @@ + + - + From d400bd538111d05316416b3b0e113d214dee0a7a Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Mon, 11 Aug 2025 17:29:43 +0900 Subject: [PATCH 20/21] =?UTF-8?q?chore:=20CORS=20=EC=9B=B9=EB=B7=B0=20url?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/src/main/resources/application.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/main/resources/application.yml b/api/src/main/resources/application.yml index 507dd68..ac41bde 100644 --- a/api/src/main/resources/application.yml +++ b/api/src/main/resources/application.yml @@ -45,7 +45,7 @@ spring: activate: on-profile: dev cors: - allowed-origins: https://dev.kokomen.kr, https://kokomen.kr:3000, https://local.kokomen.kr:3000, http://local.kokomen.kr:3000 + allowed-origins: https://dev.kokomen.kr, https://kokomen.kr:3000, https://local.kokomen.kr:3000, http://local.kokomen.kr:3000, https://www.webview-dev.kokomen.kr, https://webview-dev.kokomen.kr server: servlet: session: @@ -59,7 +59,7 @@ spring: activate: on-profile: prod cors: - allowed-origins: https://kokomen.kr, https://www.kokomen.kr + allowed-origins: https://kokomen.kr, https://www.kokomen.kr, https://www.webview.kokomen.kr, https://webview.kokomen.kr server: servlet: session: From 3b274212c131aa46387e9fa9d3946ecf9e32a652 Mon Sep 17 00:00:00 2001 From: nhlee98 Date: Mon, 11 Aug 2025 17:40:58 +0900 Subject: [PATCH 21/21] =?UTF-8?q?chore:=20level=20=EC=9D=84=20=EB=9D=BC?= =?UTF-8?q?=EB=B2=A8=EB=A7=81=20=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=B4=20?= =?UTF-8?q?=EC=A0=95=EA=B7=9C=20=ED=91=9C=ED=98=84=EC=8B=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/dev/promtail/promtail.yaml | 4 ++-- docker/prod/promtail/promtail.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docker/dev/promtail/promtail.yaml b/docker/dev/promtail/promtail.yaml index 97c28f4..1703787 100644 --- a/docker/dev/promtail/promtail.yaml +++ b/docker/dev/promtail/promtail.yaml @@ -17,7 +17,7 @@ scrape_configs: __path__: /logs/api/app.log pipeline_stages: - regex: - expression: '\[.*?\] [\d\-:.\s]+ [^\[\]]+ \[.*?\] (?P[A-Z]+)\s+' + expression: '\[.*?\] [\d\-:.\s]+ [^\[\]]+ \[.*?\]\s+(?P[A-Z]+)\s+[^\s]+' - labels: level: - job_name: kokomen-notification-internal-dev @@ -29,6 +29,6 @@ scrape_configs: __path__: /logs/internal/app.log pipeline_stages: - regex: - expression: '\[.*?\] [\d\-:.\s]+ [^\[\]]+ \[.*?\] (?P[A-Z]+)\s+' + expression: '\[.*?\] [\d\-:.\s]+ [^\[\]]+ \[.*?\]\s+(?P[A-Z]+)\s+[^\s]+' - labels: level: diff --git a/docker/prod/promtail/promtail.yaml b/docker/prod/promtail/promtail.yaml index aa37381..622655b 100644 --- a/docker/prod/promtail/promtail.yaml +++ b/docker/prod/promtail/promtail.yaml @@ -17,7 +17,7 @@ scrape_configs: __path__: /logs/api/app.log pipeline_stages: - regex: - expression: '\[.*?\] [\d\-:.\s]+ [^\[\]]+ \[.*?\]\s+(?P[A-Z]+)' + expression: '\[.*?\] [\d\-:.\s]+ [^\[\]]+ \[.*?\]\s+(?P[A-Z]+)\s+[^\s]+' - labels: level: - job_name: kokomen-notification-internal @@ -29,6 +29,6 @@ scrape_configs: __path__: /logs/internal/app.log pipeline_stages: - regex: - expression: '\[.*?\] [\d\-:.\s]+ [^\[\]]+ \[.*?\]\s+(?P[A-Z]+)' + expression: '\[.*?\] [\d\-:.\s]+ [^\[\]]+ \[.*?\]\s+(?P[A-Z]+)\s+[^\s]+' - labels: level: