๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ–ฅ๏ธ ๋ญ”๊ฐ€๋ญ”๊ฐ€ํ”„๋กœ์ ํŠธ/๐Ÿ› ๏ธ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…5

[ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๊ฐ€ null๋กœ ์ถœ๋ ฅ๋œ ๋ฌธ์ œ.. ๐Ÿ› ๋ฌธ์ œ ํ˜„์ƒKafka Consumer์—์„œ ConflictException์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๊ฐ€ null๋กœ ์ถœ๋ ฅ๋๋‹ค.โš ๏ธ ์žฌ๊ณ  ๋ถ€์กฑ์œผ๋กœ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์‹คํŒจ: null→ getMessage()๋กœ ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ–ˆ์ง€๋งŒ, null์ด ๋‚˜์™”๋‹ค. ๐Ÿ” ์›์ธ ๋ถ„์„โœ… ๊ธฐ์กด ์ฝ”๋“œ ๊ตฌ์กฐpublic class ConflictException extends CustomRuntimeException { public ConflictException(ErrorCode errorCode) { super(errorCode); // message๋Š” ์ „๋‹ฌํ•˜์ง€ ์•Š์Œ }}@Getter@RequiredArgsConstructorpublic class CustomRuntimeException extends .. 2025. 5. 28.
[ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] Kafka Consumer ์žฌ์‹œ๋„ ์‹คํŒจ๋กœ ์ธํ•œ ๋ฉ”์‹œ์ง€ ์œ ์‹ค.. ๐Ÿ› ๋ฌธ์ œ ํ˜„์ƒKafka ๋ฉ”์‹œ์ง€๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜์‹ ํ•œ ํ›„ ์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ๊ฐ™์€ ๋กœ๊ทธ๊ฐ€ ๋ฐ˜๋ณต ์ถœ๋ ฅ๋˜๋ฉด์„œ ๊ฒฐ๊ตญ ๋ฉ”์‹œ์ง€๊ฐ€ ํ๊ธฐ๋˜์—ˆ๋‹ค..Backoff FixedBackOff{interval=0, currentAttempts=10, maxAttempts=9} exhausted for stock-management-topic-0@3 ๐Ÿ“Œ ์ฃผ์š” ๋กœ๊ทธListener method 'public void ... listen(...)' threw exception...Caused by: turtleMart.global.exception.ConflictException...DefaultErrorHandler : Backoff FixedBackOff{...} exhausted ๐Ÿ” ์›์ธ ๋ถ„์„Spring Ka.. 2025. 5. 28.
[ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] key.serializer ๋ˆ„๋ฝ๋์„ ๋•Œ Kafka ๋ฉ”์‹œ์ง€ ์ „์†ก ์‹คํŒจ ๐Ÿ› ๋ฌธ์ œ ํ˜„์ƒKafka ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.Invalid value null for configuration key.serializer: must be non-null ๐Ÿ” ์›์ธ ๋ถ„์„Kafka๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด key์™€ value๋ฅผ ์ง๋ ฌํ™”ํ•ด์•ผ ํ•˜๋ฉฐ, ๋ฐ˜๋“œ์‹œ ๋‘ ๊ฐ€์ง€ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค.key.serializer → ๋ณดํ†ต org.apache.kafka.common.serialization.StringSerializervalue.serializer → ๋ณดํ†ต org.apache.kafka.support.serializer.JsonSerializerํ•˜์ง€๋งŒ ํ˜„์žฌ KafkaTemplate์„ ๊ตฌ์„ฑํ•  ๋•Œ ์ด ์„ค์ •๋“ค์ด ๋ช…์‹œ๋˜์–ด ์žˆ์ง€ ์•Š์•„์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ๐Ÿ” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•Ka.. 2025. 5. 27.
[ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] QueryDSL .count().fetchOne()์—์„œ ๋ฐœ์ƒํ•˜๋Š” NPE ๊ฒฝ๊ณ  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ๐Ÿ“Œ ๋ฌธ์ œ ์ƒํ™ฉQueryDSL๋กœ ์—”ํ‹ฐํ‹ฐ ๊ฐœ์ˆ˜๋ฅผ ์กฐํšŒํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ ์‚ฌ์šฉํ–ˆ๋‹ค.return queryFactory .select(sender.count()) .from(sender) .where(sender.courier.eq(courier), sender.isDeleted.isFalse()) .fetchOne(); // โš ๏ธ ๊ฒฝ๊ณ  ๋ฐœ์ƒ!์ด ์ฝ”๋“œ์—์„œ IDE ๋˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ๊ณ ๊ฐ€ ๋„์›Œ์กŒ๋‹ค.โ— Unboxing of 'fetchOne()' may produce 'NullPointerException' ๐Ÿ” ์™œ ์ด๋Ÿฐ ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ์ƒํ• ๊นŒ?fetchOne()์€ nullableํ•œ Long ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.ํ•˜์ง€๋งŒ ๋ฐ˜ํ™˜ ํƒ€์ž…์„ long(๊ธฐ๋ณธํ˜•)์œผ๋กœ ์„ ์–ธํ•ด๋ฒ„๋ฆฌ๋ฉด → ์–ธ๋ฐ•์‹ฑ ๊ณผ์ •์—์„œ .. 2025. 5. 26.
[ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] LazyInitializationException ๋ฐœ์ƒ!! ๐Ÿ’ฃ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…: LazyInitializationException ๋ฐœ์ƒ ๐Ÿ“Œ ๋ฌธ์ œ ์ƒํ™ฉGET /api/senders ์š”์ฒญ ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.org.hibernate.LazyInitializationException:Could not initialize proxy [turtleMart.delivery.entity.Courier#1] - no session๐Ÿ“ ์—๋Ÿฌ ์›์ธSender ์—”ํ‹ฐํ‹ฐ๊ฐ€ Courier์™€ @ManyToOne(fetch = FetchType.LAZY) ๊ด€๊ณ„๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค.senderRepository.findAll() ํ˜ธ์ถœ๋กœ Sender๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์ดํ›„ DTO ๋ณ€ํ™˜ ๊ณผ์ •์—์„œ sender.getCourier().getName()์„ ํ˜ธ์ถœํ•œ๋‹ค.ํ•˜์ง€๋งŒ ํŠธ๋žœ์žญ์…˜์ด ๋๋‚œ ๋’ค Lazy .. 2025. 5. 22.