'유용한 프로그램' 카테고리의 다른 글
크롬에서 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에서 기능 추가 예정과 관련 (2) | 2023.09.01 |
---|---|
spring custom valid 어노테이션으로 업로드 파일의 확장자 및 유효성 검사 (2) | 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 |
참고 링크
- https://roadmap.sh/roadmaps
Developer Roadmaps
Community driven roadmaps, articles, guides, quizzes, tips and resources for developers to learn from, identify their career paths, know what they don't know, find out the knowledge gaps, learn and improve.
roadmap.sh
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 어노테이션으로 업로드 파일의 확장자 및 유효성 검사 (2) | 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 |