java 21

[TDD] TDD는 단순 테스트 코드가 아니었다

최근에 TDD를 다시 보게 되면서, 혼자 끄적이던 생각과 고민이 조금씩 정리가 되었습니다.사실 처음에는 TDD를 그냥 '테스트 코드 먼저 작성하는 방식' 정도로만 알고 있었는데요,이번에 프로젝트를 진행하면서 "테스트가 코드의 방향을 결정할 수도 있다"는 걸 체감하게 되었습니다.TDD는 단순히 테스트를 먼저 짜는 게 아니더라구요보통은 기능을 먼저 구현하고 테스트 코드를 나중에 붙이는 경우가 많잖아요? 그런데 TDD는 반대입니다.테스트 코드를 먼저 작성하고, 그 테스트를 통과할 수 있는 최소한의 코드를 작성한 뒤, 마지막에 리팩토링을 진행합니다.이게 단순히 순서만 바뀌는 게 아니라, "어떻게 코드를 짤 것인가" 자체가 달라집니다. 단계 설명Red실패하는 테스트를 먼저 작성합니다Green테스트를 통과시키기 위..

ETC 2025.04.17

[spring webFlux] reactor.netty.http.client.PrematureCloseException: Connection prematurely closed BEFORE response

프로젝트 구조Java 21gradleSpring boot 3.XSpring Webfluxkotlin에러발생java, spring boot, gradle 등 프로젝트 주요 라이브러리의 버전업 후, 프로젝트 boot시에 에러가 발생하는 것을 발견reactor.netty.http.client.PrematureCloseException: Connection prematurely closed BEFORE responsejava.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonTypeInfo$Value ...ETC```e2e 테스트를 통해서 request를 보냈을 떄,,, controller로 인입되지 않는 것을 확인오류를 구글링 해봤을 때, M1 ..

개발 Error 2025.03.20

[SLF4J] LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation() 에러 해결

프로젝트 구조Java 21gradleSpring boot 3.XSpring Webfluxkotlin에러 발생- java, spring boot, gradle 등 프로젝트 주요 라이브러리의 버전업 후, 프로젝트 boot시에 에러가 발생하는 것을 발견Exception in thread "main" java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.helpers.NOPLoggerFactory loaded from file:/Users..

개발 Error 2025.03.20

[SLF4J] Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier. 에러 해결

프로젝트 구조Java 21gradleSpring boot 3.XSpring Webfluxkotlin에러 발생java, spring boot, gradle 등 프로젝트 주요 라이브러리의 버전업 후, 프로젝트 boot시에 에러가 발생하는 것을 발견SLF4J(W): No SLF4J providers were found.SLF4J(W): Defaulting to no-operation (NOP) logger implementationSLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details.SLF4J(W): Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x..

개발 Error 2025.03.20

[Spring Webflux] Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. 에러 처리

프로젝트 구조Java 21gradleSpring boot 3.XSpring Webfluxkotlin에러 발생java, spring boot, gradle 등 프로젝트 주요 라이브러리의 버전업 후, 프로젝트 boot시에 에러가 발생하는 것을 발견2025-03-20 08:53:13.537 ERROR [ main] i.n.resolver.dns.DnsServerAddressStreamProviders io.netty.resolver.dns.DnsServerAddressStreamProviders.(DnsServerAddressStreamProviders.java:79) : Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressS..

개발 Error 2025.03.20

한글 코딩

소프트웨어 개발에서 한글로 코딩하는 것에 대한 논의는 꾸준히 이루어져 왔습니다.한글 코딩은 특히 한국 개발자들 사이에서 직관적인 변수명과 상수명을 통해 더 명확한 의미 전달을 할 수 있다는 점에서 관심을 받고 있습니다.하지만 한글 코딩은 장점과 단점을 동시에 가지며, 사용하는 데 주의할 점도 존재합니다.이번 글에서는 한글 코딩의 장점, 단점, 그리고 주의해야 할 점을 정리해 보겠습니다.한글 코딩의 장점가독성 향상변수명과 상수명을 한글로 작성하면 개발자가 코드의 의도를 더 명확히 이해할 수 있습니다.예: final int 최대값 = 100;는 영어로 final int MAX_VALUE = 100;보다 직관적일 수 있습니다.의미 전달의 효율성영어에 익숙하지 않은 개발자나 팀에서는 한글이 더 효과적인 의사소통..

ETC 2024.12.27

Java Spring MVC에서 ArgumentResolver

Spring MVC에서 ArgumentResolver는 컨트롤러 메서드의 매개변수를 처리하고 주입하는 데 사용되는 중요한 구성 요소입니다.이 글에서는 HandlerMethodArgumentResolver와 이를 활용하여 사용자 정의 로직을 구현하는 방법에 대해 설명하겠습니다.ArgumentResolver란 무엇인가?Spring MVC의 HandlerMethodArgumentResolver는 컨트롤러 메서드의 매개변수를 처리하는 전략 인터페이스입니다.이를 통해 HTTP 요청 데이터를 분석하거나 추가적인 비즈니스 로직을 적용하여 매개변수 값을 동적으로 생성할 수 있습니다.기본 동작 방식Spring MVC는 HTTP 요청을 처리하는 과정에서 컨트롤러 메서드와 매핑된 매개변수를 확인합니다.각 매개변수에 대해 등..

Spring 2024.12.22

Java 예외 처리 방식: Exception 클래스를 개별 생성 vs Enum으로 관리

Spring과 Java 기반의 애플리케이션을 개발할 때, 예외 처리 방식은 시스템의 안정성과 유지보수성에 큰 영향을 미칩니다. 이번 글에서는 예외를 클래스별로 생성하는 방식과 Enum을 사용해 관리하는 방식의 장단점을 비교하여, 상황에 맞는 선택을 할 수 있도록 도와드리겠습니다.1. Exception을 클래스별로 생성하는 방식구현 방식예외를 처리하기 위해 특정 상황에 맞는 예외 클래스를 각각 정의하는 방식입니다. 예를 들어, 다음과 같은 예외 클래스를 작성할 수 있습니다:public class UserNotFoundException extends RuntimeException { public UserNotFoundException(String message) { super(message..

java 2024.12.20

자바 메모리 구조

java 메모리 구조의 관해서 공부하던 중 상시로 읽어보기 위해서 기재하였습니다. JVM 의 전체적인 구조 클래스 로더(Class Loader): 자바 프로그램은 클래스로 구성되어 있으며, 클래스 로더는 이러한 클래스 파일들을 JVM으로 로드합니다. 클래스 로더는 클래스 파일을 찾고 로드하며, 필요한 경우 클래스를 동적으로 로드하여 실행 환경을 구성합니다. 메모리 영역(Memory Areas): JVM은 다양한 메모리 영역을 관리합니다. 메서드 영역(Method Area): 클래스 정보, 정적 변수, 상수 등이 저장되는 영역입니다. 힙(Heap): 인스턴스 객체와 배열이 할당되는 영역으로 동적으로 생성되며, 가비지 컬렉션에 의해 관리됩니다. 스택(Stack): 메서드 호출과 관련된 지역 변수와 메서드 호..

java 2023.08.16

Stack

Stack이란? 자료 구조 중 하나인 Stack의 사전적 정의는 '쌓다', '더미'입니다. 상자에 물건을 쌓아 올리듯이 데이터를 쌓는 자료 구조라고 할 수 있습니다. Stack의 가장 큰 특징은 나중에 들어간 것이 먼저 나오는 (Last In First Out)의 형태를 띈다는 것입니다. 이 방식을 가진 자료구조인 Stack을 활용하여 다양한 문제를 해결할 수 있습니다. 자바에서 Stack은 java.util.Stack을 import하면 바로 사용할 수 있습니다. Stack의 특징 1. 먼저 들어간 자료가 나중에 나옴 LIFO(Last In First Out) 구조 2. 시스템 해킹에서 버퍼오버플로우 취약점을 이용한 공격을 할 때 스택 메모리의 영역에서 함 3. 인터럽트처리, 수식의 계산, 서브루틴의 복..

자료구조 2023.06.26