[개발일지] 230706 Java BiFunction 인터페이스
·
성장이야기/TIL
새로운 메서드를 추가하는데 기존에 존재하는 코드와 중복되는 부분이 많아 코드를 재사용하기 위해 BiFunction이라는 것을 사용할 수 있다는 것을 알게 되었다. 그래서 오늘은 BiFunction에 대해 알아보려고 한다. BiFunction BiFunction은 Java 8에서 도입된 함수형 인터페이스 중 하나로, 두 개의 입력을 받아 결과를 반환하는 함수를 모델링합니다. BiFunction 인터페이스 인터페이스에서 T와 U는 함수의 입력 타입이고, R은 반환 타입이다. BiFunction을 사용하는 간단한 예제 코드를 살펴보자. BiFunction biFunction = (x, y) -> x + y; String biFunctionResult = biFunction.apply("Hello", " Wor..
[개발일지] 230704 no main manifest attribute error (With Manifest, jar)
·
성장이야기/TIL
현재 Spring boot 파일을 docker 환경에서 독립적으로 실행해야 하는 상황인데 no main manifest attribute error가 발생했다. main mainfest 속성이 없다는데 manifest가 뭔지 알아보자. JAR (Java Archive) MANIFEST.MF 파일을 알아보기 전에 jar파일부터 간단하게 알아보자. jar파일은 여러 개의 Java 클래스 파일, 메타데이터 및 리소스를 하나의 파일로 모아서 사용되는 패키지 파일 포맷이다. 쉽게 생각하면 Java 프로젝트를 압축한 파일이라고 생각하면된다. 이 jar파일 안에 존재하는 MANIFEST.MF 파일을 이용해 독립적으로 실행될 수 있는 애플리케이션으로 사용될 수 있는데 이 MANIFEST.MF에 대해 알아보자 Manif..
[Java] 불변 클래스로 변경 가능성을 최소화하자
·
Java
Effective Java의 Item 17을 읽고 정리한 내용입니다. 변경 가능성을 최소화하라 불변 클래스란 인스턴스의 내부 값을 수정할 수 없는 클래스를 의미한다. (객체가 파괴되는 순간까지 절대 달라지지 않는다.) 클래스를 불변으로 만들기 위한 규칙 객체의 상태를 변경하는 메서드를 제공하지 않는다. 클래스를 확장할 수 없도록 한다. (final 키워드 사용) 클래스의 모든 필드를 final로 선언한다. 클래스의 모든 필드를 private로 선언한다. 자신 외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다. 5번 규칙이 잘 이해가 되지 않아 좀 더 자세히 정리해 봤다. 5번 규칙이 의미하는 바는 캡슐화라는 불변성의 측면을 나타내는데 더 자세히 말하면 객체의 내부 상태가 자체 메서드를 통해서만 변경되..
[Spring] Spring Servlet과 Servlet Container란? (DispatcherServlet)
·
Java/Spring
Spring Servlet이란? Spring Servlet은 웹 애플리케이션에서 클라이언트의 요청을 처리(요청을 받고, 응답을 반환)하는 작업을 한다. 일반적으로 이 Servlet을 Spring MVC 패턴에서 DispatcherServlet이라고 불린다. (Servlet은 일반적인 개념과 인터페이스를 나타내고, DispatcherServlet은 Spring의 특정 구현을 나타낸다.) 용어가 좀 헷갈릴 수 있는데 간단히 말하면 DispatcherServlet은 Servlet이지만 모든 Servleet이 DispatcherServlet은 아니다. Spring에서 DispatcherServlet의 역할은 Spring 기반 웹 애플리케이션의 앞단(front controller)에서 웹 요청을 적절한 Contr..
[개발일지] 230630 Spring WebClient (Mono)
·
성장이야기/TIL
지난 포스팅에 이어 Spring WebClient에 대해 정리해 보자. Spring WebClient WebClient는 Spring 5에서 도입된 클라이언트 측에서 HTTP 요청 작업을 처리할 때 사용되는 비동기, Non-Blocking 방식의 웹 클라이언트이다. Spring에서 제공하는 기존의 HTTP 클라이언트인 RestTemplate의 리액티브 버전으로 생각할 수 있다. RestTemplate은 Blocking I/O를 기반이기 때문에 하나의 요청을 처리하는 동안에는 해당 스레드는 다른 작업을 처리할 수 없다는 특징이 있다. 반면, WebClient는 비동기적이고 Non-Blocking 기반이기 때문에 HTTP 요청을 보내고 응답을 비동기적으로 처리하는 것이 가능하다. 하나의 요청을 처리하는 동안..
[개발일지] 230629 Spring WebFlux란? (with. Reactive programming)
·
성장이야기/TIL
오늘은 기존에 작성되어 있던 코드에서 별도의 프로젝트 모듈을 만들어서 분리하는 작업을 했다. 프로젝트 세팅하고 코드만 옮기면(ctrl c + ctrl v만 하면 되는 줄..) 되는 간단한 문제인 줄 알았는데 생각보다 변경되어야 할 점이 많아 시간을 많이 잡아먹었다.. 우선 기존 프로젝트는 Quarkus라는 프레임워크를 이용해 AppSync를 통해 실시간 데이터를 전송하고 있던 프로젝트였는데 분리해서 만들어야하는 프로젝트는 Quarkus 프레임워크가 아닌 Spring 프레임워크를 이용해서 새로운 프로젝트를 세팅해야 했다. Spring 프로젝트를 만들어서 코드를 옮기는데 Quarkus에만 존재하는 어노테이션들이나 기능들이 있어서 Spring으로 마이그레이션하는데 찾느라 시간을 많이 잡아먹었던 것이었다. 그중..