우리가 프로젝트를 진행을 하다보면 lock을 이용해서 동시성 제어를 해야 할 경우가 있다. 동시성 제어에는 db를 이용한 하드락이 있을 것이고 또는 hazlecast를 이용하여 처리하는 방법도 있다. 오늘은 간단하게 자바에서 제공하는 lock기능에 대해서 설명하고자 한다. import 내용 import java.util.concurrent.locks.Lock; 사용 방법: //lock 10초간 기다림 if(lock.tryLock(10, TimeUnit.SECONDS)) { try { //데이터 처리... }catch (Exception e) { // 예외 }finally { lock.unlock(); } }else { System.out.println("## lock time out"); } lock.t..
해당 내용은 실제 통계처리 과정에서 사용된 예시입니다. 요청 내용 : 특정 구분값을 기준으로 데이터를 그룹화 요청 해당 내용에서 우려됬던 부분이 그룹화 기준 값이다. 그룹하는 기준 값이 정적 데이터가 아닌 동적인 데이터다 보니 여러 값들이 나올 수 있는 상황이었다. 그래서 우선 대표되는 기준 값에 대하여 중복을 제거하여 리스트를 우선 생성하고 그 기준으로 데이터 그룹화를 진행하려고 했다. 하지만 객체를 대상으로 리스트를 중복제거하여 나타내기에는 어려움이 있었다. 아래는 흔히 우리가 아는 list stream 중복 제거 처리 방법 이다. stream.distinct() 를 이용 //일반 배열을 통해 중복 제거 List list = new ArrayList(Arrays.asList('a','b','c','d..
stream 의 collect 의 groupby를 이용하여 특정 값에 대한 그룹을 지어주자 ex) a = [{}] .b = [{}] , c=[{}] Stream 그룹 처리 Collectors.groupingBy() 사용 List trendList = testService.selectTestList(): Map trendMap = trendList.stream().collect(Collectors.groupingBy(p->p.get("date"))); 결과 예시 ) 2022-12=[{date=2022-12,cnt=3,gubun=A},{date=2022-12,cnt=1,gubun=B},{date=2022-12,cnt=4,gubun=C}] Map 의 키값 기준으로 내림차순 정렬 Map trendMapSort ..
문제 발단 프로젝트에서 얕은 복사와 깊은 복사에 대한 이해도가 적어 애먹은 부분이 있다 먼저 내가 문제가 되었던 알고리즘에 대하여 먼저 얘기해 보자면 어떤 쇼핑몰의 장바구니 로컬 스토리지 처리 관련된 문제이다... 기존 방식: 상품번호가 일치하면 상품번호에 대한 데이터를 중복체크해서 등록이 불가능하도록하는 것 변경된 방식: 장바구니에는 담는데로 담기게 하였다. 그러므로 발생하는 것은 로컬스토리지에 저장되어 장바구니에 표출하던 데이터는 로컬 스토리지에 저장된 상품 번호를 조회하여 그에 대한 상품 정보를 장바구니에 표출하는 형태였는데 중복체크를 안하도록 하는 방식으로 변경 되면서 기존 프로세스로는 장바구니에 중복 정보를 표출할 수 없게 되었습니다.(왜냐하면 상품번호에 해당하는 데이터는 하나의 pk를 가지기 ..
SAX Parser : Simple API for XML Parser 의 약어로 , 자바 API에서 제공한다. 정의 : 기본적으로 SAX 파서는 문서를 순회하며 event가 발생하면서 순차적으로 파싱을 하게 된다. SAX는 XML 문서를 읽어들여서 어떤 태그를 만나면 그에 따라 이벤트를 생성한다. SAX에는 기본적으로 세가지 이벤트가 발생한다 startElement() : 태그를 처음 만나면, 발생하는 이벤트 endElement() : 닫힌 태그를 만나면 발생하는 이벤트 characters() : 태그와 태그 사이의 text(내용)을 처리하기 위한 이벤트 예시 코드) xml 파일 30 홍길동 Male 사용자 30 홍길이 Male 사용자2 21 홍삼이 Female 사용자3 객체로 파싱할 클래스 public..
기본적으로 HttpServletRequest 객체 내 함수를 이용하여 클라이언트 IP를 가져올 수 있습니다. 기본 default 주소를 가져올때 사용하는 함수는 -> HttpServletRequest -> request.getRemoteAddr(); 그러나 이 기본 default 사용방식은 보안관련해서 방화벽이나 클라우드로 운영하는 경우 클라이언트의 실제 Ip 주소를 가져오기가 어렵다. 클라이언트가 요청을 하면 Web Server에서 프록시나 로드 밸런서를 통해 WAS에 요청하기 때문에 프록시나 로드 밸런서의 Ip 주소만을 담고 있습니다. 해결 방안 : X-Forwarded-For을 선언한 헤더를 사용하는 방법 ex) req.getHeader("X-Forwarded-For"); public static ..
- Total
- Today
- Yesterday
- Java
- LocalDate
- 도커
- 리눅스
- mybatis
- 권한
- Lock
- 스케줄러
- 격리수준
- insert
- 이미지
- hazelcast
- Quartz
- dockerfile
- Cache
- 알고리즘
- 캐시
- 개념 이해하기
- ncp
- centos7
- 캘린더
- 네이버 클라우드
- Linux
- docker
- MySQL
- spring
- dfs
- 컨테이너
- 정의
- leatcode
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |