1차 구현