Back-end 68

작업 스케줄러 - 크론탭(crontab)

1. crontab이란 crontab은 원하는 시간에 특정 작업을 실행하게 하는 텍스트 파일이다. 이 crontab에 작성된 파일을 찾아 cron이라는 시스템의 데몬이 작성된 일정대로 작업을 실행하게 되는 것. 주기적이고 반복적인 작업에 많이 사용된다. 1) crond 실행여부 확인 ps -ef | grep crond 2) crontab의 작업 목록 확인, crontab 편집, crontab 삭제 // crontab 작업 목록 crontab -l // crontab 편집 crontab -e // crontab 삭제 crontab -r 주기적으로 특정작업을 실행해야할 경우 crontab 사용. (JAVA의 경우 스케쥴러로 Quartz를 이용할 수도 있다.) cron은 Linux 운영체제에 기본으로 설치되어..

Java Wrapper class

1. Wrapper class 기본타입의 데이터를 객체로 취급해야 하는 경우 자바에서 제공하는 Wrapper class를 이용한다. 예를 들어 어떤 메소드의 파라미터가 객체타입만 가능하다면, 기본타입을 그대로 사용할 수 없기 때문에 래퍼클래스를 한 번 거쳐 객체로 변환후 메소드를 호출하는 것. * primitice type, reference type 원시 타입은 쉽게 말해, 정수, 실수, 문자, 논리 리터럴등의 실제 데이터 값을 저장하는 타입이고, 참조 타입은 객체(Object)의 번지를 참조(주소를 저장)하는 타입으로 메모리 번지 값을 통해 객체를 참조하는 타입이다. 2. 오토박싱, 오토 언박싱 Integer number = new Integer(200); // 박싱 int n = number.int..

Java Optional, Stream

1. Optional Optional은 null 또는 값을 감싸서 NPE(NullPointerException)로부터 부담을 줄이기 위해 등장한 Wrapper 클래스이다. Optional은 값을 Wrapping하고 다시 풀고, null 일 경우에는 대체하는 함수를 호출하는 등의 오버헤드가 있으므로 잘못 사용하면 시스템 성능이 저하된다. 그렇기 때문에 메소드의 반환 값이 절대 null이 아니라면 Optional을 사용하지 않는 것이 좋다. 즉, Optional은 메소드의 결과가 null이 될 수 있으며, null에 의해 오류가 발생할 가능성이 매우 높을 때 반환값으로만 사용되어야 한다. 2.Optional 메소드 1) Optional.emptuy() : 값이 Null인 경우 2) Optional.of() ..

Spring Filter, Interceptor의 범위 및 SpringSecurity FilterChain와의 관계

0. Servlet Filter VS. HandlerInterceptor 아래 그림에서와 같이 Filter는 DispatcherSevlet 앞에서 먼저 동작한다. Interceptor는 Dispatcher Servlet에서 Controller(Handler)사이에서 동작한다. 1) 필터 웹 어플리케이션의 Context 역할 스프링 기능을 활용하기 어려움 일반적으로 인코딩, CORS, XSS, LOG, 인증, 권한 등을 구현 2) 인터셉터 스프링의 Spring Context의 기능이며 일종의 빈 스프링 컨테이너여서 다른 빈을 주입하여 활용성이 좋다. 다른빈을 활용할 수 있어 보통 인증, 권한 등 구현함 1. JwtFilter에서 OncePerRequestFilter 상속 VS GenericFilterBea..

Lombok @Setter 사용 지양 & lombok.config

1. Lombok의 Setter 사용 지양해야하는 이유 - Builder 패턴을 사용해라 1) Setter 메소드를 사용하면 값을 변경한 의도를 파악하기 어렵다. 왜, 어떠한 의도로 데이터를 변경하는지 명확하게 알 수 없다. 코드를 역추적해봐야 한다 2) 객체의 일관성을 유지하기 여럽다. 자바 빈 규약을 따르면 Setter는 public으로 언제든지 변경할 수 있는 상태가 된다. 따라서 모든 곳에서 데이터를 변경할 수 있는 상태가 되기 때문에 객체의 일관성을 유지하기 어려워진다. 2. Setter의 대안 1) 생성자 오버로딩 -> 생성자를 오버로딩하기, 그러나 멤버변수가 많고 다양한 생성자를 가지게 된다면 코드가 길어지고 가독성이 떨어짐 따라서 Builder 패턴 사용 public class School..

@JsonIgonore, @JsonProperty, @JsonNaming & Jackson Object Mapper

"Java Object" =Serialize=> "JSON", (2) "JSON" =Deserialize=> "Java Object" JSON(JavaScriptObjectNotation) 상하차가 쉬운 언어는 Javascript 0. JSON 이란? = 데이터를 보관하는 형식 복잡한 데이터를 인터넷에서 유저들끼리 주고 받을 때 깔끔한 형식으로 데이터를 담는데 필요한 형식이 있다. 이 중에 XML, CSV, JSON이 있다. 1) XML 값 2) CSV Year, Brand, Mode 1997,Ford, E350 3) JSON ~ ... YAML, BSON, SMILE 등 -> 보통 설정 파일에 많이 사용한다. ex) package.json ※ JSON 이랑 JavaScript의 일반 Object는 다르..

Spring 예외 처리 전략 및 Global 예외처리 // @RestControllerAdivce

1. 예외처리 - 발생위치에 따른 구분 Dispatcher Servlet 내에서 발생하는 예외(99%-Controller, Service, Repository) vs. Dispatcher Servlet 전 Filter에서 발생하는 예외 2. 예외처리 방법 1. Controller 단에서의 예외처리 @ExceptionHandler - Contorller 메서드 내의 하위 레이어(Service, Repository 등)에서 예외 발생해도 중간에 처리하지 않는 이상 Controller단까지 예외처리가 던져지고 @ExceptionHandler가 예외를 처리하게 됨. 2. 전역에서 예외처리 - @(Rest)ControllerAdvice - Controller 내의 @ExceptionHandler와 Controll..

Spring - 인터셉터

1. HandlerInterceptor 인터셉터는 Controller의 핸들러가 실행 되기 전이나 후에 추가적인 작업을 실행하기 위해 사용한다. 예를 들어 권한 체크, 로그인 체크 등 관리자 인터셉터 public class AdminInterceptor implements HandlerInterceptor { static final Logger LOGGER = LoggerFactory.getLogger(AdminInterceptor.class); /** * 관리자 페이지는 관리자만 접근 허용. */ public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) { HttpSession session = re..

Exception Handling

예외 처리를 하는 근본적인 이유 : 프로그램이 오작동하거나 비정상 종료를 막기 위해 1. 종류 1) 컴파일 에러(compile-time error) : 구문 체크, 번역, 최적화, 생략된 코드 추가 등을 컴파일러가 한다. 2) 런타임 에러(runtime error) : 프로그램 실행 중 발생하는 에러 (프로그램 종료) - 에러(Error) : 프로그램 코드에 의해 수습될 수 없는 심각한 오류 ex) 메모리 부족, Out of Memory error 혹은 스택오버플로우 StackOverFlowError) - 예외(Exception) : 프로그램 코드에 의해 수습될 수 있는 다소 미약한 오류 --> 예외처리로 프로그램의 비정상적 종료 막을 수 있다. 3) 논리적 에러(logical error) : 작성 의도..