Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
ae6cdaf
refactor: rename asnyc to async in user-service
jihukimme Feb 14, 2026
ae05fb8
test: fix testcontainers connectivity for latest docker version in CI
jihukimme Feb 14, 2026
7c14f7e
refactor: rename asnyc to async and restore CI config to main
jihukimme Feb 14, 2026
8ddf555
ci: add --no-daemon flag to Gradle commands in CI workflow
jihukimme Feb 14, 2026
0908896
ci: add Docker environment checks and update Gradle e2eTest logging iโ€ฆ
jihukimme Feb 14, 2026
bec7d53
ci: add Docker environment checks and update Gradle e2eTest logging iโ€ฆ
jihukimme Feb 14, 2026
becbe62
refactor: simplify E2eTestConfiguration and enhance CI Docker setup
jihukimme Feb 14, 2026
73e87fa
refactor: enhance E2eTestConfiguration with MariaDB and HikariCP confโ€ฆ
jihukimme Feb 14, 2026
6d145d8
[Refactor] ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ ๋„์ž…์„ ํ†ตํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ตœ์ ํ™” (#260)
jihukimme Feb 14, 2026
c89c564
refactor: streamline E2eTestConfiguration with static containers and โ€ฆ
jihukimme Feb 14, 2026
530d598
refactor: enhance E2eTestConfiguration with improved container setup,โ€ฆ
jihukimme Feb 14, 2026
a831952
refactor: reformat E2eTestConfiguration for better readability and coโ€ฆ
jihukimme Feb 14, 2026
921723d
refactor: simplify E2eTestConfiguration with bean-based container iniโ€ฆ
jihukimme Feb 14, 2026
4eeb187
Merge branch 'develop' of https://github.com/FlowWeaver/backend into โ€ฆ
jihukimme Feb 14, 2026
479dc72
refactor: streamline E2eTestConfiguration with bean-based container dโ€ฆ
jihukimme Feb 14, 2026
b8bcb23
refactor: replace `restClient` with `restTemplate` across E2E tests fโ€ฆ
jihukimme Feb 15, 2026
b3745c2
build: add `testcontainers.version` property to Gradle build configurโ€ฆ
jihukimme Feb 15, 2026
efe9df0
chore: fix indentation in Gradle build file
jihukimme Feb 15, 2026
0b307d5
ci: set Docker environment variables for Testcontainers in CI workflow
jihukimme Feb 15, 2026
42a5572
build: update Spring Boot to 3.5.8 and remove unused Testcontainers cโ€ฆ
jihukimme Feb 15, 2026
d934cfb
refactor: replace `restTemplate` with `restClient` in E2E tests for iโ€ฆ
jihukimme Feb 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/user-service/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.5.4'
id 'org.springframework.boot' version '3.5.8'
id 'io.spring.dependency-management' version '1.1.7'
id 'com.diffplug.spotless' version '7.2.1'
id 'org.asciidoctor.jvm.convert' version '3.3.2'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,31 +1,42 @@
package site.icebang.global.config.asnyc;
package site.icebang.global.config.async;

import java.lang.reflect.Method;
import java.util.concurrent.Executor;

import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.SimpleAsyncTaskExecutor;
import org.springframework.core.task.TaskDecorator;
import org.springframework.core.task.support.ContextPropagatingTaskDecorator;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Configuration
@EnableAsync
@RequiredArgsConstructor
public class AsyncConfig implements AsyncConfigurer {

private final SemaphoreTaskDecorator semaphoreTaskDecorator;

@Bean("traceExecutor")
public ThreadPoolTaskExecutor traceExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setMaxPoolSize(50);
executor.setQueueCapacity(100);
executor.setTaskDecorator(new ContextPropagatingTaskDecorator()); // ํ•„์ˆ˜
public Executor traceExecutor() {
SimpleAsyncTaskExecutor executor = new SimpleAsyncTaskExecutor();
executor.setVirtualThreads(true);
executor.setThreadNamePrefix("trace-");
executor.initialize();

// MDC ์ „ํŒŒ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์ƒ์„ฑ
TaskDecorator contextDecorator = new ContextPropagatingTaskDecorator();

// ๋‘ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์˜ ์กฐํ•ฉ:
// Context ์„ค์ •(MDC ๋ณต์‚ฌ) ํ›„ Semaphore ์ œ์–ด๊ฐ€ ์ ์šฉ๋˜๋„๋ก ๊ตฌ์„ฑ
executor.setTaskDecorator(
runnable -> contextDecorator.decorate(semaphoreTaskDecorator.decorate(runnable)));

return executor;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package site.icebang.global.config.async;

import java.util.concurrent.Semaphore;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.task.TaskDecorator;
import org.springframework.stereotype.Component;

import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Component
public class SemaphoreTaskDecorator implements TaskDecorator {

@Value("${spring.datasource.hikari.maximum-pool-size:10}")
private int maximumPoolSize;

private Semaphore semaphore;

@PostConstruct
public void init() {
int safetyBuffer = 5;
int taskConcurrencyLimit = Math.max(1, maximumPoolSize - safetyBuffer);

this.semaphore = new Semaphore(taskConcurrencyLimit);
log.info(
"SemaphoreTaskDecorator ์ดˆ๊ธฐํ™”: DB ํ’€({}) - ์—ฌ์œ ๋ถ„({}) = ๋™์‹œ ์‹คํ–‰ ์ œํ•œ ์ˆ˜({})",
maximumPoolSize,
safetyBuffer,
taskConcurrencyLimit);
}

@Override
public Runnable decorate(Runnable runnable) {
return () -> {
try {
semaphore.acquire();
runnable.run();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
log.error("๋น„๋™๊ธฐ ์ž‘์—… ์‹คํ–‰ ๋Œ€๊ธฐ ์ค‘ ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ", e);
} finally {
semaphore.release();
}
};
}
}
4 changes: 2 additions & 2 deletions apps/user-service/src/main/resources/application-develop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ spring:
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
maximum-pool-size: 10
minimum-idle: 5
maximum-pool-size: 30
minimum-idle: 10
pool-name: HikariCP-MyBatis

quartz:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ spring:
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
maximum-pool-size: 10
minimum-idle: 5
maximum-pool-size: 30
minimum-idle: 10
pool-name: HikariCP-MyBatis

# Gmail ์—ฐ๋™ ์„ค์ •
Expand All @@ -39,7 +39,7 @@ spring:

mybatis:
mapper-locations: classpath:mybatis/mapper/**/*.xml
type-aliases-package: site.icebang.dto
type-aliases-package: site.icebang.domain
configuration:
map-underscore-to-camel-case: true

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ spring:

mybatis:
mapper-locations: classpath:mybatis/mapper/**/*.xml
type-aliases-package: site.icebang.dto
type-aliases-package: site.icebang.domain
configuration:
map-underscore-to-camel-case: true

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ spring:

mybatis:
mapper-locations: classpath:mybatis/mapper/**/*.xml
type-aliases-package: site.icebang.dto
type-aliases-package: site.icebang.domain
configuration:
map-underscore-to-camel-case: true

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ spring:

mybatis:
mapper-locations: classpath:mybatis/mapper/**/*.xml
type-aliases-package: site.icebang.dto
type-aliases-package: site.icebang.domain
configuration:
map-underscore-to-camel-case: true

Expand Down
Loading