'유용한 프로그램' 카테고리의 다른 글
크롬에서 fiddler로 트래픽 캡쳐가 안될때 (0) | 2021.01.25 |
---|---|
스크린 캡쳐 프로그램 ShareX- 무료 (1) | 2020.09.12 |
크롬에서 fiddler로 트래픽 캡쳐가 안될때 (0) | 2021.01.25 |
---|---|
스크린 캡쳐 프로그램 ShareX- 무료 (1) | 2020.09.12 |
Spring에서 예외 핸들링 중 특정 예외에서 어떤 경우에는 json으로 응답하고 어떤 경우에는 유저에게 에러 페이지를 보여줘야하는 경우가 존재합니다.
이런 경우 간단히 처리하는 예제 소스입니다.(더 좋은 방법이 있을 수 있지만 고민이 필요)
/**
* 최상위 예외(Exception) 처리
* - 에러로그를 남겨서 담당자에게 이메일 발송(logback에 설정 됨)하여 알 수 있도록 하기 위함
* - 유저에게 에러 페이지를 보여주기 위해서 ModelAndViewDefiningException를 사용(DispatcherServlet에서 view 처리됨)
*
* @param ex
* @return
*/
@ExceptionHandler(Exception.class)
public ResponseEntity<Object> RootException(Exception ex) throws ModelAndViewDefiningException {
errorLog("RootException", ex);
log.debug("exception class ===> {}", ex.getClass().getSimpleName());
if (CommonUtil.isAjaxReq(HttpRequestUtil.getCurrentRequest())) { //ajax라면 json으로 응답
RtnVO rtnVO = new RtnVO();
rtnVO.setErrorCd(ErrorCd.SYSTEM_ERROR.name());
rtnVO.setMsg("서버 에러가 발생했습니다. 담당자에게 문의하세요");
return new ResponseEntity<>(rtnVO, ErrorCd.SYSTEM_ERROR.getStatus());
}
ModelAndView mav = new ModelAndView();
mav.setViewName("forward:/error/serverError"); //ajax 요청이 아니라면 유저에게 에러메시지 페이지를 보여줌(/error/serverError는 에러 페이지 랜더링용 공용 URL)
throw new ModelAndViewDefiningException(mav);
}
참고로 DispatcherServlet.java에서 ModelAndViewDefiningException 처리가 되어있다.
JPA N+1 문제 해결과 관련 Spring Data JDBC에서 기능 추가 예정과 관련 (0) | 2023.09.01 |
---|---|
spring custom valid 어노테이션으로 업로드 파일의 확장자 및 유효성 검사 (0) | 2023.07.31 |
mysql + mybatis + Spring 조합에서 데이터 존재하는지 판다는하는 소스와 쿼리(성능 감안) (0) | 2022.04.08 |
자주 사용하는 Spring valid관련 내용들 - 메모 (0) | 2022.04.05 |
logback file appender 설정 (0) | 2021.08.26 |
내부 개발자들의 intelliJ 교육 목적으로 작성한 내용의 요약입니다.
java Stream을 intelliJ를 이용해서 디버깅하는 방법입니다.
샘플 소스
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
/**
* 내부 개발자 교육
* - 참고: https://www.youtube.com/watch?v=BeJu9bMPLGU
*
* @author
*/
public class StreamDebuggerExample {
public static void main(String[] args) {
int[] result = IntStream.of(10, 87, 97, 43, 121, 20).flatMap(StreamDebuggerExample::factorize).distinct().sorted().toArray();
System.out.println(Arrays.toString(result));
}
private static IntStream factorize(int value) {
List<Integer> facors = new ArrayList<>();
for (int i = 2; i <= value; i++) {
while (value % i == 0) {
facors.add(i);
value /= i;
}
}
return facors.stream().mapToInt(Integer::intValue);
}
}
아래는 해당 디버깅 기능을 간단히 동영상으로 녹화한 내용입니다.
자주쓰는 intellij 단축키(intelliJ VS Eclipse) (0) | 2020.02.12 |
---|---|
intellij에서 builder 등을 포맷터 적용시 줄 바꿈에 대해서 wrap처리(Chained mehtod calls 'Wrap') (0) | 2019.09.06 |
intellij에서 maven을 사용할 때 어떤 dependencies인지 검색하고 싶을 때 (0) | 2019.09.06 |
intelliJ 개발을 위한 기본 셋팅(캐릭터셋 등) 및 자주 사용하는 플러그인 등 (0) | 2019.06.13 |
intelliJ에 golang 개발환경 셋팅(windows) (0) | 2019.06.09 |
headless CMS 정리 - 작성 중 (0) | 2022.08.05 |
---|---|
twitch drops and web login develoment(트위치 웹 로그인 및 트위치 드랍스 개발) - 작성 중 (0) | 2022.07.11 |
채용시 나의 기준 (0) | 2021.11.05 |
이메일을 이용한 업무처리 방법(논리적인 메일 커뮤니케이션 방법 등) (0) | 2021.08.10 |
Hyperledger fabric- 블럭체인 플랫폼 (0) | 2021.05.21 |
Java의 java.time.LocalDateTime관련 자주 사용하는 몇 가지를 메모 목적으로 정리합니다.
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Date;
/**
* Java의 java.time.LocalDateTime 관련 몇가지 사용 예 - 작성중
* - joda를 많이 썻던 개발자들을 위해 샘플 작성
*
* @author
*/
public class LocalDateTimeSample {
public static ZoneId pstZoneId = ZoneId.of("America/Los_Angeles"); //PST는 ZoneId가 'America/Los_Angeles' 임
public static ZoneId pdtZoneId = ZoneId.of("GMT-07:00"); //PDT는 ZoneId가 'GMT-07:00' 임. 참고: https://savvytime.com/converter/pdt-to-kst-utc/aug-1-2021/3am
public static DateTimeFormatter FMT_YMDHIS = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
/**
* Java의 java.time.LocalDateTime 관련 몇가지 샘플
*
* @param args
*/
public static void main(String[] args) {
System.out.println("\n");
final Date now = new Date();
System.out.println(String.format("java.util.Date 타입의 현재 일시: %s\n\n", now));
LocalDateTime ldt = LocalDateTime.ofInstant(now.toInstant(), ZoneId.systemDefault());
System.out.println(String.format("java.util.Date를 java.time.LocalDateTime 로 변환:%s\n", ldt));
//혹은 아래와 유사하하게 Date객체로 변환 가능
//Instant instant = utcZonedDateTime.withZoneSameInstant(ZoneId.of("UTC")).toLocalDateTime().atZone(ZoneId.of("UTC")).toInstant();
//java.util.Date.from(instant);
final String pattern = "yyyy-MM-dd-HH:mm";
System.out.println(String.format("LocalDateTime을 패턴 '%s'으로 포맷팅: %s\n", pattern, ldt.format(DateTimeFormatter.ofPattern(pattern))));
System.out.println(String.format("1일 후는: %s", ldt.plusDays(1).format(FMT_YMDHIS)));
System.out.println(String.format("3일전은: %s", ldt.minusDays(3).format(FMT_YMDHIS)));
String ymd = "20220501";
DateTimeFormatter fmtYmd = DateTimeFormatter.ofPattern("yyyyMMdd");
LocalDate dateYmd = LocalDate.parse(ymd, fmtYmd);
System.out.println(String.format("%s 문자열을 포맷팅 후 date객체 변환 결과: %s", ymd, dateYmd));
LocalDate toDay = LocalDate.now();
System.out.println(String.format("오늘은 '%s' 입니다.", toDay));
System.out.println(String.format("이번달의 1일은 '%s' 입니다.", toDay.withDayOfMonth(1)));
System.out.println("\n");
ZoneId defaultZoneId = ZoneId.systemDefault();
Date firstMonthDayDT = Date.from(toDay.atStartOfDay(defaultZoneId).toInstant());
System.out.println(String.format("이번달의 1일의 java date타입은 '%s' 입니다.", firstMonthDayDT));
System.out.println("\n");
System.out.println("원본 LocalDateTime: " + ldt);
System.out.println("\t초 미만 절삭: " + ldt.truncatedTo(ChronoUnit.SECONDS));
System.out.println("\t분 미만 절삭: " + ldt.truncatedTo(ChronoUnit.MINUTES));
System.out.println("\t시간 미만 절삭: " + ldt.truncatedTo(ChronoUnit.HOURS));
System.out.println("\t일 미만 절삭: " + ldt.truncatedTo(ChronoUnit.DAYS));
}
}
결과
Java Optional에 대한 생각 (0) | 2022.07.12 |
---|---|
간단한 월 달력 생성 프로그램 (0) | 2022.05.10 |
java stream을 이용한 정렬 (0) | 2022.01.10 |
대용량 처리시 부하분산을 위한 데이터 분할 처리(간략) (0) | 2021.12.10 |
구글 재무보고서 중에서 '수익'보고서를 다운로드하는 샘플 프로그램(download google earnings report) (1) | 2021.11.26 |
1. 쿼리 부분 예
<!-- 해당 유저ID가 존재하는지 체크(존재시 1 리턴으로 boolean 체크됨) -->
<select id="isExistUser" parameterType="String" resultType="boolean">
/* user.isExistUser */
SELECT
EXISTS
(SELECT 1 FROM user WHERE user_id = #{userId} LIMIT 1) #LIMIT 1은 없어도 무방하지만 방어차원에서
</select>
2. java부분 예(DAO영역)
public boolean isExistUser(String userId) {
return sqlSession.selectOne(NAMESPACE + "isExistUser", userId);
}
spring custom valid 어노테이션으로 업로드 파일의 확장자 및 유효성 검사 (0) | 2023.07.31 |
---|---|
Spring에서 ModelAndViewDefiningException 및 상황에 따른 view 또는 json 응답 (0) | 2022.05.03 |
자주 사용하는 Spring valid관련 내용들 - 메모 (0) | 2022.04.05 |
logback file appender 설정 (0) | 2021.08.26 |
spring boot sitemap 생성하기 (2) | 2021.05.02 |
Spring valid 자주 사용하는 내용/샘플 정리
- 필요시 복붙 목적으로 메모해둔 글인점을 감안해주세요
//${validatedValue}를 이용하면 검증대상 값을 가져올 수 있음
@NotBlank(message = "'authKey' cannot be null or empty")
@Size(max = 50, message = "The 'authKey' must be a maximum of {max}. But the request is [${validatedValue}].")
private String authKey;
Spring에서 ModelAndViewDefiningException 및 상황에 따른 view 또는 json 응답 (0) | 2022.05.03 |
---|---|
mysql + mybatis + Spring 조합에서 데이터 존재하는지 판다는하는 소스와 쿼리(성능 감안) (0) | 2022.04.08 |
logback file appender 설정 (0) | 2021.08.26 |
spring boot sitemap 생성하기 (2) | 2021.05.02 |
springboot + webflux + websocket 공부 - 2 (0) | 2020.09.23 |
nginx 설정시 이정도는 알아야함
- https://www.nginx.com/blog/avoiding-top-10-nginx-configuration-mistakes/
- 참고링크: https://news.hada.io/topic?id=6041
AWS 인프라 환경의 nginx단에서 CloudFront-Viewer-JA3-Fingerprint 이용해 봇 차단(+ JA3 헤더 추가 방법) (0) | 2023.04.06 |
---|---|
nginx location 기본문법 몇가지 메모 (1) | 2022.12.20 |