본문 바로가기

분류 전체보기

(115)
ts + webpack에서 datepicker 사용하기 1. jquery-ui-dist 설치 datepicker는 jquery-ui에서 제공하고 있으며, 다운받으면 사용할 수 있다. 그런데 나같은 경우 jquery-ui로 webpack 설정을 하는데 실패해서 jquery-ui-dist를 사용했다. npm i jquery-ui-dist 2. @types/jqueryui 설치 typescript와 jquery-ui의 호환을 위해서 @type/sjqueryui를 설치한다. (datepicker만 사용하려면 @types/jquery.ui.datetimepicker를 설치해도 된다.) npm i @types/jqueryui 3. alias 설정 lib 설치가 끝났으면 webpack.config.js에서 alias 설정을 해준다. (alias 설정은 꼭 안 해도 되지만..
API 예외처리 공통화 2 이번 글에서는 API 예외처리를 공통화해볼 것이다. 1. Global Exception 처리를 위한 class 생성 GlobalExceptionHandler package hello.hellospring.exception; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; @Slf4j @Controlle..
API 예외처리 공통화 1 Spring Boot로 프로젝트를 만들다보면 API도 꽤 많이 작성하게 된다. (아님 말고,,,,,,) 이 API를 작성할 때 예외처리도 해야한다. ex) 회원가입 시 아이디나 전화번호 중복되는 경우, 상품주문 시 재고가 부족한 경우 등등 우리는 굉장히 많은 예외처리를 해야한다. 이 예외는 Service단에서 던지게 되고, 처리는 Controller단에서 하게 된다. 또한, 이러한 예외처리를 매번 반복하게 된다. 먼저 공통화하지 않는 경우, 예외처리를 살펴보자! 1. Error 처리를 위한 class 생성 ErrorMessage.java package hello.hellospring.exception; import lombok.AllArgsConstructor; @AllArgsConstructor pu..
Slack에서 error log 알림받기(console 변동 X) slack에서 프로젝트에 대한 error log 알림을 받기로 했다. 그러면 지금부터 어떻게 하는지 알아보도록 하자!! 1. webhook-uri 생성 1-1. slack app 좌측 메뉴 하단에서 '앱 추가' 버튼 클릭 1-2. incoming webhooks를 찾아서 추가 1-3. webhook을 추가할 채널 선택 1-4. webhook url을 복사한 후 가장 하단에 있는 설정 저장 버튼을 클릭하면 -끝- 이렇게 만든 webhook은 slack 사이트에서 확인가능합니다. 혹시라도 webhook URL을 복사하지 못했다면 아래 메뉴를 따라해주세요! > 관리(상단 메뉴바) - 사용자 지정 통합 앱(좌측 메뉴바) - incoming webhook - 구성 - 만들어놓은 webhook 관리 가능 2. ja..
Querydsl gradle 4줄 초간단 설정 build.gradle의 dependencies에 다음 4줄만 추가해주면 QueryDSL 설정이 끝나게 된다. com.ewerk.gradle.plugins.querydsl plugin을 사용한다면 지워버리자. 해당 plugin은 2018년 7월에 마지막 업데이트가 있었고, 지금의 gradle(7.4)과는 호환이 잘 안 된다. dependencies { //querydsl implementation 'com.querydsl:querydsl-jpa' annotationProcessor("com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa") annotationProcessor("jakarta.p..
@Transactional(readOnly = false)일 때 얻는 이점 @Transactional의 readOnly param을 false로 설정하면 다음과 같은 이점을 얻을 수 있다. 변경감지를 위해 snapshot(객체의 초기상태)을 저장해야 하는데, 이 동작을 하지 않아 메모리가 절약된다. 이는 @QueryHint를 이용하여 readOnly로 설정했을 때와 동일한 효과이다. (Spring 5.1부터 적용된다) FlushMode가 MANUAL로 설정되어, 직접 flush하지 않으면 flush가 일어나지 않게 된다. (Transaction commit이나 JPQL 실행 전과 같이 flush가 발생해야 하는 상황에서 발생하지 않는다.) (이 기능은 Hibernate의 전용기능이다.) @Test @Transactional(readOnly = true) public void r..
@Transactional method의 Transaction 전파 공부를 하다가 @Transactional method는 어떻게 전파되는지 궁금해졌다. 그리고 결국 정말 오랜 시간을 박치기해서 내가 원하는 결론에 다다를 수 있었다. 다음 결론들은 기본 전파 전략인 Required를 사용했을 때의 동작이다. 다른 전파 전략을 원하는 사람들은 공식문서를 참고해보자!. 결론은 다음과 같다. 맨 처음에 호출된 @Transactional method의 Transaction 설정이 그대로 다른 method들에게 전파된다는 것이다. (도대체 이 결론을 얻기 위해 얼마나 많이... 시도하고 찾아봤는지 모르겠다.) @Transactional method에서 Non-@Transactional method 호출 MemberJpaRepositoryTest.java package study...
h2 db tcp 접속 에러 h2 DB에 tcp로 최초 접속 시 다음과 같이 에러가 난다. 이런 경우 tcp 방식이 아닌 file 방식으로 먼저 접속해야 한다. 이를 위해서 JDBC URL의 tcp://localhost/를 file:로 바꿔주면 된다. 즉, jdbc:h2:file:~/Desktop/private/h2/example로 설정해준다. 또한 file:은 생략하고 jdbc:h2:~/Desktop/private/h2/example로 써도 file 방식으로 접속된다. 최초에 이렇게 접속 후 다시 tcp방식으로 접속해주면 정상동작하는 것을 확인할 수 있다.