| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 멀티스레드
- 2정규화
- jquery
- 트랜잭션 동시성 이슈
- 구간합
- 1정규화
- ajax
- @Retryable
- 다중db cqrs
- 2차원배열 구간합
- SQL
- 백준
- sop 우회
- map()
- gc대상
- 3정규화
- 단일db cqrs
- 12891번
- lock-based
- 구간합구하기
- this
- json
- cas알고리즘
- 백준 11660번
- Java
- 생성자
- segregation
- select
- cross origin resources sharing
- boj21891
- Today
- Total
목록전체 글 (158)
평범한 연구소
GC 친화적인 코드는 뭘까? 🤔할당량, 객체 생존시간, 객체 그래프 복잡도를 제어해서 GC가 짧고 예측 가능하게 끝나도록 만드는 코드이다.1️⃣ 불필요한 객체 생성 줄이기 루프 안에서의 new, 문자열 결합, boxing 지양하기String.format, '+' 대신 StringBuilder 지향hot path에서 Optional, Stream 체인 과다사용은 allocation을 늘릴 수 있다. 가독성도 떨어지고.2️⃣ 객체 수명 짧게 유지즉, young 영역에서 죽게 만드는 것메서드/요청 범위내에서 끝나는 객체는 괜찮음.static 컬렉션, long-lived map에서 참조를 남겨 old 영역으로 프로모션하는 패턴은 주의 필요이벤트 리스너/콜백 등록 후 해제 누락 = 대표적인 메모리 누수 원인..
JVM이 GC 대상을 판단하는 기준은 뭘까? 🤔이 객체는 아직 사용 중일까?아니라면, 이제 제거해도 될까?이 판단의 핵심 개념은 도달 가능성 (Reachability) 이다. GC가 필요한 이유는 뭘까? 🤔객체는 대부분 Heap 메모리에 생성된다.User user = new User(); // Heap에 User 객체 생성됨....user = null; // 메서드가 끝나거나, 더 이상 참조하지 않으면 사실상 사용할 수 없는 상태.이런 객체들을 계속 메모리에 남겨둔다면, 아래와 같은 문제가 생기기 때문에 JVM이 자동으로 정리한다.Heap 메모리 증가OutOfMemoryError 발생애플리케이션 성능 저하 JVM는 객체의 생존 여부를 어떻게 판단할까? 🤔GC Root로부터 도달 가능한가? 를 기준..
RequestBody요청의 본문(Body)값을 바인딩할 때 사용JSON → 객체 변환내부적으로 HttpMessageConverter를 거치는데, 이 때 ObjetcMapper를 통해 Json값을 Java 객체로 역직렬화파라미터로 받을 객체에 생성자를 정의해야함Jackson이 Json객체의 필드를 Java 객체 필드로 매핑하는 과정을 알아두면 좋다.Jackson은 Json 필드를 객체 필드로 매핑할 때 getter setter 메서드 이름으로 일치시킨다. 메서드에서 get, set 부분을 제거하고 남은 이름 첫글자를 소문자로 변환한다. 예전에, DTO의 boolean 타입의 필드명을 'isUse'로 네이밍한 적이 있었다.이 경우 setter 메서드는 setUse(), getter 메서드는 isUse()가 ..
SPOF (Single Point of Failure)단일 장애 지점이란, 전체 시스템에서 제대로 동작하지 않는 경우에 전체 시스템이 중단되는 구성 요소하나가 죽으면 전체 서비스가 멈추는 구조EX) 서버 1대, DB 1대가용성이 높은 경우 고가용성(High Availability, HA)라고 하는데, 시스템이 고가용성을 만족하기 위해선 SPOF를 개선하는 작업이 요구된다. Case 1. 서버 1대 + Repliaca 3Server 1대에 Pod 3개프로세스 레벨 장애 대응같은 앱 3개를 복제하는 개념. 동일한 이미지.Pod 하나가 죽어도, 나머지 2개는 살아있다.이 구조는 서버 내부에서는 HA이지만, 전체 시스템에서는 SPOFPod 1 → container(app)Pod 2 → container(app)..
첫 시도엔 아래처럼 문자열(targetPart)을 매번 substring으로 잘랐고, getCountArray을 반복했기에.. 시간 초과가 떴다.package boj;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Ex12891 { private final static int ALPHABET_COUNT = 4; public static void main(String[] args) throws IOException { Ex12891 ex12891 = new Ex12891(); S..
포워드 프록시와 리버스 프록시는둘 다 중간에 끼어 있는 서버 라는 점은 동일하지만,어느 쪽을 대표하느냐(클라이언트 or 서버)에 따라 목적솨 사용 사례가 완전히 달라진다. 포워드 프록시 (Foward Proxy)클라이언트를 대신해 외부 서버에 요청을 보내는 프록시클라이언트가 직접 인터넷에 접근하지 않고, 프록시 서버가 대신 외부 서버에 요청을 보낸다.외부 서버는 프록시만 보이기 때문에 실제 클라이언트를 알지 못한다. (클라이언트를 숨긴다)내부 IP를 숨기고 외부와 통신하므로 보안/익명성을 가진다.사내에서 특정 사이트를 통제할 때도 사용할 수 있고, 사내 네트워크 정책에 따라 외부 접근을 제한할 수 있다.ex) 회사 PC에서 외부 인터넷 접속 시 Proxy 설정 요구, VPN 네트워크, 기업 방화벽 등자..