본문 바로가기 메뉴 바로가기

개발 메모

프로필사진
  • 글쓰기
  • 관리
  • 태그
  • 방명록
  • RSS

개발 메모

검색하기 폼
  • 메모
    • HTML
    • CSS
    • JavaScript
    • SPRING
    • JAVA
    • 디자인 패턴
    • MYSQL
    • 개발이슈
    • 객체지향
    • AWS
  • 방명록

메모 (13)
redirect시 memory leak CASE

@GetMapping("/test") public String test() { return "redirect:/test/"+Math.random(); } @GetMapping("/test/{id}") public String test(@PathVariable Double random) { ... } 스프링 낮은 버전을 사용 할 경우, 위와 같이 redirect prefix를 사용하여 string 형태로 redirect 할 경우 memory leak이 발생할 수 있다. spring 내부적으로 beanName을 기준으로 ConcurrentHashMap에 caching 하는 로직이 있어 pathVariable이 포함된 url 등을 return하게 될 경우 모든 redirect return url이 캐시되어 m..

카테고리 없음
Mysql 파티셔닝

파티셔닝이 필요할 경우 - 테이블이 너무 커서 인덱스의 크기가 물리적인 메모리보다 훨씬 클경우 - 데이터 분리보관이 필요할 경우 파티션 프루닝 - select시 A, B, C 파티션이 있을경우, where 조건에 의해 데이터가 C에만 있다는것을 알 수 있을경우, 최적화 단계에서 필요한 파티션만 골라내고 필요없는 파티션은 배제시키는 것 유의사항 - 파티셔닝시 PK, UK에 파티셔닝키가 포함되어야한다. 즉, 유니크키에 파티셔닝키가 포함되기때문에 기존에 사용하던 UK를 온전히 보장 할 수 없다. - 파티션 단위로 파일이 관리되기때문에 파티셔닝 이전에 비해 동시에 open된 파일의 수가 더 많아진다. open_files_limit 파라미터를 적절히 조절하자. 파티션 종류 - range - list - hash ..

카테고리 없음
RestTemplate으로 대용량 파일 전송시 OOM 방지하기

RestTemplate으로 대용량 파일 전송시 OOM(Out Of Memory)가 발생 할 수 있다. RestTemplate 소스를 열어보면 상단 캡처처럼 setBufferRequestBody를 false로 세팅 후 사용을 권장하고있다. RestTemplate가 내부적으로 버퍼를 사용하게 되는데 이 옵션을 꺼주는것이다. 실제 테스트를 진행해보자. 테스트 결과 실제로 확인해보기위해 750MB Dummy file을 생성한 후 테스트를 진행했다. 결과는 다음과 같다. - 첫번째 동그라미 : setBufferRequestBody(true) - 두번째 동그라미 : setBufferRequestBody(false)

카테고리 없음
Lock Wait Timeout를 유발할 수 있는 SpringBatch Chunk Size

간헐적으로 1건씩 Lock Wait Timeout 발생한 case를 기록한다. Lock Wait Timeout이란? Lock 획득을 기다리다가 Lock을 설정된 시간 안에 획득하지 못할 경우 타임아웃이 발생한다. db에서 lock wait timeout 값을 세팅 할 수 있다. 원인 문제가 발생했던 원인은 다음과 같다. Spring Batch에서 Transaction은 Chunk 단위로 처리하게되는데, 이 로직에 외부 api를 호출하는 case가 있었던 것이다. 평소에 정상적으로 동작하고있었지만, 어느 순간부터 이 api가 간헐적으로 응답이 느려지면서 갑자기 이슈가 생긴것이다. 이 외부 api의 응답이 지연되면 해당 배치에서 최소 chunk size만큼의 데이터 row를 lock으로 잡고있게 되는데, 이..

카테고리 없음
MongoDB 샤딩

MongoDB 샤딩시 구성요소는 다음과 같다. Mongos ConfigServer Shard Cluster Mongos Application server에서 mongodb에 접근할때 mongos를 통해 접근한다. 공식 문서에 다음과 같이 잘 설명되어있다. the mongos instances provide the interface between the client applications and the sharded cluster. The mongos instances route queries and write operations to the shards. From the perspective of the application, a mongos instance behaves identically to an..

카테고리 없음
WireShark를 통한 3 Way HandShaking

문득 3 way handshaking 을 직접 보고 싶어서 wireshark를 통해 테스트 해보고 결과를 기록하였다. Test 서버 구성은 간단하게 NGINX를 앞에 두고 reverse proxy를 통해 NodeJs를 바라보게 만들어두고 "Hello World"를 출력하도록 구성하였다. 결과는 위 화면과 같다. 빨간색으로 줄을 그은 부분은 내 서버 ip이므로 가려보았다. 결과는 이론상 아는 바와 같았다. 먼저 1~3줄을 보면, SYN과 ACK를 서로 주고 받으며 3way handshaking 과정이 나타난다. Source에서는 내 Client의 Public IP가 아닌 private IP가 나왔고, Destination은 서버의 public IP가 표출됨을 알 수 있다. 또한, INFO 부분을 보면 알 ..

카테고리 없음
HATEOAS(Hypermedia As The Engine Of Application State)

HATEOAS(Hypermedia As The Engine Of Application State) Hypermedia : 하나의 컨텐츠가 텍스트, 이미지 등 다양한 컨텐츠를 Link 하는 개념 HATEOAS는 로이필딩이 쓴 REST 관한 논문의 Uniform Interface의 주요 부분 중 하나 즉, Http Requeset에 대한 Response에 link에 대한 정보를 제공해줌으로써, Pesponse를 통해 다른 Request를 연결-연결-연결 해서 요청 가능함 예를들어, 서버에서 "/posts" POST 이라는 요청이 "/post" POST으로 변경되었다고 가정 할 경우, Link를 통해 정보를 제공해주면 클라이언트에서는 소스 변경 없이 정보 제공이 가능함. 이를 통한 목적은 Client와 Ser..

카테고리 없음
Second Lost Updates Problem (두 번의 갱신 분실 문제)

Second Lost Updates Problem ( 두 번의 갱신 분실 문제 ) 2개의 트랜잭션에서 동일한 데이터를 변경 하려 할 경우 마지막으로 커밋된 내용이 적용되고 먼저 커밋된 내용이 무시되는 문제이다. 예를 들어 A,B라는 사람이 있는데 동시에 게시글의 제목을 변경하려고 한다. A라는 사람은 제목을 'TITLE1'이라고 변경하고, B라는 사람은 제목을 'TITLE2'라고 변경하고 저장을 누른다. 이럴 경우, A라는 사람이 먼저 저장을 누른 후 B라는 사람이 저장을 누르면 게시글의 제목은 최종적으로 'TITLE2'로 저장 될 것이다. 이럴 경우, A라는 사람은 제목이 'TITLE1'로 변경되었겠지..라고 생각하겠지만, 예상치 못한 결과가 나올 수 있는 것이다. 이럴 경우, JPA에서 사용 할 수 ..

카테고리 없음
LGTM

LGTM : Looks Good To Me. 나에게 좋아 보인다. 오픈소스 문서 번역 관련 기여를 하다가 리뷰어 분이 LGTM 이라는 코멘트를 남기셨다. LGTM에는 두가지 의미가 내재되어있는 것 같다. 리뷰를 대충하고 LGTM을 남겼거나 또는, 정말 리뷰해줄 내용이 없을만큼 괜찮아보였거나. 본인이 리뷰어 입장일때는 첫번째 의미로 LGTM을 사용하는 일은 없도록해야겠다.

카테고리 없음
AWS multi Region 구성 / Route 53 Failover

지난 AWS 장애 관련 글에서 Multi Region이나 Multi Cloud를 언급 했었는데, 이번에 Multi Region 관련 TEST를 해보고 기록으로 남기려고 한다. 이 글에서 Test한 사항은 Multi Region 구성이다. 테스트에서는 Route 53 인스턴스를 활용하여 서울Region의 EC2와 싱가포르Region의 EC2를 ACTIVE-STANDBY 구조로 만들어 보았다. 초록색 부분은 개인서버정보 이므로 안전하게 삭제하였다. Route53 인스턴스에 들어간 후 , 1번 [ Hosted zones ] -> 2번 [ Create Recode Set ]을 클릭하면 우측 3번과 같은 화면을 볼 수있다. Route53에서는 4번[ Routing Policy ]를 설정 할 수 있는 것을 알 수 ..

카테고리 없음
이전 1 2 다음
이전 다음

Blog is powered by Tistory / Designed by Tistory

티스토리툴바