본문 바로가기

분류 전체보기290

ArrayList vs LinkedList List 인터페이스는 Java의 Collection을 확장한 인터페이스이다. ArrayList와 LinkedList 모두 이 List 인터페이스의 구현체이다. ArrayList 먼저, ArrayList는 배열(array)에 기반을 두고 있다. index를 통한 요소 검색에 빠르다는 장점이 있지만, 요소의 추가 삭제가 느리다는 단점이 있다. ArrayList의 일반적인 add() 메서드(맨 마지막 요소 뒤에 요소를 추가하는)를 통한 요소 삽입은 시간복잡도 Big-O 기준 O(1)의 시간복잡도를 가진다. 그러나, 특정 요소 사이에 요소를 삽입하거나 삭제하는 과정의 시간복잡도는 O(n)을 가진다. LinkedList LinkedList는 각 노드(Node)가 서로 연결되어 있는 형태이다. 링크를 건다라는 말을.. 2023. 2. 9.
LRU(Least Recently Used) Cache 교체 알고리즘 Programmers Lv.2 - [1차] 캐시 캐시(Cache)는 연산에 필요한 데이터들을 미리 저장하는 임시 메모리이다. 연산을 처리할 때, CPU에서 주기억장치, 보조기억장치까지 도달해서 연산을 처리한다. 이는 물리적으로 거리가 멀어서 비용이 많이 든다. 캐시의 경우는 CPU 바로 옆에 붙어있기 때문에, 물리적으로 거리가 가까워 비용이 적다. 그렇기 때문에, 연산에 자주 사용되는 값이나 데이터들을 캐시에 미리 적재해놓으면 접근 시간을 줄여 성능을 높일 수 있다. 캐시 히트(Hit)율, 캐시 미스(Miss)율이라는 것이 존재한다. 캐시에 적재된 데이터들을 사용하여 연산을 처리하면, 캐시 히트율이 올라가는 거고, 적재된 데이터들을 사용하지 않으면 캐시 미스율이 올라가는 것이다. LRU 캐시 교체 알고리.. 2023. 2. 8.
Spring Boot Configuration Annotation Processor not configured 민감한 정보의 properties의 정보를 읽어오기 위해서, @ConfigurationProperties(prefix = ) 애너테이션을 사용했을 때, 발생했던 에러이다. 'Spring Boot Configuration Annotation Processor not configured' 이유는 Intellij와 Gradle 버전이 업데이트 되면서 필수적으로 추가해주어야 하는 의존 라이브러리가 생겼다고 한다. 그래서 다음과 같은 의존 라이브러리를 추가해주었다. dependencies { annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor:3.0.2' } reload를 시킨 후, 다시 보니 경고 다음과 같은 경고 문.. 2023. 1. 27.
BigDecimal 금융 관련 프로젝트 도중 double보다 큰 값과 세세하게 계산할 수 있는 타입이 필요했다. BigDecimal 클래스는 Java에서 숫자를 정밀하게 저장하고 표현할 수 있는 유일한 방법이다. (금융권에서는 대부분 BigDecimal을 주로 사용한다) BigDecimal 선언 BigDecimal a = new BigDecimal(100.0);/ --- 첫 번째 방법 BigDecimal a = BigDecimal.valueOf(100.0);/ --- 두 번째 방법 BigDecimal 대소 비교 BigDecimal a = BigDecimal.valueOf(100.0); BigDecimal b = BigDecimal.valueOf(100.0); // 동등 비교 a == b/ --- 첫 번째 방법 a.equal.. 2023. 1. 25.
트랜잭션 적용 순서 ✔ 클래스 레벨과 메서드 레벨의 트랜잭션 적용 순서 클래스 레벨과 메서드 레벨에 @Transactional 애너테이션을 추가할 때 트랜잭션은 다음과 같이 적용된다. 클래스 레벨에만 @Transactional이 적용된 경우 클래스 레벨의 @Transactional 애너테이션이 메서드에 일괄 적용 클래스 레벨과 메서드 레벨에 함께 적용된 경우 메서드 레벨의 @Transactional 애너테이션이 적용 만약 메서드 레벨에 @Transactional 애너테이션이 적용되지 않았을 경우, 클래스 레벨의 @Transactional 애너테이션이 적용 더보기 ✔ 조회 메서드에 @Transactional(readOnly = true) 로 설정하는 이유 findeMember()와 같은 조회 메서드에 @Transactiona.. 2023. 1. 25.
@Value 애너테이션으로 값을 불러올 때, 항상 null 값이 오는 경우 app-key와 app-secret을 application.properties 파일에 key, value 형태로 담아둔 후, 콘솔창에서 확인하기 위해 다음과 같은 시도를 했다. 1. new로 객체 생성 후, 값 가져오기 로직은 위와 같고, 실행 결과는 다음과 같았다. 모두 null 값으로 불러진 것을 확인했다. 테스트 코드로 값을 불러온 결과에서는 application.properties에서의 값들을 정상적으로 받아오는 걸 확인했고, 그렇다면 @Value 애너테이션이나 기타 파일의 코드는 문제가 없다는 걸 알 수 있었다. 2. 필드 변수를 static으로 선언해서 값 가져오기 이번에는 객체를 생성하지 않고, 필드 변수 그대로 받아와서 값을 출력해보았다. 결과는 다음과 같았다. 동일하게 두 변수 모두 nu.. 2023. 1. 10.
BeanCreationException 에러 구글링을 통해서 찾아낸 해결 방법은 관련 필드에 @Autowired를 붙여주거나 @Controller, @Service 애너테이션을 빠뜨린 경우, 빈 등록이 정상적으로 되지 않아 발생한 에러였고, 해당 방법대로 진행했으나 같은 에러가 반복했다. 현 상황은 민감 정보를 application-api-key.properties라는 파일에 담아두고 호출하는 과정이었다. 기존 application.properties 파일에 다음 문구를 추가해주니, 정상적으로 해결되었다. 2023. 1. 10.
application.properties 파일에 민감한 정보 담기 증권사 데이터가 필요해서 한국투자증권의 Open API를 사용해야 하는 상황이 생겼다. 이 과정에서 appkey와 appsecret라는 민감한 정보를 프로젝트 소스 코드 상에서 감추어야 했다. 우선, 민감한 정보를 담을 application-api-key.properties 라는 파일을 만들어 주었다. 파일명은 application-[name].properties로 설정한다. 생성한 파일 안에 민감한 정보를 key, value 형태로 담아준다. 예시로 *****로 넣어주었으니, 본인의 상황에 맞는 key, value 값을 추가하면 된다. 그 후에, 기존에 있던 application.properties 파일에 해당 문구를 추가한다. 민감한 정보가 담긴 파일 이름이 application-api-key.pro.. 2023. 1. 10.
모듈러 연산(Modulo Operation) 어떤 하나의 숫자를 다른 숫자로 나눈 나머지를 구하는 연산으로, 나머지 연산(mod)이라고 한다. 정수론에서 모듈러 연산이란 정수의 합과 곱을 어떤 주어진 수의 나머지에 대하여 정의하는 방법이라고 한다. 모듈로 연산 사칙 연산 덧셈 : (a + b) % M = ((a % M) + (b % M)) % M 뺄셈 : (a - b) % M = ((a % M) - (a % M)) % M 곱셈 : (a * b) % M = ((a * M) * (b * M)) % M 나눗셈 : 모듈로 연산에서 나눗셈은 곱셈 역원(multiplicative inverse)을 곱하는 방식으로 이루어진다. (모듈로 곱셈 역원은 항상 존재하는 것이 아니라, b와 M이 서로소(coprime)일 때만 존재) Ref) - https://johng.. 2022. 12. 24.