String, StringBuilder, StringBuffer 성능 비교
·
책/자바 성능 튜닝이야기
JSCODE 자바스터디 2주차 공부 중 실습 String, StringBuilder, StringBuffer지난번정리https://bocho-developer.tistory.com/16 String은 불변클래스로 문자열 연산 시 기존 문자열을 수정하는 것이 아니라 새로운 인스턴스를 생성하여 힙 영역에 저장된다.이런 작업이 반복 수행되면서 메모리를 많이 사용하게 되고 응답 속도에도 많은 영향을 끼치게 된다. StringBuilder는 동기화 되어있지 않아 싱글스레드 환경에서 사용StringBuffer는 메소드 내부에 synchronized 키워드 설정이 되어있어 멀티스레드 환경에서 안전하다. 성능 테스트 private static void stringTest() { long startTi..
중고차를 알아보다 작성하는 조회 성능 개선기 (Redis 캐싱)
·
이슈
허영심최근 중고차에 관심이가 벤츠 인증 중고차 사이트를 자주 들락날락했다.문제는 사이트에서 차량 조회하면 약 2초 이상 소요되어 고통받았다.답답해서 사이트에 머물고 싶지 않았고 개선이 필요해 보였다. 그에 비해 엔카는 리스트 API호출 시 86.55ms로 아주 훌륭한 조회 성능을 보여준다. 덕분에 엔카에 한번 접속하면 2시간은 순삭이다. 최적의 조회 성능으로 헤어나지 못하게 만든다. 이처럼 조회 성능은 매우중요하다. 2초 아니 1초만 소요되도 느리다고 생각해 사용자에게 좋지 않은 경험을 만들어준다. 조회 성능 개선 고민지난 프로젝트에서 100만건의 상품데이터를 관리하며 발생되는 문제 중 상품 검색 조회 같은 경우 Elasticsearch를 적용하여 성능 개선하였고 단건 조회에서의 문제를 찾아봤다. ..
EXPLAIN 발표
·
DB
스파르타 단기심화반에서 전체 발표 할 수 있는 기회가 생겼다.인생은 도전이고 기회 생기면 다 해보자라는 마음으로 사는중이라 내심 좋았다. 나는 EXPLAIN에 대해서 준비하며 전 회사에서 겪었던 성능 개선 과정에 대해 문제점들을 있다 생각했고 발표를 통해 공유하고 싶었다.EXPLAIN 키워드를 알고 있다면 문제해결 방법에서 느낌이 아닌 데이터로 판단하는 개발을 할 수 있을 거라 생각한다.그래서 많은 내용보다는 발표를 보는 사람들이 이 키워드에 대해서 인식할 수 있다면 반은 성공이다.. 라는 마음으로 발표 자료를 준비했다 발표 자료 및 영상발표자료는 노션으로 준비했다. 내용을 정리하며 편리했지만 이번에 발표해보니 PPT로 준비하는게 집중하기 더 좋을거 같다. https://dorian-hub-840.not..
상품 재고 관리 - 비관적 락 vs 분산 락 적용 사례
·
이슈
재고 차감 동시성 문제 문제 상황🚨 주문-상품 서비스간 2PC 방식 구현 중 동일 상품에 대한 동시 주문 발생 시 재고 수량 데이터 불일치 문제 발견  JMeter 테스트 상품 재고 100개, 200번의 동시 요청테스트 요청 수 - 200건성공 응답 수 - 200건오류율 - 0%평균 처리 시간 - 167.8/sec  모든 요청을 성공으로 응답했으나 데이터베이스의 실제 데이터와 불일치가 발생재고 차감 이력 테이블 : 200건 기록실제 상품 재고: 79개 (21개 차감) 해결 방안 고민❓분산락 적용 안한 이유분산락은 전체 프로세스에 락을 걸어 동시성을 제어상품 재고 차감은 DB에 단일 리소스 업데이트 하는 과정으로 전체 프로세스에 락을 걸 필요X여러 DB서버가 존재하는게 아니고 현재 단일 DB서버 사용중지..
try-with-resources
·
책/이펙티브 자바
try-finally 문제점package exam;public class TryFinally { public static void main(String[] args) throws Exception { TestResource testResource = new TestResource(); try { testResource.firstMethod(); } finally { testResource.close(); } } static class TestResource implements AutoCloseable { public void firstMethod() { System.o..
OSIV (Open Session In View)
·
카테고리 없음
OSIV (Open Session In View)영속성 컨텍스트를 HTTP 요청 시작부터 응답까지 유지하는 기능  여기서 View라는 개념이 어떤건지 궁금했다.REST API 등 View가 없는 서비스에서도 이 용어를 그대로 사용한다고 한다View라기보다는 클라이언트에 대한 응답이 완료되는 시점을 의미HTTP 응답이 끝날 때까지 영속성 컨텍스트를 유지하는 개념으로 확장 OSIV의 View는 역사적인 용어이며 현재는 클라이언트에 대한 응답 완료 시점으로 이해하면 된다고 한다.  spring.jpa.open-in-view=?JPA를 사용하면 yml에서 위의 값을 true,false로 설정할 수 있다. 기본 설정값은 true이다. spring.jpa.open-in-view=true이 설정이 true 라면 h..
@Slf4j
·
TIL
SLF4J(Simple Logging Facade for Java)SLF4J는 인터페이스고, 그 구현체로 Logback같은 로그 라이브러리를 선택하면 된다. 실무에서는 스프링 부트가 기본으로 제공하는 Logback을 대부분 사용한다. 주요 특징컴파일 타임이 아닌 런타임에 구현체가 결정됨클래스패스에 있는 구현체를 자동으로 찾아서 바인딩여러 구현체가 있을 경우 정해진 우선순위에 따라 선택구현체 교체가 용이함 (의존성 변경만으로 가능)OCP, DIP가 잘 적용되었다고 생각하는 예시 동작과정로그를 작성하면 SLF4J API를 통해 로그를 요청하게 된다.클래스패스에 사용가능한 로깅 구현체(바인딩)를 확인선택된 로깅구현체를 통하여 출력 (기본적으로 Logback 사용)
트랜잭션 격리수준 (Repeatable Read)
·
DB
트랜잭션 아이솔레이션 레벨 https://bocho-developer.tistory.com/11 데이터베이스 트랜잭션 격리수준트랜잭션이란? 그동안 트랜잭션에 많은 관심을 기울였고 한번 정리할때가 되어 글을 작성해 보는 시간이다. 우선 트랜잭션은 데이터베이스에서 하나의 기능을 수행하기 위한 작업의 단위이다.bocho-developer.tistory.com 작년에 이부분에 대해 간단히 정리했고 부족한점들이 보였다.이번 글은 Repeatable Read 에 대해 좀 중점적으로 정리한 글이다. 리피터블 리드 (Repeatable Read)동일한 쿼리를 여러번 조회해도 같은 결과 값을 얻게 된다. 하지만, SERIALIZABLE과 다르게 행이 추가되는 것을 막지는 않는다. 이로 인해 팬텀 리드 현상이 발생할 수 ..