SpringBoot 에 h2 를 연결해서 JPA를 사용하는 기초 방법을 작성해본다. 사내에는 보통 구축된 DB가 있기 때문에 DB가 정해지지 않은 테스트 시 빼고는 잘 사용할 일이 없었는데 스터디하다가 연결하게 되어 남겨본다. 프로젝트 생성 IntelliJ 2023.3.4 를 사용하니까 이제 spring 프로젝트가 3버전으로 생성되어 jdk8 버전 프로젝트를 자동 생성할 수 없는 것 같다. 바꾸고 싶다면 상위버전으로 생성뒤에 다운그레이드 해야 할 듯 싶다? 다음으로 넘어가서 디펜던시를 추가하자 간단하게 필요한 녀석들만 추가해주고 프로젝트를 생성하자 아래와 같이 build.gradle 이 생성될 것이다. plugins { id 'java' id 'org.springframework.boot' version..
Oracle java jdk 계정 맨날 까먹어서 받기도 귀찮을 뿐더러 open-jdk 가 잘 활성화 된 탓에 굳이 오라클 jdk 를 설치 안해도 되는 상황이기에 open-jdk 를 버전과 OS 환경에 알맞춰 아주 쉽게 다운로드 받는 사이트를 다 아시겠지만 추천드린다. Deploy Open Source Backed by Enterprise Services | OpenLogic OpenLogic enabled us to avoid downtime, reduce organizational costs, maintain security compliance, and facilitate an overall source risk strategy. www.openlogic.com 위 오픈로직닷컴 사이트에 들어가셔서 Do..
엔티티의 LocalDateTime 날짜형식 데이터를 년월(YYYY-MM) 로만 비교해줘야 하는 상황이 생겼다. 그 동안은 String 형식으로 넘어온 날짜데이터를 비교할 때, AttributeConverter 를 사용해서 mapstruct 에서나 querydsl 에서 사용해왔었다. [Mapstruct] LocalDateTime To String Converter, 엔티티와 DTO간 타입이 다를때 맵핑하기 (feat.AttributeConverter) 보통 날짜값을 사용할 때 db와 뷰와의 관계에서 컨버팅을 자주 하게 된다. DB에는 예쁘게 들어가있지만 사용자 화면에 그대로 뿌리면 보통 우리가 보던 포맷이 아니기 때문에 매우 별로다. 그래 jong-bae.tistory.com 그 동안 비교값을 LocalD..
Mapstruct 를 활용하면 Entity ↔ DTO 간 필드들을 쉽게 맵핑하여 사용할 수 있습니다. 필드가 많아지면 일일이 손수 맵핑하는게 여간 귀찮은 일이 아니며, 생각없이 맵핑하다가 타이핑 실수로 맵핑이 안되는 경우가 발생 할 수 있기 때문에 Mapstruct 를 잘 활용하는 것이 좋습니다. 이번 포스트에서는 mapstruct 로 간단히 entity 와 DTO 간 필드를 맵핑하는 법과 @Mapping 어노테이션을 활용하여 필드 데이터를 조작 맵핑하는 방법을 다뤄보려고 합니다. 더 고급 기술들이 있지만 저도 아직 실 사용하지 않는터라 다 다루지는 않겠습니다. Mapstruct 를 사용하기 위해서는 아래의 dependency 를 추가해줍니다. implementation 'org.mapstruct:map..
필자도 한때 프로젝트를 뛰면서 생각없이 기간내에 처리하기 위해 @Autowired 를 이용한 의존주입을 남발하여 사용해왔고, 지금도 자연스럽게 이를 사용해왔습니다. (사실 Spring을 처음 접할 때 그렇게 쓰라고 가르쳤었음...) 생성자를 이용하는 것이 이점이 있음을 알고 있었지만 간편함에 빠진 오래된 버릇을 고치기란 쉽지 않았습니다. 그래서 신규로 하는 프로젝트에는 이런것들을 없애고자 @Autowired 를 완전 지양하도록 하려고 합니다. 이미 @Autowired 의 사용은 공식문서 그리고 Spring팀에서 지양을 권고해왔습니다. 단점들이 너무 명확했기에... - 불확실한 참조 - 코드 변이의 가능성 - 순환참조의 가능성 (컴파일 시 검출 불가) - 단일책임의 원칙 위반 가능성 장점은 남발하기 편하다..
리플렉션(Reflection) 을 사용하면 런타임 시점에 해당 클래스의 내부를 들여다 볼 수 있다. 클래스의 내부를 들여다 볼 수 있는 보안상의 이유로 코드작성을 지양하고는 있지만... 동적인 필드를 처리해야 하는 상황에서는 쉽게 접근 할 수 있는 방법이기도 하다. 사용자단에서 동적 key 를 가지는 Object 를 받아 엔티티 값을 set 해야 하는 상황이 생겨 여러 방법이 떠올랐으나 심플하게 적은코드로 처리 할까 하다가 리플렉션으로 처리하기로 했다. 데이터는 아래와 같이 동적 Object 형태로 만들어져 넘어왔다.