
스프링을 사용할 때 우리는 도메인을 보호하기 위해 DTO로 값을 받고 반환하는 과정이 필요하다. 하지만 매번 Builder, Constructor, Setter로 일일이 필드값을 넣어주는 과정이 꽤나 귀찮을 수 있다. 그리고 정의된 필드가 더더욱 많다면 더더욱 코드는 길어지고 거슬릴 수 있다. 그래서 이를 좀 더 쉽게 매핑해줄 수 있는 라이브러리에 대해서 포스팅한다. BeanUtils org.springframework.beans package에 있는 reflection 관련 기능들을 응집해놓은 라이브러리이다. 그 중 우리는 copyProperties 메서드에 대해서 알아볼 것이다. 장점부터 이야기하면 아주 간단하게 사용할 수 있다는 점이다. 다음의 코드를 보자. public class App { pub..

개발 환경 spring boot-2.6.6 jdk17 상황 JDK 17 버전업 후 다음과 같은 에러 발생 javax.validation.ConstraintDeclarationException: HV000170: No JSR-223 scripting engine could be bootstrapped for language "javascript". at com.sds.promise.workflow.model.request.WorkflowNodeRequestTest$progress.givenToDoAndProgress0(WorkflowNodeRequestTest.java:37) Caused by: org.hibernate.validator.spi.scripting.ScriptEvaluatorNotFoundE..

오늘은 같은 타입의 빈이 여러 개인 경우 식별하는 방법을 포스팅한다. 주제는 빈을 식별하는 방법으로 코드의 내용은 신경쓰지 않고 단순히 구분을 위해 작성했다. public interface MailService { void sendEmail(String email); } @Service public class NaverMailServiceImpl implements MailService { @Override public void sendEmail(String email) { System.out.println("Send naver mail to " + email); } } @Service public class GoogleMailServiceImpl implements MailService { @Overr..

백기선님의 강의를 기반으로 내용을 포스팅하고 있다. Spring에서 사용되는 IoC란 객체가 내부적으로 조작할 객체를 직접 생성하지 않고 외부로부터 주입받는 기법을 의미한다. 이때 객체를 외부로부터 주입해주는 작업을 DI(의존성 주입)이라고 부른다. 이때 IoC Container에 의해 관리되는 오브젝트들은 Bean 이라고 부른다. Bean은 일반 객체와는 다르게 라이프 사이클 인터페이스를 제공한다. OwnerController bean = applicationContext.getBean(OwnerController.class); // Bean OwnerController notBean = new OwnerController();// Bean이 아님 IoC Container는 Bean을 저장하고 관리하기..

이번 포스팅은 javax.validation package에 있는 검증 관련 어노테이션을 다뤄본다. 또한, 추가적으로 위의 어노테이션과 헷갈릴 수 있는(?) lombok package에 있는 NonNull 어노테이션과의 차이도 간단하게 나타낼 예정이다. javax.validation package 보통 validation은 컨트롤러단에서 주로 사용된다. 클라이언트에서 서버로 넘어온 객체 내의 필드를 검증해서 서비스 단으로 넘길 필요가 없기 때문이다. 우리가 javax.validation package의 @Valid를 사용하면 검증 필드에 javax.validation.constraints 내의 검증 어노테이션들을 사용하게 되는데, 이번 포스팅은 제목과 같이 null과 관련된 어노테이션을 다룰 것이고 그 ..

스프링의 기초를 다시 한 번 복습하고자 인프런의 백기선님 강의를 들으면서 간단한 과제가 있어서 나만의 방식으로 과제를 해결해본다. 환경은 다음과 같다. OS : Mac M1 IDE : IntelliJ 2021.3 Compile : JDK 11 Build : Maven Project target : sprint-petclinic 과제의 요구 사항은 다음과 같다. lastName을 firstName으로 검색할 수 있게 변경한다. 정확히 일치하는게 아니라 부분 검색으로 가능하도록 변경한다. Owner에 age를 추가한다. 1. firstName으로 검색할 수 있게 변경하기 firstName으로 검색하기 위해선 다음을 고려했다. 화면 검색 단에 firstName 으로 표시해야 한다. 실제로 값을 입력했을 때 O..