Optional은 null 또는 값을 감싸서 NPE(NullPointerException)로부터 부담을 줄이기 위해 등장한 Wrapper 클래스 Optional의 역할은 더 이해하기 쉬운 API를 설계하도록 돕는 것. → 메서드 시그니처만 보고도 선택형 값인지 여부를 구별 값을 Wrapping하고 다시 풀고, null 일 경우에는 대체하는 함수를 호출하는 등의 오버헤드가 있으므로 잘못 사용하면 시스템 성능이 저하 메소드의 반환 값이 절대 null이 아니라면 Optional을 사용하지 않는 것이 좋다. 메소드의 결과가 null이 될 수 있으며, null에 의해 오류가 발생할 가능성이 매우 높을 때 반환값으로만 사용 파라미터로 넘어가는 값이 아니라 반환 타입으로써 제한적으로 사용되도록 설계 빈 Optiona..
비관적 락 (Pessimistic Lock) 동시성 제어 동시성 문제가 있을 것이라 예상하고 Lock을 걸고 처리 하나의 트랜잭션이 자원에 Lock을 걸면 다른 트랜잭션은 기다림 다른 트랜잭션이 계속 기다리게 되어 성능 저하 NO WAIT, WAIT 옵션을 사용하여 대기 시간을 제어해서 해결 Exception을 발생 시켜 예외처리 가능, 트랜잭션 종료 처리로 동시성 증가 충돌이 자주 발생하는 환경에 대해서는 롤백의 횟수를 줄일 수 있으므로 성능에서 유리 잠시 대기가 있지만 재시도 로직 없이 한번에 처리가 가능 SELECT ... FOR UPDATE WAIT 10; UPDATE ... 낙관적 락 (Optimistic Lock) 동시성 제어 동시성 문제가 없을 것이라고 예상하고 후처리 데이터를 읽을 때는 L..
OverviewJSON 형태의 데이터를 java에서 활용할 수 있도록 데이터 타입을 변환해주는 기능build.gradledependencies { implementation group:'com.fasterxml.jackson.core', name:'jackson-databind', version:'2.12.3'}readValue()Text JSON → Object, JSON 데이터를 Java 객체로 역직렬화하는 데 사용Object Mapper는 객체의 default 생성자가 필요//json = {"name":"KKK","age":34,"cars":[{"name":"K5","car_number":"0161","TYPE":"SUV"},{"name":"K7","car_number":"1111","TYPE":"..
jQuery를 사용하여 특정 selector 위치로 스크롤 이동시키기 const selectorTop = $('selector').offset().top; // selector 좌표 top const headerHeight = $('.header').height; // 제외할 헤더 높이 $('html, body').stop().animate({scrolltop : selectorTop - headerHeight}); // 스크롤 이동 JavaScript로도 구현 가능 document.gelElementById('id').scrollIntoView({behavior:"smooth"}); //IE, Safari behavior 옵션 사용 불가
What? javascript 에서 날짜/시간을 계산할 때 사용하는 Date()는 Client Local Time 이기 때문에 디바이스, 네트워크 등 환경에 따라 차이가 있다. Timer, Count Down 서비스 구현 시 서버 시간 기준으로 구현하려면 서버 시간을 동기화 해야하는데 1초마다 서버 시간을 동기화하는 것은 비효율적이다. Solution 최초에 서버 시간을 불러와서 Local Time 과 차이를 계산해두고, 1초마다 시간을 계산할 때 Local Time에 차이값을 추가하여 계산해주면 서버 시간과 차이를 보정할 수 있다. 서버 시간을 받아오는 네트워크 시간에 차이가 있기 때문에 1~2초 오차가 날 수 있다. const serverTime = [서버에서 가져온 시간]; const gabTime..
동시성 제어를 위해 특정 Row에 Lock을 거는 Row-Level Exclusive Lock (X Lock) 특정 Row를 변경하기 전 해당 Row를 SELECT 했을 때 다른 Transaction 에서 변경 가능한 동시성 (Phantom Reads) 해결을 위해 사용 UPDATE, DELETE 구문처럼 SELECT ~ FOR UPDATE 실행 시 COMMIT/ROLLBACK 전까지 다른 Transaction 에서 SELECT 불가 Table Lock 이 아니기 때문에 SELECT COUNT(*) FROM TABLE 같은 구문에 사용 불가 SELECT COUNT FROM TABLE WHERE ID = #{ID} FOR UPDATE; -- Lock 이 풀릴 때까지 무한정 대기 FOR UPDATE NOWA..
Functional Programming 선언형 프로그래밍 (Declative Programming) What to do? 무엇을 해야 하는가? 일급객체로서의 함수 -> 함수를 객체로 표현 역할에 충실한 코드 -> 가독성, 유지 보수, 안정성, 확장성 패러다임의 전환 -> Stream, Optional 일급객체 First-Class Object 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 보통 함수에 인자로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원할 때 일급 객체라고 한다. Functional Interface 하나의 abstract method만을 가지는 인터페이스 (Single Abstract Method Interface) 매개변수 하나 Function..
이벤트 발생 시 처리할 동작을 메소드로 정의 @Component public class XX implements ApplicationListener{ public void onApplicationEvent(ContextRefreshedEvent event){ } } ContextRefreshedEvent Published when the ApplicationContext is initialized or refreshed, for example, using the refresh() method on the ConfigurableApplicationContext interface. "Initialized" here means that all beans are loaded, post-processor bean..