리플렉션(Reflection) 을 사용하면 런타임 시점에 해당 클래스의 내부를 들여다 볼 수 있다. 클래스의 내부를 들여다 볼 수 있는 보안상의 이유로 코드작성을 지양하고는 있지만... 동적인 필드를 처리해야 하는 상황에서는 쉽게 접근 할 수 있는 방법이기도 하다. 사용자단에서 동적 key 를 가지는 Object 를 받아 엔티티 값을 set 해야 하는 상황이 생겨 여러 방법이 떠올랐으나 심플하게 적은코드로 처리 할까 하다가 리플렉션으로 처리하기로 했다. 데이터는 아래와 같이 동적 Object 형태로 만들어져 넘어왔다.
일반적으로 javascript 에서 Object 를 생성하는 방법은 아래와 같다. let obj = new Object(); obj.key = value; let obj = { key : value } let obj = new Object(); obj.name = "park"; let obj = { name : "park" } console.log(obj); // { name:"park" } 보통 위와같이 규정한 key 값을 정해서 Object 를 만들어서 Request 를 Json 으로 보낼 것이다. 근데 개발을 하다보면 key 를 동적으로 해서 넘겨줘야 하는 상황도 있다. 예를 들어 반복으로 a1, a2, a3 ... 이런식으로 보낸다던가 어느 배열에 있는 값들로 key 를 구성한다던가 여러 상황들이..
Optional 클래스를 사용하면 null 처리를 쉽고 가독성 좋게 표현해줄 수 있습니다. 그 중 JPA에서 자주 사용하는 엔티티 ID 값으로 조회하는 findById 는 Optional 로 리턴하는 메소드 중 하나인데요. Optional findById(ID id); 이렇게 id 값에 따른 엔티티를 조회하여 엔티티가 존재하지 않을 경우 대체처리하는 로직을 간결하게 수행할 수 있습니다. 저도 연관된 id 값을 반복 돌리면서 update를 수행하는 코드가 있었는데 생각없이 조건문과 isPresent() 를 이용해서 코드를 작성해놓고 보니 if != null 처리와 뭐가 다른가 싶은 생각이 들었습니다. param.getFileList().forEach(file -> { Optional loadEntityOp..
설정파일에 DB 정보와 Mail 발신인 정보가 그대로 노출될 경우 보안에 취약해질 수 있어 해당 정보를 암호화해서 넣어주거나 설정파일을 외부에 빼서 따로 관리해줘야 한다. Spring에는 Jasypt 라는 라이브러리로 암호화 시켜서 설정파일을 관리할 수 있다. Jasypt 라이브러리 등록 implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5' 암호화 방식 및 키값을 설정하는 빈을 생성. @Configuration public class ApplicationConfig { @Bean(name="jasyptStringEncryptor") public StringEncryptor stringEncryptor() { String ke..
Spring Security를 사용하면 강력한 로그인 기능을 사용할 수 있는데 간혹 내부 관련 각 사이트들끼리 자동 로그인을 시킬때가 있다. 이때 보통 A사이트에 로그인한 id 값, 쿠키, 세션 정보등을 가지고 B사이트에 넘겨주어 계정 정보를 조회하여 별도의 로그인 없이 처리해주는 기능을 만들 수 있다. 간단하게 A 사이트에서 로그인 한 뒤 id값을 전달하여 B사이트에서 id 체크 후 로그인 처리를 바로 해버리는 컨트롤러를 하나 작성하면 된다. @GetMapping("/loginWithoutForm/{id}") public String loginWithoutform(@PathVariable(value="id") String id) { UserDetails user = loginService.loadUse..
입력폼에서 전화번호 입력했을 때 하이픈을 자동으로 기입하고 싶을 때가 있다. 입력할 때 계산해서 하이픈 자동 변환 함수를 만들어서 사용해 봤다. function addHyphenToPhoneNumber(phoneNumberInput) { const phoneNumber = phoneNumberInput.value; const length = phoneNumber.length; if(length >= 9) { let numbers = phoneNumber.replace(/[^0-9]/g, "") .replace(/^(\d{2,3})(\d{3,4})(\d{4})$/, `$1-$2-$3`); phoneNumberInput.value = numbers; } } const phoneInput = document...