전체 글 62

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

HTTPie 설치 및 Terminal & IntelliJ에서의 사용법

HTTPie라고 터미널에서 HTTP 요청을 간편하게 수행하고 응답까지 가독성좋게 출력해주는 오픈소스 도구가 있는데, 이 HTTPie를 설치하는 방법과 IntelliJ에서 테스트하는 과정을 포스팅해 보겠습니다. 저처럼 Postman이나 웹브라우저로 매번 화면을 번갈아가며 사용하는 것도 귀찮아져intelliJ IDE내 터미널에서 Rest API 테스트를 하고 싶은 분들한테 유용할 것 같습니다.  Chocolatey를 통한 HTTPie 설치 및 테스트 우리가 원하는 건 터미널에서 사용하는 방법이니 공식 사이트에서 HTTPie App을 다운받으면 안되겠죠.터미널에서 HTTPie를 이용하기 위해선 'Chocolatey'라는 Windows OS의 소프트웨어 패키지 관리 도구가 필요합니다.(아래에서 나오지만 Pyth..

개발도구 2024.08.05