분류 전체보기: 2109개의 글
플렉션(Reflection) 로딩이 완료된 클래스에서 또 다른 클래스를 동적으로 로딩(Dynamic Loading)하여 사용하는것. Class.forName("클래스이름").newInstance 인터프리터(interpreter) 자바 컴파일러에 의해 변환된 자바 바이트 코드(.class)를 읽고 해석하는 역할 클래스 로더(Class Loader) 동적으로 클래스를 로딩해주는 역할 JIT 컴파일러(Just-In-time compiler) 프로그램이 실행중인 런타임에 실제 기계어로 변환해주는 컴파일러 동적 번역(Dynamic Translation)이라고도 불리며, 프로그램 실행 속도를 향상시키기 위해 개발됨 자바 컴파일러가 생성한 자바 바이트 코드를 런타임에 기계어로 변환하는데 사용 JVM 실행 과정 OS로..
ModelMapper가 많이 사용하고 사용하기 편하나 성능 이슈가 있고, 아래 URL을 통해 확인할 수 있다. https://www.baeldung.com/java-performance-mapping-frameworks 따라서, 성능 이슈에 대응하기 위해 ModelMapper 대신 MapStruct를 대신 사용한다. MapStruct 설정 build.gradle 파일에 아래 의존성 추가 implementation 'org.mapstruct:mapstruct:1.3.1.Final' annotationProcessor "org.mapstruct:mapstruct-processor:1.3.1.Final" Mapper interface 클래스 생성 아래 interface 생성시 프로젝트 빌드하는 경우 클래스명 ..

해당 글은 MapStruct Library를 실무에서 사용하기 이전에 간단하게 기록했던 예제와 장, 단점을 옮겨온 글입니다. 자바 코드로 매핑하기 어떠한 라이브러리를 사용하지 않고 직접 객체 상태 간의 매핑 로직을 구현하는 방식은 약간의 수고스러움은 있으나 ModelMapper와 같이 Reflection 기반의 라이브러리보다 안전하다. entity, dto @ToString @Getter @NoArgsConstructor public class SampleEntity { private Long id; private String name; private String email; private Long age; private List sampleInfo; private String value; @Builde..

개발할 때 DockerFile 만들고 매번 원격지에 올리고 실행하는게 너무 귀찮았는데 Intellij에 관련 기능이 있길래 조금 삽질하다가 사용 방법을 정리합니다. [ Docker 사용하기 ] 기본으로 설치된 Docker Plugin이 있으면 위와 같이 Run | Configuration 항목에서 접속할 도커 엔진 정보를 추가할 수 있습니다. 이 화면은 OS마다 메뉴 구성이 약간씩 다른데, Windows의 경우 로컬에서 Hyper-V를 사용하는 Docker Desktop과 원격지에 tcp 소켓을 통한 도커를 추가할 수 있습니다. 이렇게 하면 Intellij에 내장된 Docker서비스가 활성화되고, GUI를 이용해 Docker Engine에 있는 컨테이너나 이미지들을 GUI로 다룰 수 있게 해줍니다. [ ..
오늘 알아볼 내용은 아직 릴리즈는 되지 않았지만 조만간 릴리즈될 Spring boot 2.0의 대해서 알아볼 예정이다. 아직 릴리즈전이라 바뀔 가능성이 있어 깊게는 살펴보지 않을 것이다. 또한 혹시나 기존(이전버전)과 동일한 기능을 마치 신기능처럼 이야기하거나 틀린이야기를 할 경우에는 피드백을 주길 바란다. 필자가 Spring boot를 좋아하는 이유중 하나도 Configuration Binding을 아주 손쉽게 해주기 때문이다. 하지만 기존의 버전과 2.0의 버전이 조금 달라졌다. 오늘은 그 내용을 살펴볼 예정이다. ConfigurationProperties prefix ConfigurationProperties 어노테이션은 아주 손쉽게 properties를 바인딩 해준다. 기존에는 underscore..

※ 자세한 사항은 핸들바스 홈페이지 참조 https://handlebarsjs.com/ Helper 란? 아래 예는 스크립트에서 Helper를 등록해서 사용하는 예제이다 fullName이라는 Helper는 person을 파라미터로 받아서 person.firstName + person.lastName을 해서 fullName을 리턴하는 Helper이다. Helper들은 아래와 같이 핸들바스에서 뷰를 만들기 위해 특별하게 동작하는 메소드이다. 자주 사용되는 Helper 들은 이미 JAR파일 안에 등록되어 있다. 근데 아래와 같이 위에서 본 스크립트가 아닌 자바파일로 되어있다. 즉, 자바파일로도 Helper를 만들고 Handlebars에서 자바 Helper를 불러서 사용할 수 있다 Custom Java Help..

0. 핸들바스란? 뷰 템플릿 Handlebars를 Spring MVC에서 사용하기 위해서는 org.springframework.web.servlet.View, org.springframework.web.servlet.ViewResolver를 구현해서 Handlebars를 지원하도록 만들어야 한다. ==> 운좋게도, 이미 오픈소스 프로젝트가 있다. 사용방법은 다음과 같다 1. Handlebars 라이브러리 등록 Maven Repository: com.github.jknack » handlebars-springmvc mvnrepository.com 2. 스프링 MVC 웹 설정 파일에 HandlebarsViewResolver 등록 - 스프링 MVC 웹 설정파일은 XML을 사용할 경우 dispatcher-ser..

자바 웹프로그래밍을 구현하다보면 공통적인 업무를 추가해야할 것들이 많다. 공통적인 업무에는 로그인처리(세션체크), pc웹과 모바일웹의 분기, 로그 확인, 페이지 인코딩 변환, 권한체크, XSS(Cross site script)방어 등이 있는데 이러한 공통업무에 관련된 코드를 모든 페이지 마다 작성 해야한다면 중복된 코드가 많아지게 되고 업무량이 상당히 증가할 것이다. 이러한 공통업무를 프로그램 흐름에서 앞, 중간, 뒤에 추가하여 자동으로 처리할 수 있는 방법이 있는데 서블릿에서 지원하는 서블릿 필터, 스프링 프레임워크를 사용하면 쓸 수 있는 인터셉터, AOP가 있다. 앞서 AOP개념을 정리할 때 언급한 것처럼 개발자는 좀더 핵심로직에 집중하고, 부가로직으로부터 자유로워지게 도와주는 역할을 한다. 그렇다면..

Interceptor 브라우저 - DS - Interceptor - Control - dispatcher servelt과 controller 사이에 존재하여 요청을 가로챈다 - 모든 페이지마다 동일한 기능의 제어가 가능 인터셉터를 통해 할 수 있는 대표적 3가지 1 처리시간 체크 ( DB에 넣어 통계를 넣는다) 2 인증 체크 3 인가 체크를 할 수 있따. 1. 웹 요청 처리 시간을 처리하는 Interceptor 만들기 step1. MeasuringInterceptor.java public class MeasuringInterceptor extends HandlerInterceptorAdapter{ @Override public boolean preHandle(HttpServletRequest re..

Spring Logging (Interceptor로 Request, Response body json 값 로깅하기) 스프링 프로젝트를 하면서 기존에는 LoggingAspect를 만들어서 Aspect파일에서 parameter값과 body값을 찍어주고 있었다. response 값도 찍어주기 위해 여러가지 찾아보면서 공부하던 와중에 Filter와 Interceptor, AOP의 구조를 다시 공부하는데 Interceptor의 인자로 HttpServletRequest, HttpServletResponse가 들어오는 것을 보고 response, request 로그를 Interceptor로 찍어야 하는 것이 맞는 구조라는 것을 그제야 깨달았다. 1. Filter, Interceptor, AOP 구조 아래 갓대희님 블..