[F-lab 모각코 챌린지 65일차] TIL

JeongheeKim·2023년 8월 4일

TIL

목록 보기
65/66

학습계획


  • 트랜잭션 ACID
  • 토비의스프링 6장
  • 혼공 운영체제 1장 복습

Today I Learned


  • ACID
  • 트랜잭션이 안전하게 수행된다는것을 보장하는 성질
    • Atomicity(원자성)
      • 트랜잭션의 논리적 작업 단위가 실행되다가 중단되지 않는 것을 보장하는 성질
    • Consistency(일관성)
      • 트랜잭션이 성공적으로 일어나면 언제나 일관성있는 DB상태를 유지하는 것
        • 일관성이 있다는것은 제약조건이 맞는것
    • Isolation(독립성)
      • 트랜잭션 수행 시 다른 트랜잭션 작업이 끼어들지 못하게 하는것
    • 지속성(Durability)
      • 성공적으로 반영된 트랜잭션은 영원히 반영되어야한다.

혼공운영체제 1장 복습

  • 컴퓨터가 이해하는 정보는 데이터와 명령어이다.
  • 메모리 : 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품
  • CPU : 메모리에 저장된 명령어를 읽어들이고, 해석, 실행하는 부품
  • 보조기억장치 : 전원이 꺼져도 보관할 프로그램 저장
  • 시스템 버스 : 컴퓨터의 네가지 핵심 부품들이 서로 정보를 주고받는 통로

프로세스가 CPU를 선점했는데, 다른 프로세스가 요청 들어온 상황

  • 선점형 : 이미 사용하고 있는 프로세스가 있더라도, 운영체제가 강제로 작업중인 프로세스로 부터 자원을 빼앗아 다른 프로세스에게 할당
  • 비선점 : 이미 선점한 프로세스가 종료되거나 스스로 대기상태 들어갈때까지 대기

토비의 스프링 6장

  • 외부 리소스를 사용해야하는 테스트는 통합테스트로 작성한다.
  • Mokito 프레임워크
    • mock객체(UserDao mockUserDao = mock(UserDao.class))는 아무런 기능이 없다.
    • 테스트 할 기능을 동작하도록 stub기능을 추가한다.
      when(mockUserDao.getAll()).thenReturn(this.users);
      //mockUserDao.getAll()이 호출되었을때, user의 리스트를 리턴해라
  • 프록시의 사용 목적
    1. 클라이언트의 타깃에 대한 접근 제어
    2. 타깃에 부가적인 기능을 부여하기 위해
  • 데코레이터 패턴
    • 타깃에 부가적인 기능을 런타임 시 다이나믹하게 부여해주기 위해 프록시를 사용하는 패턴
    • 프록시로서 동작하는 각 데코레이터는 위임하는 대상에도 인터페이스로 접근하므로 어디에 위임하는지 알지 못한다. 데코레이터의 다음 위임대상은 인터페이스로 선언하고 생성자나 수정자 메소드를 통해 위임대상을 런타임 시 주입받는다.
  • 프록시를 통해 타깃에 부가기능을 제공하는 것은 메소드 단위로 일어난다.
  • 다이나믹 프록시를 위한 팩토리 빈
    • 다이나믹 프록시는 스태틱팩토리로 생성되어 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/

0개의 댓글