Development
-
데이터의 일관성 유지 - 동시에 여러 사용자가 데이터를 수정하려고 할 때 발생할 수 있는 충돌을 방지 낙관적 락(Optimistic Lock)(비선점 락)이름 그대로 트랜잭션 대부분은 충돌이 발생하지 않는다고 낙관적으로 가정하는 방법DB의 락 기능을 사용하는 것이 아닌, 애플리케이션 계층에서 제공하는 락트랜잭션을 커밋하기 전까지는 충돌유무를 알 수 없다장점-성능이 좋고, 데드락 발생 가능성이 낮다단점-충돌이 발생한 경우 이를 해결하기 위한 추가 작업 필요(재시도, 롤백..) 비관적 락(Pessimistic Lock)(선점 락)이름 그대로 트랜잭션의 충돌이 발생한다고 가정하고 우선 락을 걸고 보는 방법DB의 락 기능을 사용 - 대표적으로 select for update 구문장점-데이터의 일관성을 유지하기..
[Lock] 낙관적 락 & 비관적 락데이터의 일관성 유지 - 동시에 여러 사용자가 데이터를 수정하려고 할 때 발생할 수 있는 충돌을 방지 낙관적 락(Optimistic Lock)(비선점 락)이름 그대로 트랜잭션 대부분은 충돌이 발생하지 않는다고 낙관적으로 가정하는 방법DB의 락 기능을 사용하는 것이 아닌, 애플리케이션 계층에서 제공하는 락트랜잭션을 커밋하기 전까지는 충돌유무를 알 수 없다장점-성능이 좋고, 데드락 발생 가능성이 낮다단점-충돌이 발생한 경우 이를 해결하기 위한 추가 작업 필요(재시도, 롤백..) 비관적 락(Pessimistic Lock)(선점 락)이름 그대로 트랜잭션의 충돌이 발생한다고 가정하고 우선 락을 걸고 보는 방법DB의 락 기능을 사용 - 대표적으로 select for update 구문장점-데이터의 일관성을 유지하기..
2024.12.18 -
jacoco자바 코드커버리지를 측정할 때 사용하는 오픈소스 라이브러리 java code coverage의 약자로 ja co co 코드커버리지테스트의 수행 결과를 수치로 나타내는 방법 테스트를 진행했을 때 코드 자체가 얼마나 실행되었는가를 수치로 확인하는 것 즉, 테스트 코드가 적절하게 작성이 되었는지를 측정하는 방식 중에 하나이다. gradle 설정 plugins { id 'jacoco'}jacoco {// toolVersion = '0.8.12'// 테스트결과 리포트를 저장할 경로 변경// reportsDir = ${project.reporting.baseDir}/jacoco // default location }위와 같이 설정하면, gradle에서 jacoco를 사용할 준비가 된 것이다..
[DevOps] jacoco 코드 커버리지jacoco자바 코드커버리지를 측정할 때 사용하는 오픈소스 라이브러리 java code coverage의 약자로 ja co co 코드커버리지테스트의 수행 결과를 수치로 나타내는 방법 테스트를 진행했을 때 코드 자체가 얼마나 실행되었는가를 수치로 확인하는 것 즉, 테스트 코드가 적절하게 작성이 되었는지를 측정하는 방식 중에 하나이다. gradle 설정 plugins { id 'jacoco'}jacoco {// toolVersion = '0.8.12'// 테스트결과 리포트를 저장할 경로 변경// reportsDir = ${project.reporting.baseDir}/jacoco // default location }위와 같이 설정하면, gradle에서 jacoco를 사용할 준비가 된 것이다..
2024.12.10 -
트랜잭션은 ACID를 보장해야 한다.Atomicity, Consistency, Isolation, Durability 이들 중에 이번에는 격리성에 대해서 알아보자 격리성동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다.예를 들어 동시에 같은 데이터를 수정하지 못하도록 해야 한다.격리성은 동시성과 관련된 성능 이슈로 인해 격리 수준을 선택할 수 있다. 격리 수준Read uncommitted : 커밋되지 않은 읽기Read Commited : 커밋된 읽기Repeatable Read : 반복 가능한 읽기Serializable : 직렬화 가능 Read Uncommited의 격리 수준이 가장 낮고 Serializable의 격리 수준이 가장 높다. 격리 수준에 따른 문제점Dirty ReadNon-..
[Transaction] 격리 수준(Isolation)트랜잭션은 ACID를 보장해야 한다.Atomicity, Consistency, Isolation, Durability 이들 중에 이번에는 격리성에 대해서 알아보자 격리성동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다.예를 들어 동시에 같은 데이터를 수정하지 못하도록 해야 한다.격리성은 동시성과 관련된 성능 이슈로 인해 격리 수준을 선택할 수 있다. 격리 수준Read uncommitted : 커밋되지 않은 읽기Read Commited : 커밋된 읽기Repeatable Read : 반복 가능한 읽기Serializable : 직렬화 가능 Read Uncommited의 격리 수준이 가장 낮고 Serializable의 격리 수준이 가장 높다. 격리 수준에 따른 문제점Dirty ReadNon-..
2024.12.03 -
API를 호출할 때 content-type으로 보통 application/json을 많이 사용한다. 몇몇 코드에서 content-type을 application/x-www-form-urlencoded로 지정하는 것을 보았는데 각각의 차이가 무엇이 있는지, 어떠한 경우에 구분해서 사용하는지 알아보자. application/x-www-form-urlencoded // x-www-form-urlencoded key1=value1&key2=value2 html form을 통한 POST 전송 방식 중 가장 기본이 되는 Content-Type 보내는 데이터를 url 인코딩 후 웹 서버에 보내는 방식 인코딩이 필요하기 때문에 크기가 큰 데이터에 대해 해당하는 방식으로 보내기가 적합하지 않다 x-www-form-url..
[Web] application/json & application/x-www-form-urlencodedAPI를 호출할 때 content-type으로 보통 application/json을 많이 사용한다. 몇몇 코드에서 content-type을 application/x-www-form-urlencoded로 지정하는 것을 보았는데 각각의 차이가 무엇이 있는지, 어떠한 경우에 구분해서 사용하는지 알아보자. application/x-www-form-urlencoded // x-www-form-urlencoded key1=value1&key2=value2 html form을 통한 POST 전송 방식 중 가장 기본이 되는 Content-Type 보내는 데이터를 url 인코딩 후 웹 서버에 보내는 방식 인코딩이 필요하기 때문에 크기가 큰 데이터에 대해 해당하는 방식으로 보내기가 적합하지 않다 x-www-form-url..
2024.05.29