[Spring] @ModelAttribute 바인딩 실패와 해결
·
Spring 기초/Spring 기초 지식
@ModelAttribute에서 데이터 바인딩을 위해서 꼭 필요한 메서드가 존재한다. 📌 서론 컨트롤러에서 매게 변수로 dto객체를 받을 때 발생하는 바인딩 오류는 정말 간단하게 해결되지만 자주 발생하는 오류이기도 하다. 그만큼 바인딩에 대해서는 신경 쓰지 않고 알아서 적용되겠지?라는 생각을 가지고 어노테이션을 사용하게 되기 때문인데 수많은 api를 만들어 보게 되지만 바인딩도 @RequestBody인지 @ModelAttribute인지에 따라 그 방식이 다르다. 이번에는 @ModelAttribute를 사용했을 때 나의 실수로 인해 바인딩에 실패했던 내용을 소개하고자 한다. 1. 오류가 발생한 상황 오류가 발생한 코드 분석 아래의 API에 요청을 보냈을 때 바인딩 오류가 발생했다. /** * 마이페이지 수..
[Spring] 톰캣과 스프링: 웹 요청의 라이프사이클 이해하기
·
Spring 기초/Spring 기초 지식
톰캣과 스프링의 웹 요청 처리방법을 이해해 보자 📌 서론 스프링은 복잡한 저수준의 소켓 통신과 스트림 처리를 추상화하여, 개발자가 고수준의 비즈니스 로직에 집중할 수 있도록 설계되었다. 이번 포스트를 통해 스프링 프레임워크와 서블릿 컨테이너(예: Tomcat)가 HTTP 요청을 어떻게 처리하는지, 그리고 이 과정에서 각각의 역할이 무엇인지 상세히 살펴보자 1. 스프링의 http 요청과 관련된 용어 이해하기 서블릿 컨테이너 스프링 애플리케이션은 일반적으로 서블릿 컨테이너(예: Tomcat, Jetty) 내에서 실행된다. 이러한 컨테이너는 저수준의 네트워크 통신을 처리하고, HTTP 요청을 서블릿 API로 변환해 애플리케이션에 전달하는 역할을 한다. DispatcherServlet DispatcherServ..
스프링에서 느슨한 결합 만들기: 이벤트 기반 아키텍처 적용
·
Spring 기초/Spring 기초 지식
이벤트 기반 아키텍처를 적용해서 느슨한 결합(Coupling)을 만들어 보자 📖 서론 이번 포스트에서는 먼저 결합도가 높은 일반적인 시나리오를 살펴보고, 이를 개선하기 위해 결합도가 높은 코드에 스프링의 이벤트 기반 아키텍처를 적용시켜 보자. 코드를 쉽게 이해하기 위해 자주 사용되는 로그인 프로세스를 예로 들어, 어떻게 결합도를 낮추고 코드의 효율성을 높일 수 있는지 설명하도록 하겠다. 1. 결합도가 높은 login() 메서드 작성하기 결합도가 높은 login() 메서드 코드 분석하기 하단의 login() 메서드에서 처리하는 주관심사와 외부 관심사를 분리시켜 보자. 여기서 주관심사는 사용자의 로그인 과정이며, 외부 관심사(비관심사)는 로그인 후의 추가 작업들(예: 알림 보내기, 타 기기에서의 로그아웃 ..
주니어 개발자의 결합도(Coupling) 이해하기: 스프링에서 결합도 관리하기
·
Spring 기초/Spring 기초 지식
결합도(Coupling)는 (클래스, 모듈, 함수 등) 간의 상호 의존성의 정도를 나타낸다. 📖 서론 개발 분야에서 "결합도(Coupling)"는 소프트웨어의 다양한 구성 요소 간의 상호 의존성의 정도를 나타내는 중요한 개념이다. 이는 소프트웨어 구조의 효율성과 유지보수의 용이성을 결정하는 핵심 요소 중 하나로, 소프트웨어 코드 간의 의존 관계의 정도를 나타낸다. 코드 사이에 강한 결합이 있으면, 한 부분이 바뀌었을 때 다른 부분에도 영향을 많이 준다. 그래서 우리는 보통 낮은 결합도를 유지하려고 한다. 낮은 결합도가 좋은 이유는 몇 가지가 있다. 1. 유지보수의 용이성: 낮은 결합도는 한 컴포넌트의 변경이 다른 컴포넌트에 미치는 영향을 줄여, 유지보수를 용이하게 해 준다. 2. 재사용성의 증가: 각 컴..
[Spring] RuntimeException의 메시지
·
Spring 기초/Spring 기초 지식
이번 포스트에서는 RuntimeException의 예외 메시지를 가져오는 getMessage()에 대해서 자세히 알아보자📌 서론테스트 코드를 작성하다 발생했던 문제를 해결하며 이 내용을 정리했다. 예외 처리 메시지를 가져오는 과정에서 문제가 있었기에 RuntimeException의 예외 메시지를 가져오는 과정을 정리해봤고 그 내용을 정리했다. 1. 테스트 코드에서 발생한 문제 파악하기테스트 코드를 작성했다.테스트 코드를 작성하고 실행했는데 코드 중간에 작성된 assertEquals(expectedMessage, exception.getMessage())에서 오류가 발생했다. 테스트 코드 호출 결과테스트 결과를 보면 기대값이 존재하는데 Actual이 null인 오류가 발생했다고 나온다.  오류 분석 - ..
가볍게 알아보는 디자인 패턴 - 퍼사드 패턴(Facade Pattern)
·
Spring 기초/Spring 기초 지식
퍼사드 패턴에 대해 가볍게 알아보자 1. Facade Pattern이란? 1-1. 퍼사드 패턴이란 퍼사드(Facade) 패턴은 복잡한 시스템을 쉽게 사용할 수 있도록 도와주는 디자인 패턴이다. 예를 들어, 컴퓨터를 켜면서 하는 일들을 생각해 보자. 전원 버튼을 누르는 것만으로 운영체제가 시작되고, 여러 프로그램이 실행되고, 네트워크에 연결되는 일들이 일어난다. 이 모든 복잡한 과정들을 단 한 번의 버튼 클릭으로 간단하게 처리할 수 있는 것처럼, 퍼사드 패턴은 프로그래밍에서도 비슷한 역할을 한다. 1-2. 퍼사드 패턴의 역할 퍼사드 패턴은 복잡한 서브시스템의 기능들을 간단한 인터페이스로 제공함으로써 클라이언트 측 개발자가 내부 로직의 복잡성을 몰라도 되게 한다. 이 패턴은 여러 복잡한 클래스들과의 직접적인..
가볍게 알아보는 디자인 패턴 - 팩토리 메서드 패턴(Factory Method Pattern)
·
Spring 기초/Spring 기초 지식
팩토리 메서드 패턴에 대해서 알아보자 1. 팩토리 메서드 패턴이란? 팩토리 메서드 패턴은 객체 생성을 추상화하고 캡슐화하는 디자인 패턴이다. 스프링에서 이 패턴은 BeanFactory와 ApplicationContext를 통해 구현된다. 객체를 직접 생성하는 대신, 팩토리를 통해 객체를 요청하면, 이 팩토리가 객체 생성의 복잡성을 숨기고 필요한 객체를 제공한다. 1-1. 팩토리 메서드 패턴의 기본 구조 1. 정의 팩토리 메서드 패턴은 객체의 생성 과정을 서브 클래스에 위임하는 디자인 패턴이다. 이를 통해 클라이언트 코드는 구체적인 클래스의 인스턴스화 과정을 알 필요 없이, 객체를 생성할 수 있다. 2. 구현 방식 이 패턴은 팩토리 메서드를 정의하여, 이 메서드가 객체를 생성하고 반환하는 역할을 한다. 클..
가볍게 알아보는 디자인 패턴 - 싱글톤 패턴(Singleton Pattern)
·
Spring 기초/Spring 기초 지식
스프링에 적용된 싱글톤 패턴에 대해서 간단히 알아보자 1. 싱글톤 패턴의 구조 이해하기 1-1. 스프링 컨테이너 이해하기 스프링 컨테이너는 ApplicationContext를 통해 정의된다. 이 컨테이너는 IoC(Inversion of Control) 또는 DI(Dependency Injection) 컨테이너로도 알려져 있다. 주요 역할은 애플리케이션 내의 빈(Bean)들을 인스턴스화, 구성, 관리하는 것이다. 이 과정을 통해 개발자는 객체의 생성과 생명주기에 대해 걱정할 필요 없이 비즈니스 로직에 집중할 수 있다. 1-2. IoC 컨테이너 (스프링 컨테이너)의 중요성 IoC 컨테이너는 객체의 생성과 의존성 주입을 담당한다. 이는 객체 간의 의존성을 느슨하게 만들어, 코드의 재사용성과 테스트 용이성을 향..