분류 전체보기(77)
-
[Spring JPA] 비관적 락, 낙관적 락 공부하기
비관적 락, 낙관적 락 이란? 비관적 락 비관적 락은 충돌이 일어날 것이다 비관적으로 생각해서 미리 락을 걸어주는 방법입니다. 하나의 트랜잭션이 자원에 접근 시 락을 걸고 다른 트랜잭션이 접근하지 못하게 합니다. 이 때 Shared Lock과 Exclusive Lock 두 가지를 걸 수 있습니다. Shared Lock은 다른 트랜잭션에서 읽기만 가능하고 다른 트랜잭션의 Shared Lock과 자원을 공유합니다. 하지만 Exclusive Lock은 접근할 수 없습니다. Exclusive Lock은 읽기, 쓰기 다 공유하지 않습니다. 장점 충돌이 많은 경우 롤백 횟수를 줄여 성능적인 측면에서 좋습니다. 데이터 일관성과 무결성을 보장하는 수준이 매우 높습니다. 단점 읽기 작업이 많은 로직의 경우엔 동시성이 떨..
2023.04.11 -
[Transaction] 트랜잭션과 트랜잭션 격리성 공부하기
트랜잭션이란? 트랜잭션은 DB의 상태 변화를 위해 수행되는 가장 작은 더 이상 쪼개질 수 없는 작업 단위입니다. 하나의 트랜잭션이 가진 작업들은 한 몸처럼 동작해야 하기 때문에 실패하면 전부 다 없던 작업으로 처리(RollBack)하고 성공하면 DB에 반영(Commit)합니다. 트랜잭션의 특성 트랜잭션은 아래의 4가지 특성을 가집니다. 원자성 (Atomicity) : 더 이상 쪼개지지 않는 최소 작업의 단위입니다. 일관성 (Consistency) : 일관된 DB에서 트랜잭션이 성공된 후에도 DB가 일관되어야 합니다. 트랜잭션의 결과로 DB가 모순되면 안됩니다. 격리성 (Isolation) : 실행 중인 트랜잭션의 중간결과를 다른 트랜잭션이 접근할 수 없습니다. 영속성 (Durability) : 트랜잭션이..
2023.04.11 -
[Lock] DB 락에 대해서 공부하기
DB Lock이란? DB는 여러 사용자들이 동시에 같은 데이터에 접근하는 경우 데이터의 무결성과 일관성을 지키기 위해서 락을 사용합니다. 락은 트랜잭션 처리의 순차성을 보장하기 위한 방법입니다. Lock의 범위 (Level) DB에는 Lock이 걸리는 범위를 설정할 수 있습니다. 모두 아래와 같습니다. 데이터 베이스 : 전체 DB에 락을 설정하고 거의 사용되지 않습니다. 주요 DB 업데이트에 사용됩니다. (DB 소프트웨어 버전 업그레이드) 파일 : 테이블, 로우 등의 실제 데이터가 쓰여지는 물리적인 저장소에 락을 설정하고 잘 사용되지 않습니다. 테이블 : 테이블에 락을 설정하고 주로 DDL 구문과 같이 전체 테이블에 영향을 주는 변경을 수행 시 유용합니다. 페이지와 블록 : 페이지와 블록에 락을 설정하고..
2023.04.11 -
[Spring Cloud] OpenFeign 적용하기 - 고양이 이미지 API 구현 과제
과제 저장소: https://github.com/twotwobread/jwp_cat_picture_search 💡본문에 들어가기 앞서... 해당 고양이 이미지 API 구현 과제에서의 요구사항 중 하나가 Feign을 적용하여 API 호출을 하는 것이었습니다. Feign이 뭔지 공부를 해보고 적용해보려고 하고 Hype이란 프로젝트에서 Feign없이 서버에서 API를 호출해본 경험이 있어서 그 때 코드도 한 번 보면서 비교해려고 합니다아! 레츠 고도리! ※ 제가 사용하는 외부 open api는 TheCatAPI 입니다!! OpenFeign 란? Feign는 Netflix에서 개발된 Http Client Binder입니다. 원래 이름이 Spring Cloud Netflix Feign이었는데 현재는 오픈소스 프로..
2023.04.06 -
[DevOps] DockerFile 사용해보기 - 고양이 이미지 API 구현 과제
과제 저장소 : https://github.com/twotwobread/jwp_cat_picture_search 💡본문에 들어가기 앞서... 프로그래머스 백엔드 데브코스 멘토님께서 연 코드리뷰 강의인 고양이 이미지 API 구현하는 과제에서 Docker를 이용해서 로컬 DB를 설정하라는 요구사항이 있었습니다. 그래서 저는 DockerFile을 이용해서 설정파일을 만들어야겠다고 생각을 했고 그 전에 Docker에 대해서 공부해보고자 글을 씁니다아! ※ 도커의 개념에 대해선 해당 글을 기반으로 작성했습니다!! Docker란? 도커를 이용해서 프로젝트도 하고 꽤 많이 이용을 해봤는데 사실 도커가 뭔지에 대해서 명확히 몰랐습니다. 도커란? 도커(Docker)는 리눅스 컨테이너에 리눅스 어플리케이션을 프로세스 격리..
2023.04.06 -
[DevOps] Nginx 무중단 배포 설정하기 - Hype
💡본문에 들어가기 앞서... 앞전에 썼던 글처럼 무중단 배포를 설정하고 배포를 진행하고 다른 기능들을 붙여보면서 발생했던 문제를 해결하는 글입니다. Nginx 무중단 배포 구현 후 발생한 문제 되겠지 생각하면서 모르고 있다가 어느 순간 확인해보니까 배포가 안되는 것 같았고 AWS를 보니까 배포가 계속 실패하고 있었습니다. 이런 문제가 발생했었습니다. 문제 해결 방법 구글링을 해보니까 공식 문서에서 해결 방법을 알려주고 있었습니다. 리눅스 기반 OS에서 백그라운드로 프로세스를 실행하려면 &를 붙여야 한다고 알고 있었고 그래서 저도 위와 똑같이 &만을 붙였습니다. 하지만 Code Deploy 사용 설명서에서는 이것만 추가해서는 백그라운드에서 실행되도록 할 수 없다고 합니다. 위와 같이 stdout, stde..
2023.04.04