반응형

컴퓨터 13

트랜잭션 격리 수준이란? (transaction isolation level)

트랜잭션 격리 수준이란 무엇일까? 각각의 트랜잭션이 동시에 작업을 처리할 때 어느정도 범위로 격리를 허용할 것 인지 결정하는 것. 격리수준 종류 Read uncommitted (level 0) Read committed (level 1) Repeatable read (level 2) Serializable (level 3) 트랜잭션 격리수준에 따른 발생하는 이상현상 Dirty read : 트랜잭션이 작업이 완료되지 않았는데도 다른 트랜잭션에서 볼 수 있게 되는 현상 Non-repeatable read : 하나의 트랜잭션 내에서 데이터를 조회 시 서로 다른 데이터를 가져오는 현상Phantom read : 하나의 트랜잭션 내에서 없던 레코드가 생기거나 제거되는 현상 Dirty read Non-repeatab..

컴퓨터 2023.12.30

mysql 언두 로그란 (update 시 일어나는 일)

mysql을 사용하면서 update시 어떻게 내부 동작을 하는지 궁금증이 생겨 알아보았습니다. 내부 동작이 어떻길래 각각의 트랙젝션의 설정에 따라서 데이터를 가져올 수 있는지 한번 찾아본 내용을 공유합니다. 참고한 책은 'real mysql 8.0' 입니다. 트랜잭션이 begin 이후 update query가 동작하면 commit까지 해당 데이터는 반영되지 않고 버퍼풀에 남게 됩니다. 기존의 데이터는 언두 로그에 기록되고 (사진 속 '서울') 새로운 데이터는 버퍼풀에 기록되는데 (사신 속 '경기') 만약 commit을 하게되면 퍼퍼풀의 데이터를 innodb의 기록용 스레드가 디스크에 남기게 됩니다. 반대로 rollback을 하게된다면 언두 로그에 기록된 데이터를 버퍼풀로 다시 가져오는 작업을 진행합니다...

컴퓨터 2023.12.17

don't flush the Session after an exception occurs 이슈 해결

Hibernate 기반 back end 작업을 진행하다보면 org.hibernate.AssertionFailure: null id in net.~~~~Entity entry (don't flush the Session after an exception occurs) 라는 오류를 만나볼 수도 있는데 해당 이슈를 격어보고 정보를 공유하고자 합니다. 원인 : @Transaction 내에서 DB sql 작업(insert, update 등) 중 장애가 발생한 경우 entity manager에 exception 발생이 기록된 상황입니다. 그때, 우리가 DB에 새로운 작업을 요청하게 되면 위와 같은 이슈가 발생하게 되는데 hibernate exception이 발생한뒤 세션을 자동으로 clear하진 않기 때문입니다. ..

컴퓨터/Java 2023.04.09

intellij project view 경로 숨기고 branch만 표시하는 법

프로젝트를 진행하다보면 작업공간의 경로가 참 길어지거나 멀티모듈 등으로 path가 정말 길어지는 고의치 않은 상황이 생겨 불편하더라구요. 해서 각 프로젝트 별 현재 branch만 노출하고 path는 숨기는 방법을 공유합니다. 1. 상단메뉴 help > Edit custom Properties 2. 생성 여부를 묻는경우 'Create' 선택 3. project.tree.structure.show.url = false 설정이 완료 된 후 intellij를 재시작 하게되면 적용되는 걸 볼 수 있습니다.

컴퓨터 2023.03.17

Java - 기본타입과 박싱된 기본타입 에 대하여(Long vs long)

안녕하세요. Ruk 입니다. effective java를 읽으며 재밌게 보았던 부분을 한번 테스트와 정리를 해보려고 합니다. 기본타입과 박싱된 기본타입 에 대한 내용인데요. 기본타입 : int, long, double, boolean, char등 박싱된 기본타입(참조타입) : Integer, Long, Double, Boolean, Character등 이런 눈에 익숙한? 타입입니다. 대게 Integer.MAX_VALUE 등 Integer에 있는 기능을 사용할 때 Integer를 사용하셨을 거라고 생각합니다. 프로젝트를 진행하다보면 일부 Dto에서 Integer 같은 박싱된 기본타입을 사용하는 경우도 종종 보이기도 했구요. 하지만 개발자라면 두 기본타입이 어떻게 다르고 어떤 상황에서 어떤값을 선언해야하는지..

컴퓨터/Java 2021.04.06

JPA - Field 'id' doesn't have a default value

안녕하세요. Ruk입니다. 요즘 한창 JPA를 탐구하고 사용해보는 중인데요. 이번에 발생한 에러에 대해 적어보려고 해요. Entity 객체를 Builder하여 save시키는 단순한 로직인데 500에러가 발생을 한다고 Fe개발자에게 연락을 받았습니다. ( 회사 실무가 아닌 주말 스터디 팀이에요... ㅎㅎㅎㅎ 500에러 후,,,, 다행 ) 바로 aws서버 로그를 까서 보았습니다. 해당 필드에 null값이 들어가면서 sql문에 오류가 발생한 것 인데요. 기존에 잘 쓰던 로직이라 처음에는 뭔가 이해가 되지 않더라구요. 바로 최근 변경내역에 대한 히스토리를 보다가 문득 아차싶은 부분을 볼 수 있었습니다. 변경 전 : @GeneratedValue 변경 후 : @GeneratedValue(strategy = Gene..

컴퓨터/Java 2021.04.04

좌표계 변환 - proj4 [행정안전부 -> 카카오 좌표체계 변환]

안녕하세요. Ruk 입니다. 지도 혹은 주소 관련 API를 연동하다보면 좌표체계가 있는데요. 경도, 위도에 대한 값이 API마다 조금씩 다르게 보일 수 있습니다. 이는 좌표체계가 달라서 그렇게 뜨는 현상이더라고요. 해당 API가 어떤 좌표체계를 사용하는지 찾아보면 보다 더 명확하게 알 수 있는데요. 이번 글에서는 이런 다른 좌표체계를 변환하는 방법을 알아보도록 하겠습니다. 저같은 경우 행정안전부의 API를 통하여 얻은 좌표를 카카오API에서 사용 할 수 있는 좌표체계 값으로 변환해 보았습니다. 사용한 Lib는 proj4 입니다. 오픈소스로 javaScript 에서 사용 가능한 js파일 입니다. 제가 2020년에 찾은 3개의 좌표체계 입니다. 해당 좌표는 카카오 문의글과 행정안전부의 문의글 답변에서 쉽게 ..

컴퓨터 2021.04.03

Java - Unchecked Exception과 에러처리

안녕하세요. Ruk입니다. Java를 사용하며 개발을 하며 느낌 Exception에 대한 내용과 그에따른 처리를 정리해보려고 합니다. 어디까지나 제 개인적인 의견이긴 하지만요. ㅎㅎㅎ Exception은 크게 2종류로 나뉘게 됩니다. Checked Exception, Unchecked Exception 인데요. 좀 더 비교해보면 Checked Exception Unchecked Exception 체크여부 반드시 예외처리가 필요 예외처리 없이도 문제가 되지 않음 exception 시점 컴파일 시 exception 실행단계 ( 해당 코드의 특정 값 등 ) 트랜잭션 처리 roll back 처리 하지 않음 roll back 처리 대표 예외 SQLException 등 IndexOutOfBoundException ..

컴퓨터/Java 2021.04.03

[AWS] LightSail - 개인서버 구축하기 - 2 [WorkBench연결 및 Jar파일 실행]

LightSail에 설정된 IP와 Mysql Port를 넣어주기만 하면 연결이 됩니다. 이때 컨넥션이 실패한다면 LightSail 인스턴스에서 방화벽 설정을 오픈해주었는지 체크해보면 됩니다. 3306에 대하여 방화벽을 열어주면 커넥션이 성공적으로 붙게 됩니다. 이제 환경설정이 끝났습니다. 이제 IDE에서 프로젝트를 생성하여 배포를 해보겠습니다. 전 제가 기존에 가지고 있는 프로젝트를 설정하여 배포를 진행하겠습니다. 순서는 간단합니다. 1. Spring Boot에서 yml파일에 설정 2. Gradle Tasks에서 bootJar 실행 3. FTP로 접속하여 파일을 옮겨줍니다. 4. Linux 커널에서 boot를 실행 아주 간단합니다. yml에 설정하는 정보는 많이 있으므로 패스하겠습니다. Gradke Ta..

컴퓨터/AWS 2021.04.02

[AWS] LightSail - Scale up과 고정IP 설정

LightSail $3.5 인스턴스에 Mysql, Nginx, SpringBoot까지 올려두었더니 일정 시간이 지나면 프로세스가 하나씩 죽어나가는걸 발견하게 되었고 로그를 찾아보게 되었습니다. 남은 메모리가 너무 부족하여(500m 메모리중 40m남았던,,,,) 스프링이 Kill되며 죽어버리는 현상을 로그에서 확인 할 수 있었습니다. 하여 인스턴스를 $5로 Scale Up하기로 결정하였습니다. - LightSail Scale Up 하기 - 1. 현재 사용하는 인스턴스 스냅샷을 생성. 2. 스냅샷 된 내용 그대로 새 인스턴스 생성. 스냅샷되었던 설정과 프로그램이 그대로 넘어오게 됩니다. 3. 스냅샷에서 인스턴스 생성의 플랜 선택 까지 진행한다면 새로운 인스턴스에 스냅샷 기준으로 복제가 끝나게 되었을 것 입니..

컴퓨터/AWS 2021.01.31
반응형