분류 전체보기
-
[Spring] Java 8 LocalDateTime 직렬화/역직렬화 오류 해결Framework/Spring 2023. 5. 30. 23:30
상황 스프링 부트를 사용하다가 ObjectMapper objectMapper = new ObjectMapper(); 방식으로 사용하려고 하였는데 다음과 같은 에러가 발생하였다. Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling 메세지를 파악하고 구글링 해보니 jackson-datatype-jsr310 모듈을 사용하면 된다는 거 같은데 스프링 부트를 기본적으로 사용하는 경우 ObjectMapper가 자동 빈 주입되는 것으로 아는데 굳이 이걸 해줘야 하나? 라는 생각이 들었..
-
[Spring] Querydsl select null 처리Framework/Spring 2023. 3. 17. 21:00
스프링에서 querydsl(5.0.0 기준)을 사용하다보면 테이블에 있는 값이 아닌 테이블의 특정 값으로 projection해야 될 때가 있다. select절만 예시로 보면 select(new QDto(user, info)).from(user).leftJoin(info)... 이렇게 되어 있다고 할 때 공통의 querydsl을 사용해야 할 때 info 부분만 null로 사용할 때 다음과 같은 에러를 볼 수 있다. 아래의 예시처럼 한 개의 쿼리로 동일한 dto로 사용할 때이다. 1. select(new QDto(user, info)).from(user).leftJoin(info)... 2. select(new QDto(user, null)).from(user).leftJoin(info)... 리턴값에 nu..
-
Java Collection - QueueLanguage/Java 2023. 2. 19. 14:45
자바 컬렉션 중 하나인 Queue(큐)에 대해서 정리를 하기 위한 포스팅이다. 상세한 정보는 java.util 패키지에 Queue 클래스에 나와 있다. 예외 발생 값 반환 Insert(추가) add(e) offer(e) remove(삭제) remove() poll() examine(검사) element() peek() queue에 값을 추가하는 함수는 표와 같이 add(e), offer(e) 2가지이다. 둘다 boolean을 반환하지만 add()의 경우 queue에 더 이상 추가할 수 없는 경우(queue의 용량이 꽉찬 경우) IllegalStateException 에러를 발생시키게 된다. offer의 경우 추가하지 못하는 경우 false를 반환한다. 그렇기 때문에 좀 더 안정적으로 사용할 수 있다. r..
-
JAVA JVM(자바 가상머신)에 관하여Language/Java 2023. 2. 18. 16:39
자바는 JVM(JAVA Virtual Machine) 위에서 동작한다. 이번 시간에는 JVM에 대한 정보를 공부해보도록 한다. JVM은 다음과 같은 특징을 가지고 있다. JAVA와 OS 사이에서 중개자 역할 메모리관리, Gabage Collection의 역할을 수행 ARM 아키텍쳐 같은 하드웨어는 레지스터 기반으로 동작하지만 JVM은 스택기반으로 동작 jvm은 이러한 역할을 하고 있는데 애플리케이션 개발자가 사용할 때 몰라도 된다고 생각할 수 있다. 하지만 다음과 같은 이유로, 최소한의 동작원리는 이해하고 아는 것이 중요하다고 본다. JVM을 알아야 하는 이유 한정된 메모리를 효율적으로 사용하여 최고의 성능을 내기 위하여 메모리를 효율적으로 사용하기 위해서(메모리 구조를 알아야 한다) JVM을 이해하기 ..
-
자바 진법 변환(2진법 10진법 등)Language/Java 2023. 2. 16. 23:05
자바에서 진수(진법) 변환하는 방식은 래퍼클래스의 함수를 통해서 이용하면 쉽게 변환이 가능하다. 특이사항은 다른 10진법에서 다른 진법으로 변환할 때 리턴값은 String이라는 점이다. 먼저 가장 흔한 2진법과 10진법 변환을 살펴보자. int i = 123; // 10진수 > 2진수 String binaryString = Integer.toBinaryString(i); // 출력 1111011 // 2진수 > 10진수 int binaryToDecimal = Integer.parseInt(binaryString, 2); // 출력 123 다른 진법은 많이 쓸 일은 없긴한데 간단하므로 쉽게 알아보도록 하자. // 10진수 > 8진수 String octalString = Integer.toOctalStrin..
-
[Mysql] docker compose로 mysql 설치 (+m1 맥북)DataBase/Mysql 2022. 6. 25. 21:00
맥북에서 docker를 설치하려면 공식 사이트에서 docker desktop을 설치하고 실행하면 됩니다. 공식 사이트를 들어가보면 다음과 같이 인텔 기반의 맥북과 실리콘(m1, m2) 기반의 맥북 설치버전이 나뉘어진 것을 알 수 있습니다. docker 까지는 설치가 무난하지만 이번에는 m1 기반의 맥북에서 docker로 mysql를 설치해보는 것입니다. (다운 받을 버전은 docker hub 공식 사이트에서 정보를 확인할 수 있다.) 우선 디렉토리 구조에 대해서 살펴보면, - db - conf.d - data - ... - initdb.d - sql 문을 넣어두는 부분 생략가능 - create_table.sql - load_data.sql - docker-compose.yml - .env - my.cnf..
-
[Spring] Test 코드에서 @Slf4j 사용하기Framework/Spring 2022. 5. 3. 21:57
스프링으로 서버를 작성하다가 테스트 코드 작성할 때 로그를 출력해야할 때가 있다. 일반적으로 스프링 부트로 개발을 할 때 lombok 라이브러리는 거의 필수이므로, @Slf4j를 쉽게 어노테이션 형식으로 사용하곤 한다. (@Slf4j는 Simple Logging Facade for Java의 줄임말로 로깅을 위해서 사용된다고 보면 된다.) 사용법은 간단하다. 일반 클래스에서는 다음과 같이 사용한다. @Slf4j @RequiredArgsConstructor @RequestMapping("/v1/api/members") @RestController public class MemberController { @PostMapping public String createMember(@RequestBody @Vali..
-
[Spring] Domain time mappingFramework/Spring 2022. 4. 25. 23:16
도메인 작업을 할 때 어떤 데이터든지 시간 데이터는 필수 값이다. 스프링에서 도메인 엔티티를 생성할 때 db 컨벤션에 따라 createdAt, updatedAt을 자주 사용하곤 하는데 이 때 다음과 같은 어노테이션을 자주 사용하곤 한다. @CreationTimestamp, @UpdateTimestamp 우선, @CreationTimestamp는 insert와 같은 DML(Data Manipulation Language)이 이루어질 때 자동적으로 현재시간을 입력해주는 어노테이션이다. 그리고 @UpdateTimestamp는 DML중 update 쿼리가 발생할 때, 자동적으로 현재시간을 입력해주는 어노테이션이다. 예시코드는 다음과 같다. @CreationTimestamp @Column(name = "creat..