All

· Java
https://medium.com/@201924576/spring-boot-log4j2-%EC%84%A4%EC%A0%95-21f3b6da38c6 Spring Boot Log4j2 설정하기 System.out.println() 의 문제점 medium.com
· Java
개요 final 키워드는 변경을 제한하는 데 사용된다 JS의 const와 비슷하다 불변성을 보장하여 실수로, 또는 악의적으로 수정되는 것을 막는다 final -> 최종본 -> 최종본은 더 이상 수정되지 않는다 final 키워드는 변수, 메소드, 클래스에 사용할 수 있다 final 키워드의 특징 final 변수 재할당할 수 없는 상수가 된다 Object는 변수가 참조하는 Object의 내용을 변경하는 것은 막을 수 없다 final로 지정한 변수를 재할당하는 것이 아니기 때문이다 선언 할 때, 또는 생성자에서 초기화되어야 한다 final Method 하위 클래스가 Override 할 수 없는 메소드가 된다 하위 클래스가 부모 클래스 메소드의 구현을 재사용하도록 장려한다 모든 하위 클래스가 같은 구현을 사용하..
https://ksh-coding.tistory.com/128 [Spring] Spring에서 Session 저장소로 Redis 사용하기(feat. Redis Session Clustering) 0. 들어가기 전 이전 포스팅에서 간략하게 Redis를 살펴봤었습니다. 이전 포스팅에서는 Redis의 장점으로 인메모리 저장소의 특성으로 인한 빠른 성능을 중점적으로 소개했습니다. 이번에는 Spring ksh-coding.tistory.com Spring Security 활용한 예제 https://velog.io/@pppp0722/Reach-Rich-%EA%B0%9C%EB%B0%9C%EA%B8%B0-Spring-Security-Redis-Session%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%..
개요 Spring은 로드 존슨이 당시 주류였던 EJB2의 단점을 보완하여 개발하였다. Spring은 Jakarta EE 개발을 더 쉽게 만드는 것을 목표로 한다. Sping의 장점은 다음과 같다. 가볍다 (Lightweight) EJB2는 무겁고 복잡한 구조를 가지고 있었다 Spring은 경량 컨테이너를 사용하여 구동 속도가 훨씬 가볍고 더 빠르다 POJO 기반 프로그래밍 (Plain Java Old Object) EJB2는 특정 인터페이스를 구현해야 하는 등 많은 제약이 있었다 Spring은 POJO를 사용하여 더 간단하고 객체지향적으로 개발할 수 있다 DI (Dependency Injection), IoC (Inversion of Control) Spring은 Dependency Injection을 ..
POJO(Plain Old Java Object) 기반 개발 EJB는 프레임워크와 서버 환경에 의존적인 코드가 많았다 설정 파일 또한 난해했다 원래는 개발자가 비즈니스 로직에만 집중할 수 있도록 EJB가 로우 레벨 관리를 대신하게 할 목적이었다 그러나 EJB 코드는 EJB의 인터페이스와 클래스를 상속하는 방식으로 개발되었기 때문에 코드가 EJB 환경에 종속되고 추가로 상속이 되지 않아 객체지향적으로 개발을 하지 못하게 되는 부작용을 초래했다 Spring은 서비스 추상화를 통해 코드에서 프레임워크와 환경에 의존적인 부분을 제거했다 추상화로 로우 레벨의 기술 구현을 분리하고 독립적으로 접근할 수 있는 인터페이스를 제공한다 그 결과, POJO(Plain Old Java Object)로 비즈니스 로직을 개발할 ..
https://leetcode.com/problems/trapping-rain-water/description/ 의 풀이 중 스택 풀이가 잘 이해되지 않아서 정리한 내용을 공유합니다 막대를 하나씩 세운다고 생각했을 때 물을 저장할 수 있는 조건을 생각해 봅시다. 다음 막대로 마지막 막대보다 높이가 같거나 작은 막대가 오면 내리막길 모양이 되어서 물을 채울 수 없습니다. (5, 4, 3, 2, 1) 마지막 막대보다 높이가 높은 막대가 오면 물을 채울 수 있는데, 이 때 이전 막대 중에서 새 막대보다 높이가 낮은 막대 위에만 물을 채울 수 있습니다. 이 때 채울 수 있는 물의 양은 막대 하나와 새 막대의 거리 * min(왼쪽 막대, 오른쪽 막대) 높이 차 로 각 막대와 새 막대의 차이 때문에 담을 수 있는 ..
· Javascript
크롬에서 쓰이는 JS 엔진인 V8 엔진은 C++로 구현되어 있고, 깃허브에 소스가 공개되어 있습니다 JS integer array는 V8 내부에서는 C++ array인데, 중간에 빈 value가 많은 경우(sparse한 경우) hash table로 구현됩니다 그래서 sparse한 array는 성능이 더 나쁘다고 합니다 JS array를 선언할 때 V8 내부에서는 length를 element 개수보다 더 크게 잡은 배열을 선언합니다 (dynamic array) 그래서 일반적인 상황에서 push() 를 O(1) 시간에 수행할 수 있습니다 공간이 부족할 경우 크기를 늘리는 공식(growth factor) - 약 1.5배로 늘림 new_capacity = (old_capacity + 50%) + 16 실제 코드..
https://leetcode.com/problems/longest-palindromic-substring/ Longest Palindromic Substring - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 핵심 아이디어 모든 문자에 대해 two pointer를 확장해 가며 s[left] === s[right] 를 비교한다 substring 길이가 홀수인 경우, 짝수인 경우 case로 나눠서 두 번 구한다 복잡도 시간 복잡도: O(n^2) string 모든..