
mustache 템플릿 설정
2022. 11. 18. 16:28
스프링
라이브러리 추가 스프링부트 버전과 동일한 머스테치 라이브러리 의존성을 등록해준다. implementation 'org.springframework.boot:spring-boot-starter-mustache:2.7.5' https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mustache/2.7.5 설정파일 생성 현재 머스테치는 .mustache 파일을 인식하게 되어있다. 머스테치가 .html 파일을 인식할 수 있도록 별도의 설정파일을 만들어준다. package com.example.mustache.config; import org.springframework.boot.web.servlet.view.MustacheV..

[자바] Lombok - 부모클래스의 toString 호출하기
2022. 11. 17. 00:42
스프링
매우 간단하므로 두 단계로 끝내겠다. 부모클래스에 ToString 어노테이션 선언 @Getter @MappedSuperclass @ToString public abstract class BaseEntity { private LocalDateTime createdAt; private LocalDateTime modifiedAt; } 자식 클래스에 callSuper 설정 @ToString(callSuper = true) public class Customer extends BaseEntity { private Long id; } 디폴트는 false 이다.

[JPA] dataSourceScriptDatabaseInitializer 빈 생성 오류
2022. 11. 15. 17:51
스프링/JPA
강의듣다가 해당 오류 발생.. 공식 문서 내용 Hibernate and data.sql By default, data.sql scripts are now run before Hibernate is initialized. This aligns the behavior of basic script-based initialization with that of Flyway and Liquibase. If you want to use data.sql to populate a schema created by Hibernate, set spring.jpa.defer-datasource-initialization to true. While mixing database initialization technologies i..

[인텔리제이] 폰트 이상하게 찍히는 현상
2022. 10. 23. 00:03
인텔리제이
단축키를 잘못 눌렀나보다. 갑자기 폰트가 위와 같이 찍힌다. alt + "=" 을 누르면 정상으로 돌아온다. 이게 대체 뭔지,,? Excel, PowerPoint, Word 등에서도 해당되는 단축키라고 한다.

[스프링] Querydsl - 동적쿼리 구현 방법
2022. 10. 19. 17:05
스프링
BooleanBuilder public void dynamicQuery_BooleanBuilder() { String usernameParam = "member1"; Integer ageParam = null; List result = searchMember(usernameParam, ageParam); } private List searchMember(String usernameCond, Integer ageCond) { BooleanBuilder builder = new BooleanBuilder(); if (usernameCond != null) builder.and(member.username.eq(usernameCond)); } if (ageCond != null) { builder.and(me..

[스프링] @RestControllerAdvice 이용한 예외처리 방법
2022. 10. 14. 14:37
스프링
@RestControllerAdvice 스프링에서 예외처리를 하는 대표적인 방법으로 @ExceptionHandler 어노테이션이 있다. 하지만 이 어노테이션은 각각의 메서드에 따로 적용되기 때문에, 필요한 메서드마다 일일이 달아줘야 하는 번거로움이 있다. 우리는 RestControllerAdvice 어노테이션을 이용해 그 불편함을 줄일 수 있다. 바로 코드로 설명하겠다. @RestControllerAdvice public class GlobalExceptionHandler { @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) // 500 error @ExceptionHandler(Exception.class) // public Exception handlerAllE..

[스프링] 톰캣(Tomcat) 서버 시작 속도 개선
2022. 10. 6. 19:35
스프링
스프링 어플리케이션으로 서버를 시작하다가, 톰캣으로 직접 서버를 구동할 일이 생겼는데 실행 속도 때문에 미칠지경이었다. 도저히 안되겠다 싶어 구글링한 결과 개선방법을 찾았다. 톰캣 폴더 내 conf 폴더에 있는 catalina.properties, context.xml 두 파일에 약간의 설정값을 넣어줄 것이다. catalina.properties 파일을 열면 표시된 것 처럼 tomcat.util.scan.StandardJarScanFilter.jarsToSkip= 라고 쓰인 부분이 있다. 이 곳에 *.jar 를 추가하자. 톰캣 구동 시 util에 있는 jar 파일 스캐닝을 스킵한다고 한다. 따라서 현재 내 프로젝트에 사용해도 되는지 검증이 필요하며, 나중에 문제가 생겼을 때 원인 파악을 위해 수정 사항을..

[스프링] 접속 IP 주소 IPv4 형태로 가져오기 (인텔리제이)
2022. 10. 6. 18:24
스프링
HttpServletRequest의 getRemoteAddr 메서드를 이용해 IP주소를 가져올 수 있다. @RequestMapping("/") public String index(HttpServletRequest request) { String remoteAddr = request.getRemoteAddr(); System.out.println("remoteAddr = " + remoteAddr); return "index"; } 단, 주소 형태는 IPv6가 디폴트다. IPv4 형태로 주소를 가져올 수 있도록 IDE에서 세팅해줘야 한다. VM option에 아래 코드 두 줄을 추가해주면 된다. -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses..

[인텔리제이] 웹서버 실시간 자동 업데이트 설정하기
2022. 9. 29. 18:51
인텔리제이
https://imcoding.tistory.com/50 [스프링] Spring Boot Devtools 사용해서 서버 재시작 시간 아끼기 Spring Boot Devtools 웹 프로그래밍을 할 때 변경점이 생기면 서버를 재시작 해야하는 번거로움이 있다. Spring Boot Devtools를 사용하면 서버를 재시작 할 필요 없이 변경이 발생한 파일만 리빌딩을 해 imcoding.tistory.com 이전에 Spring Boot Devtools를 사용해서 서버 재시작 없이 업데이트 사항을 적용하는 방법을 소개드렸다. 하지만 위 방법은 현재 위치한 파일을 리빌딩 해줘야 하며, 바뀐 파일이 여러 개일 경우 오히려 서버를 재시작 하는 것 보다 귀찮을 수 있다는 단점이 있다. Dependency도 추가해야 하..

[MySQL] 윈도우 명령프롬프트로 mysql 접속하기
2022. 9. 28. 11:19
DB
윈도우 명령프롬프트로 mysql 명령어를 이용해 db에 접속하려면 환경변수 설정이 되어야 한다. 그동안 귀찮아서 MySQL 커맨더로 접속했는데, 자꾸만 신경이 쓰여서 이참에 환경변수 값을 설정하기로 했다. 고급 시스템 설정 보기 (윈도우 11 기준) -> 환경변수로 들어간다. Path 더블클릭 -> 새로만들기 -> MySQL 혹은 MariaDB의 bin 폴더 경로를 입력한다. 이후 확인을 눌러 창을 닫고 명령 프롬프트에서 접속해보면 잘 될 것이다. (이미 cmd 창이 열려있다면 닫은 뒤 다시 실행해야 적용된다.)

[인텔리제이] Execution failed for task ':test'. 오류 해결 (Gradle)
2022. 9. 27. 15:35
인텔리제이
현상 프로젝트를 새로 빌드하고 테스트코드를 실행했는데 갑자기 위 오류가 발생했다. 쎄 한 기분이 들어 다른 프로젝트의 테스트 코드도 돌려봤는데, 조금 전까지 잘 되던 테스트 코드에서 모두 동일한 오류가 발생했다. 구글링 해보니 생각보다 간단한 해결법에 안도의 한숨,, 해결법 File - Settings - Build, Execution, Deployment - Build Tools - Gradle 로 이동 Run Tests using 값을 IntelliJ IDEA로 변경해준다. 하는김에 Build and run using도 IntelliJ IDEA로 변경해주자. 처음 프로젝트 실행 한 다음부터는 Gradle 빌드하는 시간을 아껴 빠르게 실행할 수 있다. 다시 테스트 실행하면 정상 동작할 것이다. (분명 ..

[Spring Data JPA] EntityGraph 사용해서 쿼리 조회 최적화
2022. 9. 26. 21:15
스프링/JPA
EntityGraph 지연로딩 간단 개념 엔티티를 설계할 때 연관관계 매핑에서 FetchType을 보통 LAZY로 설정해주는 게 일반적이다. 지연로딩이라고 흔히 부르는 이 설정은 다양한 연관관계로 매핑되어 있는 엔티티를 호출할 때 셀렉트 쿼리의 최적화를 위해 다른 엔티티를 프록시 객체로 생성하는 것을 말한다. ex) Member와 Team이 N:1(다대일) 관계일 때 Member 엔티티를 호출하면 Team 엔티티는 프록시 객체로 생성되고 Member에만 select 쿼리를 날린다. 쿼리 최적화를 위해 지연로딩 설정을 해주지만 오히려 이런 설정이 최적화에 불리할 때가 있다. Member(N) : Team(1) 엔티티 관계를 예로 들겠다. Member를 생성하면 Team은 프록시 객체다. 그렇기에 Team ..