AWS EC2 배포 작업
·
이슈
이 방법을 권장하지 않습니다.처음 배포시 작업했던 내용을 기록한것이니 참고하지 않으시는것을 추천2024.12.27----------------------------------------------------------------------------------------------- AWS EC2를 이용해 배포 작업을 하며 겪었던 문제 정리 AWS 가입하고 EC2 인스턴스 시작하기. 메모리 부족EC2 인스턴스를 만들고 연결했다. 자바설치 -> 깃 클론 -> cd 프로젝트명 -> ./gradlew build 입력 후 무한 대기에 이르게 된다. 중간중간 여러 오류들을 해결해보다 카페 마감으로 쫓겨났다. 집에와서 찾아보니 프리티어(공짜)로 이용해 램이 1GB, 램 부족현상이였다. AWS에서 제공하는 프리티어 ..
모던자바인액션 - 람다와 스트림
·
책/모던 자바 인 액션
람다란? ( ) -> { } 익명클래스의 떨어지는 가독성과 불편한 사용점을 보안하기 위해 만들어진 자바8부터 추가된 인터페이스이다. 람다는 익명클래스로 전환가능하고 익명클래스도 람다로 전환가능하다. 함수를 하나의 식(expression)으로 표현 ,메서드를 하나의 식으로 표현한 것. 함수를 간략하면서도 명확한 식으로 표현 메서드의 이름과 반환값이 없어지므로 람다식을 익명함수라고도 한다. 인터페이스에 메서드가 하나 인것들만 적용 가능하며 개발자의 의도가 명확히 드러나고 간결하여 가독성이 높아진다. 장점 개발자의 의도가 명확히 드러나고 간결하여 가독성이 높아진다. 병렬프로그래밍이 용이하다. 단점 람다가 내부적으로 수행하는 작업이 더 많기 때문에 코드가 복잡해 질수록 어디에서 문제가 발생했는지 확인하기가 어려..
Redis 란?
·
TIL
레디스란 무엇인가기본적으로 웹 환경에서 같은 시간에 동시다발적인 요청이 들어올 수 있다. 멀티스레드 환경에서는 여러 스레드가 한 자원을 공유하게 되면서 데이터 정합성 문제가 발생하게 된다. 해결방법으로 JPA의 비관적 락, 낙관적 락  Redis를 사용하는 방법으로 해결하고 있다.Redis는 분산 락(Distributed Lock) 방법을 이용해 동시성 문제를 제어한다. 분산 락은 이름 그대로 분산된 서버 또는 데이터베이스 환경에서도 동시성을 제어할 수 있는 방법이다. 레디스는 인메모리 데이터베이스의 한 종류이다. 그래서 기본적으로 디스크를 사용하는 데이터베이스보다 메모리를 사용하는 Redis가 더 빠르게 락을 획득 및 해제할 수 있기 때문에 사랑받는 기술중에 하나인듯하다. 왜 속도가 빠른가? 메모리 ..
데이터 설계에 대한 고민
·
이슈
DTO와 엔티티를 분리하자 OrderRequestDto에서 엔티티의 의존성을 없애고 Long 타입으로 필드값을 설정했다. 1. 엔티티는 데이터베이스와 밀접한 관련이 있다. 반면, DTO는 주로 클라이언트와의 데이터 교환을 위한 용도로 사용되기 때문에 의존성을 없애고 엔티티는 순수한 데이터 객체로 사용하는 것이 좋다. 2. 보안을 위해 엔티티가 외부로 노출되는것을 막아야한다. 그래서 DTO로 필요한 데이터만을 노출시킴으로써 더욱 안전하게 데이터를 관리할 수 있다. 3. 엔티티를 사용하다 엔티티가 변경될 경우 다 뜯어고쳐야한다. 그래서 의존관계를 없애면 DTO를 변경할 필요가 없고 정해진 스펙 그대로 받을 수 있다. 외래키를 없애자 지금까지 DB설계시 외래키로 엮어주는 것이 필수고 좋은 설계라고 생각했는데 ..
RedissonLock, JMeter 부하테스트
·
이슈
새로운 프로젝트를 시작하면서 주문시 재고감소 로직에 동시성 문제를 적용해 보았다. 리펙토링, 락 적용 전 코드stockCheck에서 주문한 아이템수량을 상품 재고와 비교한다. 재고 수량보다 클 경우 예외를 던지고 이상없을 시 decrease하고 저장한다.이 경우 동시에 100명이 주문할 경우 재고가 100감소가 되지 않는 문제가 발생한다   우선 pessimisticLock을 적용해보았다테스트를 해보니 잘 적용된다. 그 다음은 RedissonLock을 적용해 보았다레디스를 사용한 동시성 이슈는 계속 테스트가 실패했다.그 이유는 orderService.placeOrder() 메소드 안에서 redissonLock을 사용했고 트랜잭션이 걸려있었기때문에 분산락 해제 시점과 트랜잭션 커밋 시점의 불일치로 재고감소..