학습계획
- 트랜잭션 ACID
- 토비의스프링 6장
- 혼공 운영체제 1장 복습
Today I Learned
- ACID
- 트랜잭션이 안전하게 수행된다는것을 보장하는 성질
- Atomicity(원자성)
- 트랜잭션의 논리적 작업 단위가 실행되다가 중단되지 않는 것을 보장하는 성질
- Consistency(일관성)
- 트랜잭션이 성공적으로 일어나면 언제나 일관성있는 DB상태를 유지하는 것
- Isolation(독립성)
- 트랜잭션 수행 시 다른 트랜잭션 작업이 끼어들지 못하게 하는것
- 지속성(Durability)
- 성공적으로 반영된 트랜잭션은 영원히 반영되어야한다.
혼공운영체제 1장 복습
- 컴퓨터가 이해하는 정보는 데이터와 명령어이다.
- 메모리 : 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품
- CPU : 메모리에 저장된 명령어를 읽어들이고, 해석, 실행하는 부품
- 보조기억장치 : 전원이 꺼져도 보관할 프로그램 저장
- 시스템 버스 : 컴퓨터의 네가지 핵심 부품들이 서로 정보를 주고받는 통로
프로세스가 CPU를 선점했는데, 다른 프로세스가 요청 들어온 상황
- 선점형 : 이미 사용하고 있는 프로세스가 있더라도, 운영체제가 강제로 작업중인 프로세스로 부터 자원을 빼앗아 다른 프로세스에게 할당
- 비선점 : 이미 선점한 프로세스가 종료되거나 스스로 대기상태 들어갈때까지 대기
토비의 스프링 6장
- 외부 리소스를 사용해야하는 테스트는 통합테스트로 작성한다.
- Mokito 프레임워크
- 프록시의 사용 목적
- 클라이언트의 타깃에 대한 접근 제어
- 타깃에 부가적인 기능을 부여하기 위해
- 데코레이터 패턴
- 타깃에 부가적인 기능을 런타임 시 다이나믹하게 부여해주기 위해 프록시를 사용하는 패턴
- 프록시로서 동작하는 각 데코레이터는 위임하는 대상에도 인터페이스로 접근하므로 어디에 위임하는지 알지 못한다. 데코레이터의 다음 위임대상은 인터페이스로 선언하고 생성자나 수정자 메소드를 통해 위임대상을 런타임 시 주입받는다.
- 프록시를 통해 타깃에 부가기능을 제공하는 것은 메소드 단위로 일어난다.
- 다이나믹 프록시를 위한 팩토리 빈
- 다이나믹 프록시는 스태틱팩토리로 생성되어 DI를 할 수 없다.
- 스프링에서 팩토리 빈을 생성하는 방법 : FactoryBean인터페이스 구현
- ProxyFactoryBean을 통해 프록시 빈을 스프링 빈 등록 가능
- 장점
- 한계
- 공통된 부가기능을 여러개의 클래스에 적용할 때 팩토리 빈의 설정이 중복
- 하나의 타깃에 여러 부가기능을 적용할때
- 스프링이 제공하는 ProxyFactoryBean
- ProxyFactoryBean이 생성하는 프록시에서 사용할 부가기능은 MethodInterceptor인터페이스를 구현해서 만드는데 InvocationHandler와 다른점은 InvocationHandler는 타깃오브젝트에 대한 정보를 제공하지 않았다. MethodInterceptor는 ProxyFactoryBean으로 부터 메서드 정보를 넘겨받는다.
import sys
N, B = map(int, sys.stdin.readline().split())
tmp = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
result = ''
while N != 0:
result += str(tmp[N % B])
N = N // B
print(''.join(reversed(result)))
문자열 뒤집기
list타입일 경우 list.reverse(), 문자열의 경우 ‘’.join(reveresed(문자열))
SQL
between 함수를 이용하여 비교 구간 설정
날짜 컬럼 between date_add('2019-07-27', interval - 29) and '2019-07-27'
select activity_date as day, count(distinct user_id) as active_users
from Activity
where (activity_date >= ('2019-07-27' - INTERVAL 29 DAY) and activity_date <= '2019-07-27')
group by activity_date
key-value engine에 버전 설정없이 저장하는 경우 가장 최신의 키값만 보존된다.
[참고]
https://ko.wikipedia.org/wiki/ACID
https://itholic.github.io/python-reverse-string/
https://circlecoder.com/user-activity-for-the-past-30-days-I/