현재 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..
Effective Java의 Item 17을 읽고 정리한 내용입니다. 변경 가능성을 최소화하라 불변 클래스란 인스턴스의 내부 값을 수정할 수 없는 클래스를 의미한다. (객체가 파괴되는 순간까지 절대 달라지지 않는다.) 클래스를 불변으로 만들기 위한 규칙 객체의 상태를 변경하는 메서드를 제공하지 않는다. 클래스를 확장할 수 없도록 한다. (final 키워드 사용) 클래스의 모든 필드를 final로 선언한다. 클래스의 모든 필드를 private로 선언한다. 자신 외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다. 5번 규칙이 잘 이해가 되지 않아 좀 더 자세히 정리해 봤다. 5번 규칙이 의미하는 바는 캡슐화라는 불변성의 측면을 나타내는데 더 자세히 말하면 객체의 내부 상태가 자체 메서드를 통해서만 변경되..
Spring Servlet이란? Spring Servlet은 웹 애플리케이션에서 클라이언트의 요청을 처리(요청을 받고, 응답을 반환)하는 작업을 한다. 일반적으로 이 Servlet을 Spring MVC 패턴에서 DispatcherServlet이라고 불린다. (Servlet은 일반적인 개념과 인터페이스를 나타내고, DispatcherServlet은 Spring의 특정 구현을 나타낸다.) 용어가 좀 헷갈릴 수 있는데 간단히 말하면 DispatcherServlet은 Servlet이지만 모든 Servleet이 DispatcherServlet은 아니다. Spring에서 DispatcherServlet의 역할은 Spring 기반 웹 애플리케이션의 앞단(front controller)에서 웹 요청을 적절한 Contr..
지난 포스팅에 이어 Spring WebClient에 대해 정리해 보자. Spring WebClient WebClient는 Spring 5에서 도입된 클라이언트 측에서 HTTP 요청 작업을 처리할 때 사용되는 비동기, Non-Blocking 방식의 웹 클라이언트이다. Spring에서 제공하는 기존의 HTTP 클라이언트인 RestTemplate의 리액티브 버전으로 생각할 수 있다. RestTemplate은 Blocking I/O를 기반이기 때문에 하나의 요청을 처리하는 동안에는 해당 스레드는 다른 작업을 처리할 수 없다는 특징이 있다. 반면, WebClient는 비동기적이고 Non-Blocking 기반이기 때문에 HTTP 요청을 보내고 응답을 비동기적으로 처리하는 것이 가능하다. 하나의 요청을 처리하는 동안..
오늘은 기존에 작성되어 있던 코드에서 별도의 프로젝트 모듈을 만들어서 분리하는 작업을 했다. 프로젝트 세팅하고 코드만 옮기면(ctrl c + ctrl v만 하면 되는 줄..) 되는 간단한 문제인 줄 알았는데 생각보다 변경되어야 할 점이 많아 시간을 많이 잡아먹었다.. 우선 기존 프로젝트는 Quarkus라는 프레임워크를 이용해 AppSync를 통해 실시간 데이터를 전송하고 있던 프로젝트였는데 분리해서 만들어야하는 프로젝트는 Quarkus 프레임워크가 아닌 Spring 프레임워크를 이용해서 새로운 프로젝트를 세팅해야 했다. Spring 프로젝트를 만들어서 코드를 옮기는데 Quarkus에만 존재하는 어노테이션들이나 기능들이 있어서 Spring으로 마이그레이션하는데 찾느라 시간을 많이 잡아먹었던 것이었다. 그중..
Partition DynamoDB는 테이블을 생성할 때 partition key와 선택적으로 sort key를 지정할 수 있다. DynamoDB는 방금 생성해준 partition key를 기반으로 자동으로 partition(DynamoDB 내부의 물리적 저장소)이라는 물리적 저장 공간을 생성하는데 하나의 partition key는 하나의 partition에만 할당할 수 있다. 하지만 partition에 데이터가 많아질수록 DynamoDB는 partition을 자동으로 분할하여 더 많은 저장 공간을 제공하고 처리량을 늘린다. DynamoDB는 같은 partition key를 가진 item들을 같은 partition에 저장되도록 설계되어 있기 때문에 같은 partition key를 가진 item을 다른 pa..