Tsunayoshi Tsuna Sawada - Katekyo Hitman Reborn 3 개발하는 핸니 — 개발하는 핸니
[ 트러블슈팅 ] 낙관적 락 동시성 처리 에러
·
Spring/Error
Notion에서 작성 된 글입니다. 템플릿이 깨진다면 Notion을 확인해주세요. 낙관적 락 동시성 처리 에러 | Notion들어가기 앞서..hail-buttercup-c86.notion.site 들어가기 앞서..동시성 테스트 과정에서 발생한 트러블 슈팅입니다. 쿠폰 이벤트의 동시성 문제를 처리하기 위해 Lock 전략 중 낙관적 락을 먼저 도입해보기로했다. 처리하기 위해 Event 엔티티에 Version 필드를 추가해주었다.문제 상황스크린샷을 첨부하여 어떤 문제가 발생하였는지 작성하자.@Getter@Entity@Table(name = "event")@NoArgsConstructor(access = AccessLevel.PROTECTED)public class Event { . . . @Versi..
[ CS ] Lock
·
CS
Notion에서 작성 된 글입니다. 템플릿이 깨진다면 Notion을 확인해주세요. Lock | Notion들어가기앞서…hail-buttercup-c86.notion.site 들어가기앞서…필자는 이번 프로젝트에서 이벤트 기능을 맡게되었다.이벤트 기능의 주요 서비스는, 여러명의 사용자가 포인트를 지불하고 이벤트에 참여하면 이벤트에 누적 금액이 쌓이게되고, 목표 금액에 달성한 사용자만이 티켓을 얻게되는 이벤트이다.때문에 이벤트 응모 요청은 동시에 여러명이 요청할 수 있는 API이다.이런 사용자의 요청이 모두 다 정상적으로 반영되면 좋겠지만, 실제로는 동시에 여러명이 요청을 할 경우, 누적금액이 모두 정상적으로 반영이 될까? 결과부터 말해보자면 그렇지않다. 이런 동시성 문제를 해결하기 위해서는 Lock에 대한..
[ Java ] Synchronized와 volatile 그리고 Atomic
·
Java
Notion에서 작성 된 글입니다. 템플릿이 깨진다면 Notion을 확인해주세요. Lock | Notion들어가기앞서…hail-buttercup-c86.notion.site 들어가기앞서…동시성 이슈는 개발자라면 한 번쯤은 마주하게 되는 난관 중 하나이다.특히 다중 스레드를 다루는 웹 서버나 백엔드 시스템에서 값이 제대로 반영되지 않는 문제가 발생하면, 그 근본 원인은 대부분 동시성 문제로 나타난다.오늘은 동시성이 무엇이고, 왜 문제가 생기는지, 그리고 어떻게 해결할 수 있는지 정리해보자.자바에서의 동기화동시성(Concurrency) 문제란 도대체 무엇일까?동시성 이슈라고 하면, 많은 사람이 겪고 고민하는 문제중 하나라고 생각한다. 당장 구글링을 해보면 동시성 문제에 대한 트러블 슈팅과 정의가 넘쳐난다...
[ CS ] 동기와 비동기
·
CS
들어가기앞서…개발 공부를 하다보면 동기와 비동기라는 자주 듣게된다. 이건 멀티 스레드 혹은 동시성에 대해서 공부를 하다보면 더더욱 자주 듣게 되는데, 도대체 동기와 비동기란 무엇일까? 이번 기회에 알아보자.동기와 비동기동기와 비동기는 무엇일까?아래의 사진은 동기와 비동기 이해를 돕기 위해 사용된 사진이다.동기를 살펴보면 한명의 주인이 여러명의 고객을 순차적으로 맡아 결제를 진행하고있다. 또한 주문한 후에 커피가 나올때 까지 기다려야한다.비동기를 살펴보면 여러명의 주인이 고객을 맡아 결제를 진행하고있다. 또한 주문 후 진동벨이 울리면 커피를 가져올 수 있다.둘의 운영 방식에 확실히 차이점이 있어보인다. 이제 좀 더 깊게 들어가보자.동기(Synchronous)동기는 사전적으로 ‘동시에 일어난다’라는 의미를 ..
[ Test ] TDD (Test Deiven Development)
·
카테고리 없음
들어가기 앞서 . . .테스트 코드를 작성하거나, 공부를 조금이라도 했다면 들어봤을 단어 “TDD”필자도 프로젝트를 듣고, 인턴을 하며 많이 들어봤던 단어이다. 당시에는 테스트코드에 관심이 없어 정의정도만 알고 넘어갔다. 테스트에서 TDD는 이미 너무 영향이 크기때문에 이번에 테스트 코드 강의를 들으면서 다시 정의와 왜 사용해야하는 지, 또 어떻게 적용해야하는지에 대해서 알아보도록하자. Test Driven DevelopmentTDD란 무엇일까?TDD. Test Driven Development이다.우리는 이 전의 테스트코드에서 먼저 구현부를 작성한 뒤에, 구현부에 맞춰서 테스트 코드를 작성해왔다.TDD는 이와 반대로, 테스트 코드를 먼저 작성한 뒤, 테스트 코드에 맞춰서 구현부를 작성하는 방법론이다.즉..
[CS] 캐시 메모리(Cache Memory)란?
·
CS
들어가기 앞서 . . .CS 공부를 하면서 CPU나 메모리 구조를 배울 때마다 자주 마주치는 용어가 바로 캐시 메모리였다.하지만 “속도 차이를 줄이기 위한 메모리다”라는 정의만으로는 왜 필요한지, 어떻게 동작하는지 명확히 와닿지 않았다.이번 포스팅에서는 캐시 메모리가 실제로 어떤 상황에서 사용되고, CPU와 메모리 사이에서 어떤 역할을 하는지 그림과 예시를 통해 구체적으로 정리해보고자 한다. 캐시 메모리란 무엇일까?캐시 메모리란 속도가 빠른 장치와 속도가 느린 장치간의 속도 차이로 인해 일어나는 병목 현상을 줄이기 위한 메모리이다.정의로만 보면 쉽게 이해가 잘 안된다. 그림과 예시를 함께 봐보자. CPU는 연산처리가 굉장히 빠르다.하지만 CPU가 주기억장치(RAM)에서 데이터를 가져오는데 시간이 오래 걸..
[Github Actions] Springboot 팀 프로젝트 CI/CD 구축하기
·
Github Actions
들어가기 앞서 . . .전 포스팅에서는 개인 프로젝트의 CI/CD 구축 방법을 알아봤다.하지만 개인 프로젝트의 CI/CD 구축 방법을 사용하면 다른 팀원과 사용할 경우 나의 github 게정의 노출이 존재하다는 단점이 있었고, EC2 서버가 빌드를 하도록 하기때문에, 서버에 부담이 간다는 점이 있다.이번 포스팅에서는 소규모거나 그래도 좀 규모가 있는 프로젝트에서는 CI/CD를 어떻게 구축하는 지 알아보자.전체적인 흐름전체적인 흐름만 봐선 개인 프로젝트에 CI/CD를 구축하는 흐름과 크게 달라보이지않는다. 어느점에서 차이가 있는지 살펴보자.개발자가 git push를 한다Github Actions가 서버를 빌드하고 테스트한다빌드와 테스트를 성공하면 빌드 파일을 EC2에 전달한다기존에 개인 프로젝트의 CI/C..
[Github Actions] SpringBoot 개인 프로젝트 CI/CD 구축하기
·
Github Actions
들어가기 앞서 . . .저번 포스팅에서 간단하게 CI/CD의 기본 이론과 어떤식으로 동작하는지에 대해 알 수 있었다.이번 포스팅에서는 이를 바탕으로, SpringBoot 개인 프로젝트에 직접 CI/CD를 구축해보는 과정을 정리하고자 한다.GitHub Actions와 EC2를 활용해 자동으로 배포가 이루어지도록 설정하고,실제로 코드만 push했을 때 서버에 자동으로 반영되는 흐름을 구현해보며 실전에서 CI/CD가 어떻게 적용되는지 체감해보자. CI/CD 전체적인 흐름개인 프로젝트에서의 CI/CD 구축 흐름은 아래와 같다.위와같은 흐름은 장단점이 명확하게 드러난다. 장점git push를 활용해서 변경된 부분의 프로젝트 코드에 대해서만 업데이트 하기 때문에 CI/CD 속도가 빠르다대부분의 CI/CD는 전체 ..