전체 글 (14) 썸네일형 리스트형 Spring boot Pageable 유지하며 Restrict Sort 구현하기 ❗문제 : Spring boot 에서 Pageable 을 통해 page, size, order 등 페이징에 대한 정보를 받아 오려고 하는데, sort 의 property 입력이 어려워요!테스트 해보겠습니다.import lombok.extern.slf4j.Slf4j;import org.springframework.data.domain.Pageable;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@Slf4j@RequestMappin.. RequestParam, RequestBody, MyBatis 는 어떻게 객체를 매핑할까? 1. Controller RequestArgument Test 🚫 NoArgsConstructor curl http://localhost/test353?name=a @Controller public class ConstructTestController { @GetMapping(value = "/test353") public void test(ConstructTest test) { System.out.println(test); } } public class ConstructTest { private String name; private String regCd; private String carNo; } b. ✅ ArgsConstructor curl http://localhost/test353?name=a .. 가비지 컬렉션 작동 원리 가비지 컬렉션 이란? Garbage Collection 쓰레기 수집, 여기서 쓰레기는 프로그램이 동적으로 할당 했던 메모리 영역 중에서 필요없게 된 영역을 의미한다. 필요 없게 된 영역을 그대로 둔다면, 사용하지 않지만 선점하고 있는 메모리의 양이 늘어나게 되며, 그만큼 메모리가 낭비된다. 이런 현상을 메모리 누수 ( Memory Leak ) 라고 한다. Unmanaged 언어인 C, C++ 등은 이런 메모리 누수 현상을 직접 다뤄야 하지만, Managed 언어인 Java 는 가비지 컬렉션이라는 개체가 알아서 이를 해결해 준다. name 이라는 변수에 "홍길동" 이라는 객체가 담겨 있다가 "강백호" 객체를 name 에 할당해주면, "홍길동" 객체는 참조되지않는 객체가 된다. 이런 객체들을 Java 의 G.. 웹 서비스 작동원리 웹 서비스란 네트워크 상에서 서로 다른 종류의 컴퓨터들 간에 상호작용을 하기 위한 소프트웨어 시스템 클라이언트 와 웹서버의 통신을 살펴보겠다. 클라이언트와 웹 서버는 HTTP 프로토콜을 통해서 통신한다. HTTP 프로토콜은 서로 통신하기 위한 규약이다. 클라이언트는 요청에 맞게 무엇을 어떻게 등을 표현하는 Method, URL 등을 보내며, 웹 서버는 응답에 맞게 요청이 적절했는지, 어떤형식의 데이터를 보내는지 등에 맞는 Status, Content-Type 등을 보낸다. 웹 서버의 단점은 정적 데이터만 보낼 수 있다는 것이다. 그래서 웹 컨테이너 가 생겼다. Web Application Server, 즉 WAS 는 웹 서버와 웹 컨테이너를 포함한 용어다. 정적 데이터만 응답 할 수 있다는 단점을 Web.. JVM 작동원리 JVM 은 Java Virtual Machine 의 약자로, 자바를 동작하게 해주는 소프트웨어 이다. (겪어 보지 못한) 다른 이전 언어들은 OS 마다 개발을 달리 해줘야 했다고 한다. 그러나 Java 언어 창시자는 OS 마다 개발하기 귀찮았던건지 아주 편리하게 OS 에 상관없이 개발할 수 있게 만들어 줬다. 그 역할이 JVM 이 하는 가장 큰 역할이라고 생각한다. JVM 을 살펴보겠다. JVM 은 클래스 파일을 읽는다. Class Loader 는 클래스 파일을 가져오는 역할을 한다. Execution Engine 은 가져온 클래스 파일을 번역하는 역할을 한다. Runtime Data Areas 는 코드를 진행하여 OS 에 명령을 내리는 역할을 한다. 한 단계 더 들어가 보겠다. Execution Eng.. ModelMapper 사용 시 Setter 쓰기 싫을 때 Entity 와 Dto 매핑 시에 필드들을 하나하나 나열하기도 하지만, 라이브러리를 사용하여 진행하기도 하는 것 같다. 그래서 저번에 배워본 ModelMapper 를 이용하여 쉽게 변환하려 했다. ModelMapper ModelMapper - Simple, Intelligent, Object Mapping. Why ModelMapper? The goal of ModelMapper is to make object mapping easy, by automatically determining how one object model maps to another, based on conventions, in the same way that a human would - while providing a simple, .. java.util.ConcurrentModificationException 발생 Cache 기능을 담당하는 Map 을 Service 에 필드값으로 갖고 두 메서드에서 접근한다. 검색(search) 후 데이터들을 업데이트(updateAllSearch) 한다. ConcurrentModificationException 이 발생했다. This exception may be thrown by methods that have detected concurrent modification of an object when such modification is not permissible. 이 예외는 오브젝트의 허가되지 않은 동시 수정이 감지될 때 발생합니다. 루프 문 안에서 해당 객체를 삭제 했기 때문에 발생 remove 시행하지 않고 덮어쓰기 시행 또는 HashMap 대신 ConcurrentHash.. @Builder 사용시 초기화할 필드가 있다면 @Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. If it is not supposed to be settable during building, make the field final. @Builder 는 초기화 표현을 완전히 무시한다. 초기화 하고 싶으면 @Builder.Default 를 사용해. 아니면 final 쓰면돼 라고 합니다. plating 이란 필드의 초기값을 정해주고, delete 라는 메서드를 통해 변경할 여지가 있으므로 @Builder.Default 를 넣었습니다. 이전 1 2 다음 목록 더보기