perform~ 구현