728x90

java 129

[Spring] 스프링 부트에서의 예외 처리

스프링 부트의 예외 처리 방식 - 스프링 부트의 예외 처리 방식은 크게 2가지 1. @ControllerAdvice를 통한 모든 Controller에서 발생할 수 있는 예외 처리 모든 컨트롤러에서 발생할 예외를 정의 2. @ExceptionHandler를 통한 특정 Controller의 예외 처리 발생하는 예외 마다 처리할 메소드를 정의 @ControllerAdvice, @RestControllerAdvice - @ControllerAdvice는 Spring에서 제공하는 어노테이션 - @ControllerAdvice나 @RestController에서 발생하는 예외를 한 곳에서 관리하고 처리할 수 있게 하는 어노테이션 - 설정을 통해 범위 지정이 가능하며, Default 값으로 모든 Controller에 ..

[Spring] 알아두면 좋은 디자인 패턴

알아두면 좋은 디자인 패턴 디자인 패턴이란? - 디자인 패턴이란 특정 문맥에서 공통적으로 발생하는 문제에 대해 쓰이는 재사용 가능한 해결책. - 목적별로 일정한 패턴이 제시되어 있다. - 현재 상황에 맞춰 최적화된 패턴을 결정하여 사용. 디자인 패턴의 장점 - 개발자 간의 원활한 협업이 가능 - 소프트웨어의 구조를 파악하기 용이 - 재사용을 통해 개발 시간 단축 - 설계 변경이 있을 경우 비교적 원활하게 조치 가능 디자인 패턴의 단점 - 객체지향적 설계를 고려하여 진행해야 함 - 초기 투자 비용이 많이 들어감(돈, 시간 등) GoF 디자인 패턴 목적에 따른 분류 - 생성 패턴, 구조 패턴, 행동 패턴, 3가지로 구분된다. - 각 패턴이 어떤 작업을 위해 생성되는 것인지에 따른 구분. 1. 생성 패턴 - ..

[Spring] RestTemplate 사용하기

RestTemplate은 스프링 프레임워크에서 제공하는 간단하고 동기화된 REST 클라이언트이다. 용도는 서버에서 다른 서버의 API를 호출할 때 사용된다. 주요 사용되는 메소드의 기능이다. 외울 필요는 없고, 그때 그때 찾아보는게 효율적일듯 메소드 기능 delete() 지정된 URL의 리소스에 http delete 요청 수행 exchange() 지정된 http 메소드를 url에 대해 실행. response body와 연결되는 객체를 포함하는 responseEntity를 리턴 execute() 지정된 http메소드를 url에 대해 실행. response body와 연결되는 객체를 리턴 getForEntity() http get request 전송. response body와 연결되는 객체를 포함하는 re..

[JPA] fetchCount() 대체하기

회사에서 C#을 자바로 전환하는 작업을 하고있다. 약 16만 건의 데이터를 조회하고 페이징 하는 작업 중 화면까지 로딩 되는 시간이 오래 걸렸다.(3초 정도) 데이터가 그렇게 큰 것 같진 않은데 오래걸려서 속도를 단축시켜봤다. 테이블 구조는 예전에 만들어져 있던 것이라 수정할 수 없었고, 같은 테이블이 4번씩 조인되어 있었는데, 이러한 부분을 없애고, 자바쪽에서 데이터를 가공했다. 그 결과 1.3 ~ 1.5초로 단축했는데, 만족스럽지 않았다. 비슷한 경험을 한 회사 동료가 페이징 때문에 total을 계산 하는 쪽이 문제가 될 수도 있다고 해서, 그 부분을 없애니 속도가 0.1초대로 빨라졌다. JPAQuery jpaQuery = query .select( Projections.constructor(DTO...

[Spring] 동시성 이슈 해결 방법 (4)

지난번 포스팅과 코드를 이어간다. https://devhooney.tistory.com/110 [Spring] 동시성 이슈 해결 방법 (3) 지난번 포스팅과 코드를 이어간다. https://devhooney.tistory.com/109 [Spring] 동시성 이슈 해결 방법 (2) 지난번 포스팅과 코드를 이어간다. https://devhooney.tistory.com/108 [Spring] 동시성 이슈 해결 방.. devhooney.tistory.com 메모리 DB인 Redis를 활용하여 데이터 정합성을 맞추는 방법을 알아보자 Lettuce Redisson 2가지가 있다. Lettuce - Lettuce는 setnx 명령어를 활용하여 분산락을 구현한다. 키와 밸류를 set할 때 기존 값이 없을 때만 se..

[Spring] 동시성 이슈 해결 방법 (3)

지난번 포스팅과 코드를 이어간다. https://devhooney.tistory.com/109 [Spring] 동시성 이슈 해결 방법 (2) 지난번 포스팅과 코드를 이어간다. https://devhooney.tistory.com/108 [Spring] 동시성 이슈 해결 방법 (1) 간단한 재고 시스템으로 알아보는 동시성 이슈 Stock @Entity public class Stock { @Id @GeneratedVal.. devhooney.tistory.com DB를 활용하여 데이터 정합성을 맞추는 여러가지 방법을 알아보려한다. Mysql(mariaDB)를 활용한 방법은 3가지가 있다. Pessimistic Lock (exclusive lock) Optimistic Lock Named Lock - Pes..

[Spring] 동시성 이슈 해결 방법 (2)

지난번 포스팅과 코드를 이어간다. https://devhooney.tistory.com/108 [Spring] 동시성 이슈 해결 방법 (1) 간단한 재고 시스템으로 알아보는 동시성 이슈 Stock @Entity public class Stock { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long productId; private Long quantity;.. devhooney.tistory.com 지난번에 race condition을 방지하기 위해서 데이터에 하나의 쓰레드만 접근하도록 하는것이 방법이었다. 이외에도 다른 방법들이 있는데, 하나씩 정리해보려고 한다. 자바에서 지원하는 방법으로 문제를 해..

[Spring] 동시성 이슈 해결 방법 (1)

간단한 재고 시스템으로 알아보는 동시성 이슈 Stock @Entity public class Stock { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long productId; private Long quantity; @Version private Long version; public Stock(){ } public Stock(Long productId, Long quantity) { this.productId = productId; this.quantity = quantity; } public Long getQuantity() { return quantity; } public void decrease..

[Java] 쓰레드(Thread)의 실행제어

1. 쓰레드의 생성부터 소멸 쓰레드를 생성하고 start()를 호출하면 바로 실행되지 않고 실행 대기열에 저장되어 차례를 기다린다.(큐 자료구조) - FIFO 실행대기상태에 있다가 자신의 차례가 되면 실행상태 실행시간이 다 되거나 yield()를 만날 경우 다시 실행대기상태 실행 중에 suspend(), sleep(), wait(), join(), I/O block를 만나면 일시 정지 상태 일시정지시간이 다되거나, notify(), resume(), interrupt()가 호출되면 실행대기열에서 자신의 차례를 기다린다. 실행을 다 마치거나 stop()이 호출되면 쓰레드는 소멸 - 번호대로 쓰레드가 실행되는 것은 아님 2. 쓰레드의 동기화 - 한 쓰레드가 진행 중인 작업을 다른 쓰레드가 간섭하지 못하도록 ..

[Java] 쓰레드(Thread)의 기초

1. 프로세스와 쓰레드 - 프로세스는 실행 중인 프로그램을 말한다. - 프로그램을 실행하면 OS로부터 메모리를 할당받아 프로세스가 된다. - 프로세스는 데이터, 메모리 등의 자원과 '쓰레드'로 구성되어 있다. - 자원을 이용하여 실제로 작업을 수행하는 것이 '쓰레드'이다. - 모든 프로세스에는 최소한 하나 이상의 쓰레드가 존재하며, 두 개 이상일 경우 멀티 쓰레드라고 한다. 멀티태스킹과 멀티쓰레딩 - 멀티태스킹은 다중작업을 말한다. 멀티태스킹이 가능하면 여러 개의 프로세스가 동시에 실행될 수 있다. - 멀티쓰레딩은 하나의 프로세스 내에서 여러 쓰레드가 동시에 작업을 수행한다. 멀티쓰레딩의 장단점 장점 - CPU의 사용률을 향상시킨다. - 자원을 효율적으로 사용할 수 있다. - 사용자에 대한 응답성이 향상..

728x90