전체 글 63

Spring Boot(스프링부트) 핵심 특징과 Spring과의 관계

Spring Boot와 Spring의 관계Springboot(스프링부트)라는 단어를 처음 마주하면 그래서 Spring Framework와 다른 거야? 다르다면 어떻게 다른 건데?라는 궁금증이 생긴다. 굳이 구분을 짓자면 이름에서도 알 수 있듯이 Springboot는 Spring과 별개이다. 그래서 Spring의 버전과 Springboot의 버전을 말할 일이 있다면 잘 주의해서 말해야 한다. 하지만 그렇다고 Springboot가 Spring을 대체하거나 승계하여 나온 새로운 기술도 아니다. 결론부터 말하자면, Springboot는 Spring Framework를 더 쉽게 사용하도록 돕는 도구들의 모음이다. 즉, Springboot는 Spring을 효과적으로 사용하는 방법에 대한 강한 의견이 반영된 프레임워..

Spring 2024.10.30

Method invocation may produce NullPointerException 과 Optional 활용

IDE에서 "Method invocation may produce NullPointerException" 경고 메시지를 발견했다. 왜 이런 Warning이 표시되는가?Method invocation '~~~' may produce NullPointerException 경고를 해석해 보면 메서드 호출 시 NullPointerException이 발생할 수 있다는 것을 의미한다.저의 경우엔 getString() 메서드를 호출할 때 paramters 객체가 null일 수도 있다는 말인데.. 사실 위 코드는 Spring에서 제공하는 인터페이스를 활용하는 거라 JobParameters가 null일 수가 없는 코드이기는 했다. IDE가 이런 메시지를 나타내는게 이해가 안 되긴 하지만, 좀 생각해 보니 getStrin..

Java 2024.10.11

코드로 살펴보는 DispatcherServlet과 Servlet 인터페이스 (2)

이전 글에서 DispatcherServlet이 Aware 인터페이스를 활용해 어떤 역할을 하는지 알아봤다.이번에는 Servlet 인터페이스로부터 파헤쳐 보자. Servlet 인터페이스로부터 시작하는 DispatcherServlet먼저 서블릿(Servlet)이라는 개념을 찾아보면 '자바 웹 애플리케이션에서 HTTP 요청을 처리하기 위한 서버 측 컴포넌트'라고 정의되어 있다. 그러니까 Java에서 웹 요청을 처리하는 기술이자 구성 요소(오브젝트)라는 말인데.. 주로 Spring으로 웹 개발을 했었던 나에겐 당연한듯 익숙했던 Servlet이라는 대명사의 의미에 왜 Java라는 특정 언어에 종속된 단어가 포함되어 있는 거지? 싶어서 더 찾아봤다.결론적으로 Servlet이라는 개념은 Java에만 해당하는 개념으로..

Spring 2024.10.06

코드로 살펴보는 DispatcherServlet과 Aware (1)

DispatcherServlet의 역할과 계층 구조클라이언트로부터 웹 요청이 들어왔을 때 WAS는 Spring Container가 가진 Object한테 요청에 대한 처리를 위임한다. 그리고 Spring에서 이 역할을 하는 것이 정확히는 DispatcherServlet인데, 위 행동을 하기 위해 어떤 Object가 어떤 요청 처리를 담당하고 있는지 알 수 있는 '매핑 정보'를 필요로 한다.즉 Spring 애플리케이션이 실행되면 DispatcherServlet이 빈으로 등록될 때 매핑 정보를 주입해 줘야 하는데, 어떻게 이게 가능한 걸까? 상속과 구현 계층 구조를 확인해 보자. Aware로 시작하는 DispatcherServlet내부 소스를 보면 가장 안쪽에 Aware이라는 마커 인터페이스(Marker In..

Spring 2024.09.26

IoC/DI란? 그리고 Spring이 적용하는 OCP(개방 폐쇄 원칙)

Spring Container는 흔히 Spring IoC/DI Container 라고 불릴 정도로IoC와 DI는 Spring에서 빠질 수 없는 가장 대표적인 특징이다.그런데 DI(의존성 주입) 그리고 IoC(제어의 역전)라는 단어만 따로 보면 직관적으로 이해하기 어렵다.분리되어 있는 두 개념을 한 번에 정리하면서,객체 지향 설계 원칙 중 하나인 OCP(개방 폐쇄 원칙)를 알아보자. Spring IoC/DI Container의 의미의존성 주입(Dependency Injection)이라는 용어는 의존관계를 주입해 준다는 것을 말하는데, 여기서 '의존 관계'라는 건 Spring에서만의 특별한 개념이 아니라 어떤 A라는 객체가 B라는 클래스 or 오브젝트를 사용하는 것을 뜻한다. 이때 'A는 B에 의존하고 있다..

Spring 2024.09.21

Servlet Container란? 그리고 Spring과의 관계

Servlet과 Servlet ContainerServlet은 URI정보 및 클라이언트의 요청 정보를 분석하는 기능을 담당하는 Java 표준 기술이다. 그리고 이 표준 기술을 이용한 Servlet Container 중 가장 대표적인 예로 Tomcat이 있다. 다시 말해, 우리가 많이 사용하는 Tomcat이라는 WAS는 (Servlet) Container 기술을 구현한 라이브러리 중의 하나이며, Tomcat 자체가 Java의 표준이 아니다. 이외에도 종류가 많은데 특히 Springboot에서는 Tomcat 과 Jetty, undertow(언더토우) 이 3가지의 Container를 Standalone하게 동작할 수 있도록 지원하고 있다(쉽게 변경 및 선택이 가능하다) Spring Boot Reference ..

Spring 2024.09.17

maven-default-http-blocker 에러 발생 원인 및 해결 방법(feat. IntelliJ)

인텔리제이(IntelliJ)에 프로젝트 세팅을 하기 전에, 이클립스(Eclipse)에서 먼저 정상적으로 실행이 되는지 전부 확인하고 진행을 하는 편이다.(아직 이클립스가 더 편함ㅠㅜ)근데 Eclipse에서는 잘 동작하는 소스더라도 새롭게 IntelliJ에 첫 세팅을 하려고 하면 항상 문제가 발생한다. 이때 확인해 볼 부분이 몇 가지가 있는데, 해당 글에서는 Maven update 및 build 시 빌생하는 http blocker 에 대해서 얘기해보겠습니다. Blocked mirror for repositoriesIntellij에서 Maven update를 하려고보니 아래 에러 메시지를 뱉으면서 진행이 안된다.(당연한 말이지만 eclipse에서도 발생할 수 있다)Could not transfer artif..

개발도구 2024.09.10

Spring Container란 무엇인가?

컨테이너(Container)란?꼭 스프링(Spring)뿐만이 아니더라도 소프트웨어 분야에서는 컨테이너(Container)라는 용어가 자주 등장한다.물건을 해외로 보낼 때 항구에서 화물을 적재하기 위한 공간을 컨테이너라고 하듯이, 컨테이너라는 것은 결국 '무언가를 담는 공간'을 의미한다.(매번 그렇지만 다양한 맥락에서 사용되는 단어들은 무언가 되게 추상적으로 느껴진다😑)그리고 서버에서 동작하는 거의 대부분의 기술은 컨테이너 위에서 오브젝트를 만들어 놓고 필요에 따라 그 오브젝트를 제공받아 사용하는 방식으로 유지된다. Spring에서 몇 가지 예를 들자면, DispatcherServlet 그리고 DB와의 Connection을 연결해 주는 DataSource 등이 있겠다. dispatcher or..

Spring 2024.09.06

Bean이란? 그리고 Spring의 싱글톤 활용(singleton registry)

빈(Bean) 이란?Bean이란 컴포넌트 모델에서 유래한 JavaBeans에서 따온 단어이다.컴포넌트 모델(Component Model)은 모듈화, 재사용성, 유지 보수성을 위해 발전해 온 소프트웨어 개발의 범용적인 개념인데, 자바(Java)는 이 개념을 기반으로 JavaBeans라는 개발 표준을 도입했다.그래서 Bean이라는 용어는 Java 초기부터 '재사용 가능한 객체(Object)'를 지칭하는 용어로 자리잡았고, 이 개념이 스프링 프레임워크(Spring Framework)까지 이어지게 된 것이다. 이로 인해, 스프링 컨테이너에 의해 관리되는 객체를 Bean이라는 용어로 부르게 된 것이며 자바에서 컴포넌트(Component)란 사실상 Bean과 동일한 의미로 사용된다. 결론적으로 애플리케이션의 기능을..

Spring 2024.09.01

[OOP] 왜 Class가 아니라 Object Oriented Programming 일까?

'객체지향 프로그래밍'의 정의를 찾아보면 '소프트웨어 개발에서 객체를 중심으로 문제를 해결하는 방법론' 혹은 '프로그램을 객체라는 단위로 구성하여 개발하는 프로그래밍 기법'이라고 많은 곳에서 알려준다.너무나 당연한 말처럼 알고있던 이 단어가 어느날 문득 왜 Class Oriented 가 아니라 Object Oriented 라는 명칭으로 정해졌을까?라는 궁금점이 생겨 다시 정리해봤다. 객체지향 프로그래밍(OOP, Object-Oriented Programming)이란?OOP 라는 용어를 모른다고 할지라도 특히나 Java로 개발을 하면 반드시 객체를 만들게 되어있다.따라서 우리가 만드는 건 오브젝트(Object)가 맞다. 하지만 사실 코딩을 할 땐 Object라는 단어를 한 글자씩 타이핑하진 않고 실제로 p..

Java 2024.08.26