일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- S&P500
- 오버라이딩
- 객체지향
- 금리인하
- javascript
- Java
- XLF
- 그리디 알고리즘
- 프로그래머스
- 미국주식
- object
- 제태크
- etf
- mco
- 잉여현금흐름
- 현금흐름표
- 무디스
- 백준
- 다형성
- 금리인상
- 알고리즘
- 인플레이션
- 접근제어자
- FCF
- 주린이
- 기업분석
- StringBuffer
- 주식
- 배당성장
- 자바
- Today
- Total
목록JAVA (77)
오늘의하루
문제 발견레거시 프로젝트의 유지 보수를 맡게 되면서 모든 화면에서 로딩 시 약 170개의 쿼리가 실행되며 그중 약 60~70개의 변하지 않는 데이터를 반환하는 쿼리가 실행되고 있는 것을 확인했습니다.이로 인해 화면 로딩 시간이 길어지는 문제을 발견해서 처음에는 Redis를 도입하여 성능을 개선하려고 했으나 서버 확장이 불가능하다는 결론이 내려졌습니다.그래서 AOP를 이용한 인메모리 캐싱을 도입하기로 했고 메서드명과 매개변수를 조합하여 키를 생성하고 그에 따른 결과를 캐싱하는 방식으로 구현할 예정입니다.이 과정에서 동시성 문제를 해결해야 했고 synchronized, ReentrantLock, ReentrantReadWriteLock과 같은 다양한 동기화 방법에 대해 깊이 알아보았습니다.1. Synchro..
CPU - Bound 작업CPU-Bound 작업은 CPU 연산 능력이 성능에 영향을 주는 작업입니다.이런 작업은 병렬 처리를 통해 성능을 향상시킬 수 있습니다.이유는 각 Thread는 독립적으로 CPU 자원을 사용하여 작업을 처리하기 때문입니다. 하지만 실제 CPU 코어 수를 초과하는 Thread 개수를 사용하는 경우 성능에 악영향을 초래할 수 있습니다.I/O - Bound 작업I/O-Bound 작업은 입출력 연산 능력이 성능에 영향을 주는 작업입니다.이런 작업은 디스크 or 네트워크 속도에 의해 결정되기 때문에 Thread 수를 증가해도 성능 향상이 제한적입니다.또한 각 스레드가 I/O가 작업이 완료될 때까지 대기하는 병목현상이 발생하여 Thread 관리 오버헤드가 발생할 수 있습니다.성능 향상을 위해..
이 글에서는 Mockito를 활용하여 Java 애플리케이션에서 랜덤 값을 포함하는 함수를 어떻게 효과적으로 테스트할 수 있는지에 대해 알아보겠습니다.MockitoMockito는 자바에서 Mock 객체를 생성하고 관리할 수 있는 강력한 도구이며, 특히 랜덤 값과 같이 예측하기 어려운 요소가 포함된 함수를 테스트할 때 사용할 수 있습니다.Mock 객체란 실제 객체를 대신하는 가짜 객체를 말합니다.Mock 객체는 외부 의존성이 많은 코드나 복잡한 비즈니스 로직을 가진 코드를 테스트하는 데 매우 유용합니다.간단한 예제:import java.util.Random;import lombok.AllArgsConstructor;@AllArgsConstructorpublic class Game { private Rando..
Stream의 특징스트림(Stream)은 Java에서 일련의 데이터를 함수형 연산을 통해 효율적으로 처리할 수 있는 메커니즘입니다.기본적으로 스트림은 지연 평가를 사용하여 연산을 효율적으로 처리합니다.이를 통해 필요할 때만 연산을 실행하고 중간 연산 결과를 최적화할 수 있습니다.병렬 처리를 원할 경우, parallel() or parallelStream()를 사용하여 스트림을 병렬 처리 모드로 전환할 수 있습니다.병렬 Stream이 모든 상황에서 성능 향상을 보장하지 않습니다.이렇게 하면 멀티 코어 CPU를 활용하여 대량의 데이터를 빠르게 처리할 수 있고, 병렬 처리된 각 부분의 결과를 최종적으로 합치는 과정을 거칩니다.스트림의 이러한 특성 덕분에 Java에서는 복잡한 데이터 처리 작업을 보다 간편하게 ..
OpenPDF란? OpenPDF란 Java로 작성된 PDF를 처리하는 라이브러리 입니다. PDF 문서를 생성, 편집, 읽기 및 조작할 수 있는 기능을 제공하여 자바 애플리케이션에서 PDF 관련 작업을 수행하는 데 도움을 줍니다. 활동을 하게 된 계기 PDF 처리를 위해 기존에는 PDFBox를 사용하고 있었습니다. 그러던 중 PDFBox의 내부 코드를 더 자세히 살펴보고 싶어졌고, 이를 통해 코드를 보며 학습하는 기회를 얻었습니다. 그러던 중 OpenPDF 라이브러리를 발견했고, PDFBox에는 없는 기능들이 있을지 궁금해졌습니다. 또한, 최근에는 유지보수성과 코드의 가독성을 높이는 것에 관심이 많았는데, 이를 이론적인 수준에서만이 아니라 실제 프로젝트에 적용하여 검증받고 싶어졌습니다. 그래서 OpenPD..
발생 확인 @aoptest public List testMethod(){ List list = new ArrayList(); list.add(1); list.add(2); return list; } @Around("@annotaion(aoptest)") public ResponseEntity testAOP(ProceedingJoinPoint joinPoint) throws Trowable { try { Object obj = joinPoint.proceed(); return ResponseEntity.ok().body(obj); } catch (Throwable e) { e.printStack(); } } @Getter @AllArgsConstructor public class StatusCode{ Ob..
발생원인 Object 타입으로 받아온 값을 List로 형변환을 시도하던 중 발생하였다. 이는 타입 안전성(Type safety)은 컴파일 중에 타입 제약 조건을 강제하여 런타임 중에 타입 오류를 방지하는 것을 의미하여 예외가 아닌 경고이다. 해결방법 SuppressWarnings 어노테이션 붙이기 SuppressWarnings 관련 옵션은 링크에서 확인 가능합니다. @Getter public class Tistory{ Object data; } @SuppressWarnings("unchecked") List vo = (ArrayList) tistory.getData(); 개발자 답게 타입을 정확히 확인하고 형변환 하기 항상 타입을 정확히 하는 것이 좋아 보인다. @Getter public class Ti..
객체 지향 설계에서 DIP는 의존 관계 역전 원칙을 의미한다. 프로그래머는 추상화에 의존해야하며 구체화에 의존하면 안되는다는 말이다. public class Test{ TestInterface ti = new TestObject(); } 위와 같이 다형성을 이용하여 작성하면 DIP를 위반하는 행위가 된다. 현재 Test 클래스는 인터페이스와 구현체 두가지 모두에 의존하고 있는 상황이다. 이를 해결 하기 위해서는 Test클래스는 추상화만 의존하게 만들어줘야 한다. public class Test{ // 현재 Test 클래스는 추상화에만 의존하고 있다. TestInterface ti; Test(TestInterface ti){ this.ti = ti; } } public class AppConfig{ // ..
Scanner 메소드 중에 nextLine()을 제외한 나머지는 사실 엔터를 인식하지 못한다. Scanner sc = new Scanner(System.in); string s1 = sc.next(); int i1 = sc.nextInt(); string s2 = sc.nextLine(); 이 경우 변수 s2에는 자동으로 빈 문자열이 입력된다. 왜냐하면 입력시 엔터를 누르게 되는데 이 엔터가 다른 메소드에서는 인식하지 못하고 버퍼에 남아있기 때문이다. 이러한 이유로 버퍼에 남아있는 엔터를 날려줘야 변수 s2에 값을 입력할수 있게 된다.