참고: - https://offbyone.tistory.com/405 - https://dzone.com/articles/spring-transactional-amp-exceptions - https://cheese10yun.github.io/checked-exception/ @Transactional의 rollback 조건 Unchecked Exception인 경우에만 rollback 처리된다. 예를 들어, (1) RuntimeException 발생한 경우 (handling해도 마찬가지) (2) Checked Exception을 handling하지 않은 경우
MySQL 기준.. 1. "SELECT ... FOR UPDATE"란? 하나 또는 특정 범위의 row에 대해 여러 세션에서 접근하여 발생할 수 있는 동시성 문제를 해결하기 위해 이용할 수 있다. "SELECT ... FOR UPDATE" 쿼리를 실행하면(auto commit 모드를 비활성화 시킨 후에 "SELECT ... FOR UPDATE" 쿼리 실행해야 한다), Intention Lock(table-level) 걸린 후, Exclusive Lock(row-level) 걸리게 된다. 2. "SELECT ... FOR UPDATE" 이슈 => 존재하지 않는 데이터에 대해서는 모든 세션에서 "SELECT FOR UPDATE"/"UPDATE"/"DELETE" 문을 실행할 수 있는데, 데이터 수가 1개 이상인..
1) Shared Lock = Read Lock SELECT 실행 => Shared Lock 설정 => Shared Lock이 걸린 데이터를 다른 트랜잭션들이 단순히 읽어 들여 Shared Lock을 계속 걸 수는 있지만 UPDATE/DELETE 실행(Exclusive Lock)은 불가능하다. 역시, 다른 트랜잭션에 의해 Exclusive Lock(INSERT/UPDATE/DELETE)이 걸린 데이터에는 Shared Lock(SELECT)을 걸 수 없어 읽을 수 없다. 2) Exclusive Lock = Write Lock INSERT/UPDATE/DELETE 실행 => Exclusive Lock 설정 => 해당 트랜잭션이 완료될 때까지 유지되어 다른 트랜잭션은 해당 데이터에 접근(SELECT/UPDAT..
[Read Uncommitted] 트랜잭션에서 처리(SELECT/INSERT/UPDATE/DELETE)중에 있는 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용한다 [Read Committed] 트랜잭션들이 Commit된 데이터만 읽게 함으로써 Dirty Read를 막는다. Commit된 데이터만 읽더라도 읽는 시점에 따라 결과가 다를 수 있어서 Non-Repeatable Read와 Phantom Read 현상이 발생할 수 있다. 한 트랜잭션 내에서 쿼리를 두 번 수행할 경우, 두 쿼리 사이에서 다른 트랜잭션에 의해 해당 데이터가 UPDATE/DELETE되거나 새로운 데이터가 INSERT되는 일이 발생할 수 있다. [Repeatable Read] 트랜잭션 내에서 쿼리를 두 번 이상 수행할 경..
- 일련의 로직 실행 과정에서 예외 또는 오류 발생 시에 관련 쿼리들을 모두 Rollback 시키기 위함.
출처: https://m.blog.naver.com/PostView.nhn?blogId=platinasnow&logNo=220032855280&proxyReferer=https%3A%2F%2Fwww.google.com%2F @Component, @Service, @Repository, @Controller는 bean으로 등록하고 싶은 것에 사용되는 annotaion이다. 역할을 확실하게 명시하기 위해 사용되며, AOP의 Pointcut에서 annotaion 단위로 지정할 수 있기 때문에 유용하게 사용될 수 있다. @Component Presentation Layer에서 Controller를 명시하기 위해 사용. @Service Business Layer에서 Service를 명시하기 위해 사용. @Repo..
참고: - 『네티 인 액션』 (노먼 마우러, 마빈 알렌 울프탈 지음. 최민석 옮김.) Netty: - 비동기식 이벤트 기반의 네트워크 애플리케이션 프레임워크 - 모든 구현이 Channel, ChannelPipeline, ChannelHandler 인터페이스를 기준으로 정의된다. - 네티가 제공하는 전송: ㄴ NIO: 논블로킹 입출력. selector 기반 방식. ㄴ Epoll: 논블로킹 입출력. 리눅스에서만 이용. NIO 전송보다 빠르고 완전한 논블로킹. ㄴ OIO: 블로킹 스트림 이용. ㄴ 로컬(Local): VM에서 파이프를 통해 통신하는 데 이용. ㄴ 임베디드(Embedded): 실제 네트워크 기반 전송 없이 ChannelHandler를 이용할 수 있게 해줌. ChannelHandler 구현을 테스..
참고: - http://aljjabaegi.tistory.com/387- https://jeong-pro.tistory.com/148- https://huelet.tistory.com/entry/JVM-%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B5%AC%EC%A1%B0- https://hoonmaro.tistory.com/19 1. JAVA의 컴파일 과정(1) Java Compiler(javac 명령어 실행)에 의해 Java Source(.java 확장자)로부터 Byte Code(.class 확장자)가 생성된다. (2) JVM에 있는 Class Loader에 의해 Byte Code는 JVM내로 로드되고 실행엔진에 의해 기계어로 해석되어 메모리 상(Runtime Data Area)에 배치된다..
참고: https://www.youtube.com/watch?v=LSM9xTJsUfI - 2009년 1월 3일 Satoshi Nakamoto에 의해 시작됨- 디지털 분산형 암호화 통화- 절대적으로 안전하고 빠르고, 익명성을 보장하고, 누구나/어디서나 사용가능하고, 수수료 없고, 지불거절 불가능- 중앙기관 없음- 마이닝: 네트워크를 구동하고 보호하며 거래를 확인하는 특수 컴퓨터를 보유한 다수의 사람들에 의해 구동됨 - 금처럼 희소성을 가짐- 10분마다 비트코인 생산됨
1. AWS EC2 인스턴스 생성 ㄴ"Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type - ami-0cd3dfa4e37921605" 2. putty를 이용하여 접속 3. 관리자 권한 얻기$ sudo su 4. mysql 설치 ㄴ참고: http://blog.freezner.com/archives/1227 ㄴ참고: http://love0and0hate.blogspot.com/2017/02/mysql-yum.html $ sudo yum -y install mysql-server mysql 5. nginx, php-fpm 설치 및 연동 ㄴ설치 참고: http://blog.freezner.com/archives/1227 ㄴ연동 참고: https://opentutorials...