반응형

npm 업데이트

npm install -g npm


npm 으로 설치한 글로벌 패키지 목록

npm list -g --depth=0


npm 으로 설치한 글로벌 패키지 업데이트

npm update -g


npm 으로 설치한 글로벌 패키지 삭제

npm uninstall -g [패키지명]


npm 최신 버전으로 업데이트

npm install -g npm


추후에.. 또 필요한게 있으면 추가 해야겠다...

728x90
반응형
반응형

테스트 케이스를 작성하다가 좀 헷갈리는게 있었다. @Mock, @MockBean 차이가 뭐지??? 쓰긴 하고 있는데 알고 써야 하지 않을까라는 의문이 들었다. 그래서 찾아봤다.

 

먼저 Mock 객체를 선언할 때에는 2가지 방법이 있다.

 

1. 첫번째 : mock() 을 이용해서 선언

 

1
2
3
4
5
6
7
8
9
10
11
12
@RunWith(MockitoJUnitRunner.class)
public class UserServiceTest {
 
    @InjectMocks
    private UserService userService;
    UserRepository userRepository = mock(UserRepository.class);
 
    @Test
    public void findByEmail_test(){
        when(userRepository.findByEmail("test@test.com")).thenReturn(Optional.of(new User()));
        userService.findByEmail("test@test.com");
        verify(userRepository).findByEmail("test@test.com");
    }
}
cs

 

2. 두번째 : @Mock 을 이용해서 선언

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@RunWith(MockitoJUnitRunner.class)
public class UserServiceTest {
 
    @InjectMocks
    private UserService userService;
 
    @Mock
    private UserRepository userRepository;
 
    @Test
    public void findByEmail_test(){
        when(userRepository.findByEmail("test@test.com")).thenReturn(Optional.of(new User()));
        userService.findByEmail("test@test.com");
 
        verify(userRepository).findByEmail("test@test.com");
    }
}
cs

 

이 2개의 테스트 케이스는 동일하게 동작한다. 

 

그리고 선언한 Mock 객체를 테스트를 실행하는 동안 사용할수 있게 하기 위한 작업이 있다. 바로 위에서 보이는 @RunWith(MockitoJUnitRunner.class) 가 바로 그 역할을 해준다.  또다른 방법으로는 아래와 같은 메소드를 테스트케이스 실행 전에 실행 시키면 된다. 

 

 

1
2
3
4
@Before 
public void initMocks() {
    MockitoAnnotations.initMocks(this);
}
cs

 

여태껏 아무생각없이 둘다 @RunWith랑 initMocks랑 둘다 썼는데 둘다 쓸 필요가 없었다. ㅡㅡ;

 

그럼 @MockBean 은 뭐지??

 

@MockBean 은 Mock 과는 달리 org.springframework.boot.test.mock.mockito 패키지 하위에 존재한다. 즉 spring-boot-test에서 제공하는 어노테이션이다. Mockito 의 Mock 객체들을 Spring의 ApplicationContext에 넣어준다. 그리고 동일한 타입의 Bean  이 존재할 경우 MockBean으로 교체해준다.

 

그럼 언제 @Mock을 쓰고 언제 @MockBean 을 써야 하나??

 

결론적으로 Spring Boot Container가 필요하고 Bean이 container 에 존재 해야 한다면 @MockBean 을 쓰면 되고 아니라면 @Mock 을 쓰면 된다. 그런데 개인적으로는 그걸 잘 판단을 못하겠다.

 

1. MockitoJUnitRunner 를 이용해서 Mock을 사용한 Testcase.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@RunWith(MockitoJUnitRunner.class)
public class RegisterControllerMockTest {
 
    @InjectMocks
    private RegisterController registerController;
 
    private ModelAndView model;
 
    @Before
    public void setup(){
        model = new ModelAndView();
    }
 
    @Test
    public void showRegistrationPage_test() throws Exception {
 
        registerController.showRegistrationPage(model, new User());
        Assert.assertEquals("register", model.getViewName());
    }
}
 
cs

 

2. SpringRunner와 @WebMvcTest를 사용해서 @MockBean 을 사용한 Testcase

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@RunWith(SpringRunner.class)
@WebMvcTest(value = RegisterController.class, secure = false)
public class RegisterControllerTest {
 
    @Autowired
    private MockMvc mockMvc;
 
    @MockBean
    private UserService userService;
 
    @MockBean
    private EmailService emailService;
 
    @Test
    public void showRegistrationPage_test() throws Exception {
 
        mockMvc.perform(MockMvcRequestBuilders.get("/register"))
                .andExpect(status().isOk())
                .andExpect(view().name("register"))
                .andDo(print());
    }
}
cs

분명 이 2개의 테스트 케이스 는 결과는 같지만 실제 내부에서 동작하는 부분은 다르다. 2번만 spring applicaiton context 가 올라간다. 그래서 부득이하게 @MockBean 으로 UserService 와 EmailService를 넣어줘야 했다. 1번은 Controller 객체에 대해서 Mock 을 만들어서 그거에 대해서만 테스트를 한다.(뭐라고 표현을 해야할지 잘 모르겠다.)

 

이렇게 같은 컨트롤러에 대한 테스트 이지만 작성하기에 따라서 여러가지 방법으로 테스트 케이스를 만들 수 있다. 아직은 미숙하지만 좀더 많이 작성하다 보면 방법도 많이 알게 되고 실제 구현 코드들의 모습도 많이 나아질거라는 생각이 든다.

 

참고 : https://stackoverflow.com/questions/44200720/difference-between-mock-mockbean-and-mockito-mock

728x90
반응형
반응형


나는 리뷰어다 를 통해서 이번에는 2권의 책을 받게 되었다. 나는 리뷰어다 에서 책을 선택할때 3권을 선택하게 되어있는데 보통 나는 2권은 내 일이나 전공 관련 책을 선택하고 1권은 인문이나 어린이관련 책을 선택한다. 특히 어린이 최근에 나온 어린이 관련 책이 그림그리기, 색칠하기, 오려붙이기등 지후하고 같이 하기 좋은 책들이어서 받을때마다 매우 만족스럽다. 책이 커서 마치 스케치북 같은 느낌이 든다.


2017/11/22 - [Enjoy Life/책을 읽자!!] - [책 읽는 프로그래머] 아주 큰 스케치북 오리기~



우선 그림그리기를 살펴보면 2페이지에 걸쳐서 내용이 써있다. 우선 1~4번까지 순서에 따라서 그림을 그릴 수 있도록 안내가 있다. 물론 지후에게 알려줬지만 잘 되지는 않았다. ^^ 그래도 맨날 자동차만 그리는 지후에게 좀더 다양한 내용의 그림을 그려볼수 있게 할수 있어서 좋다. 내가 우측 페이지를 넣은것은 페이지 수를 알려주기 위해서다. 총 63페이지로 내용도 넉넉하다. 



이번에는 색칠하기 이다. 왼쪽 그림에서 코끼리 귀와 오른쪽 그림에서 꽃의 빨간 부분, 꽃잎 등을 색칠한 모습이다. 큰 글씨로 "코끼리", "꽃' 이라고 써있고 무슨 색이라고 색칠하라고 적혀있다. 그래서 최근 한글 공부를 하고 있는 지후에게 1석 2조의 효과를 볼수 있었다. 글씨가 많지 않아서 부담도 적고 색칠을 하면서 글씨도 읽어볼수 있다.




색칠하기 책도 63페이지로 되어있다. 우연찮게 페이지수가 같은 건지 아니면 페이지수를 고정한건지는 모르겠지만 그림그리기와 마찮가지로 넉넉한 양이다. 하루에 한장씩 부담없이 아이와 함께 해볼 수 있는 좋은 구성이다. 색칠 하는데에도 많이 걸려야 20분 정도여서 딱 적당한것 같다.


728x90
반응형
반응형

Docker 도큐먼트를 따라하다 보니 갑자기 에러가 난다. 분명 난 똑같이 붙여넣기 하고 그대로 한것 같은데..


https://docs.docker.com/get-started/part2/#build-the-app


unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/ubuntu/study_docker/Dockerfile: no such file or directory


대체 왜나는 거지??? 분명 해석을 해보면 Dockerfile 이 저 위치에 없다는 이야기 인데...

있는데 분명히.... 뭐~~~가 잘못된거지???


헉!!! DockerFile........ 파일 이름이 Dockerfile 이 아닌 DockerFile 로 해놨다..

그래서 변경했더니 잘만 된다...


docker build

Estimated reading time: 21 minutes

Description

Build an image from a Dockerfile

(출처 : https://docs.docker.com/engine/reference/commandline/build/)


딱 저기에도 Dockerfile을 build한다고 써있다.



728x90
반응형
반응형

최근 백기선님이 하시는 방송을 보면서 Docker를 따라 해보려고 하니 내가 가지고 있는 Mac 에는 한계가 있었다. 설치를 하려고 하니 설치가 안 된다고 한다..

2010년 mid 맥북 프로인데.. 그래서 어쩔수 없이 Docker는 AWS에 올려놓은 Ubuntu 에 설치하고 따라하기 시작했다.

그런데 다시 문제가 발생했다. 내가 로컬에서 작성한 파일을 EC2 서버에 올려야 하는데 어떻게 해야 하는거지????

그래서 찾기 시작했다. 


일단 작동중인 Ubuntu 서버에 FTP 설정이 필요했다.


1. Ubuntu 서버에  vsftpd 를 설치한다. 


먼저 apt-get 을 업데이트 한다.

sudo apt-get update
cs

그리고 vsftpd를 설치한다. vsftpd(Very Secured FTPD) : 우분투에서 기본적으로 제공되는 FTP 서버이다.

sudo apt-get install vsftpd
cs

설치가 완료되면 /etc/vsftpd.conf 파일에서 몇가지 설정을 변경해줘야 한다.


아래 설정에 대한 주석 해제

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd.chroot_list


위에 설정에서 chroot_list_file에 지정되어있는 파일을 만들어서 root를 추가해준다.

sudo vi /etc/vsftpd.chroot_list
cs

root 추가

sudo systemctl restart vsftpd
cs

그리고 vsftpd 를 재시작 해줘야 한다. 이렇게 하면 일단 Ubuntu 서버는 준비가 됐다.


2. 보안 그룹에 20 번 포트 등록

이제 FTP 서버에 접속할 수 있도록 보안그룹에 설정을 해줘야 한다.



이렇게 하면 끝


3. FileZilla로 접속해보자!!



이렇게 하면 접속이 완료된다.!!!

 Docker 한번 해보려다가 많은것을 배운다..


728x90
반응형
반응형

오랜만에 다시 꺼내둔 나의 레고. 이번에는 폭스바겐 비틀을 조립하기로 했다. 가지고 있는 자동차는 캠퍼밴, 미니쿠퍼, 비틀 이렇게 3대가 있는데 그중 와이프의 추천으로 조립하기 시작했다. 

 

생각보다 스티커가 많았다. 처음에는 스티커가 왜이렇게 많지? 라는 의문이 들었다. 그런데 나중에 알고 보니 저렇게 영어로 써있는 것들은 전부 번호판이었다. 번호판이 하나가 아니라 여러개로 교체할 수 있었다.

사진은 없지만 봉투 번호는 총 3번까지 있으며 한번에 조립하지는 않고 각 번호별로 시간 텀을 두고 조립했다. 

1번 봉지를 조립한 모습이다. 전에 사다리 소방차나 팽귄맨의 아틱롤러를 조립할때는 못느꼈었는데 이번에 조립한 비틀은 크기가 상당히 크다는 것을 느꼈다. 


2017/12/25 - [Enjoy Life/Lego] - [60107] 레고 사다리 소방차

2017/10/12 - [Enjoy Life/Lego] - [70911]레고 펭귄맨의 아틱롤러


차 겉에 뿐만아니라 이렇게 내부도 세심하게 신경을 썼다.

2번 봉지를 조립하니 어느정도 차의 전체적인 프레임들은 완성이 되었다. 바퀴 휠이며 보닛 내부도 표현되어있다. 왼쪽 사진에 보면 동그랗게 폭스바겐 마크도 볼수 있다. 

운전석의 모습이다. 계기판과 운전대, 잘은 안보이지만 기어 변속기도 있다. 그리고 의자는 앞뒤로 접을수 있도록 되어있다. 

3번 봉지까지 완성한 모습이다. 사진을 위해서 우선 위에 상판을 받기 전에 찍었다. 당연히 자동차이기 때문에 기본적으로 열려야 할곳들은 다 오픈이 가능하다. 양쪽문, 앞에 보닛, 뒤에 트렁크(?). 그리고 스페어 타이어도 앞부분에 들어가 있다. 

뒷 트렁크(?) 도 오픈이 가능하다.

처음에는 부품에 전화같이 생긴게 있어서 어디에 쓰는건지 궁금했었는데 문 손잡이였다.

문을 닫고 찍은 모습이다. 지붕위에는 서핑보드를 올릴수 있는 장치가 되어있다. 

이렇게 자동차 천장에 서빙보드를 올리고 아이스박스와 함께 놓으면 완성이된다. 아이스박스에는 캔과 맥주병이 들어있다.

아까 위에서 말했듯이 노란색 번호판 이외에도 이렇게 3가지 종류의 번호판이 더 들어있다.

완성된 모습이다. 흔히 볼수 없는 자동차 색깔이어서 그런지 더 멋스럽고 지붕에 있는 서핑보드와 잘 어울린다. 조만간 미니쿠퍼랑 캠퍼벤을 다 조립한다음 3대를 나란히 놓으면 정말 멋질것 같다. 



728x90
반응형
반응형

https://spring.io/guides/tutorials/spring-boot-oauth2/


위 사이트에 가면 Spring boot 를 이용해서 Oauth를 이용해서 Login 을 할 수 있는 샘플을 만들어볼 수 있다. 그래서 나도 해봤는데.. 그게 삽질의 시작이었다...

Tutorial 자체는 그렇게 어렵지 않게 따라 할 수 있다. 따라하기가 어렵다면 Git에서 소스를 내려 받아서 해볼 수도 있다.


이제 이 Tutorial 을 진행하기 위해서 Facebook Developer 사이트에서 앱을 등록을 해야 한다. 그래야 Client Id 하고 Client  Secret을 받을 수 있다.


https://developers.facebook.com


위 사이트에 들어 가면 본인의 Facebook 계정으로 앱을 등록할 수 있다.


위 화면에서와 같이 앱ID 와 앱 시크릿 코드 를 받을 수 있는데 이게 바로 Client Id 와 Client Secret으로 사용된다.

그리고 redirect URI를 등록하면 준비는 끝난다. (끝난건줄 알았다...)


이제 샘플을 실행 시켜봤다.


로그인 까지 멀쩡하게 됐는데 error가 딱 나온다.


아니 왜????? 대체 왜 에러가 나오는 거지??? 분명 할것 다 한것 같은데..



로그를 보니 분명 access_token 까지는 잘 가져 왔다. 그런데 https://graph.facebook.com/me 라는 url을 호출 할때 400 error 가 났다. Http request 400 Error 는 그냥 Bad Request(요청이 잘못됐다)라는 의미는 아니다.


400(잘못된 요청): 서버가 요청의 구문을 인식하지 못했다

(출처 : https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C#4xx_(%EC%9A%94%EC%B2%AD_%EC%98%A4%EB%A5%98)


한마디로 요청을 하는 syntax 가 뭔가 잘못됐다는 의미이다.


똑같은 요청을 Postman 으로 보내봤다.


리턴된 메세지에 appsecret_proof argument가 있어야 된다고 나온다.. 이게 뭐지??? client_secret 말고 뭐가 또있나???

appsecret_proof로 그래프 API 호출 인증

그래프 API는 클라이언트 또는 클라이언트를 대신하여 서버에서 호출할 수 있습니다. 서버의 호출은 appsecret_proof라고 하는 매개변수를 추가하여 앱의 보안을 개선할 수 있습니다.

액세스 토큰은 이동 가능합니다. 클라이언트에서 Facebook의 SDK에 의해 생성된 액세스 토큰을 취하여 서버에 보낸 다음, 해당 서버에서 클라이언트를 대신하여 호출할 수 있습니다. 사용자 컴퓨터의 악성 소프트웨어 또는 메시지 가로채기(man in the middle) 공격에서 액세스 토큰을 훔칠 수도 있습니다. 그런 다음 클라이언트나 서버가 아닌 완전히 다른 시스템에서 이 액세스 토큰을 사용하여 스팸을 생성하고 데이터를 훔칠 수 있습니다.

서버의 모든 API 호출에 appsecret_proof 매개변수를 추가하고 모든 호출에 대해 인증서를 요청하도록 설정하여 이를 방지할 수 있습니다. 이렇게 하면 악의적인 개발자가 자신의 서버에서 다른 개발자의 액세스 토큰으로 API를 호출할 수 없게 됩니다. Facebook PHP SDK를 사용하고 있다면 appsecret_proof 매개변수는 자동으로 추가되어 있습니다.

(출처 : https://developers.facebook.com/docs/graph-api/securing-requests?locale=ko_KR)


그런 이유로 access_token 이외에 appsecret_proof를 같이 보내야 한다는 거다.



그런데 이런 설명도 있다. 그래서 저기 보이는  Require App Secret(앱시크릿 코드요청) 에 대한 설정을 안하면 appsecret_proof를 추가하지 않아도 된다는 이야기이다. 그래서 저 설정을 No로 설정하면 된다.


이렇게 해서 Facebook 로그인에 대한 샘플이 제대로 작동하는 것을 확인 할 수 있었다. 

간단하게 끝날줄 알았느데 설정 하나 때문에 온갖 고생을 했다. 


728x90
반응형
반응형


내가 처음 파이썬을 접한것은 Python for Data Analysys 란 책이었다. 그런데 이 책이 좋긴 한데 Data 분석에 대한 내용을 주로 한것이어서 이해하기가 좀 어려웠다. 어렵다기 보다는 좀 딱딱했다. 그러다 보니 어느순간 책을 덮게 되었다. O'REILLY 에서 나온 책들이 좋긴 한데 개인적으로 마음에 안드는 부분이 있는데 책이 너무 딱딱하게 써있다는 것이다. 그에 비해서 이 책은 색깔도 알록달록 하고 그림도 친근감이 있어서 맘에 든다. 트렌드이긴 한것 같지만 컴퓨터 전문 서적(특히 프로그래밍 관련 서적)이 이런 형태로 디자인 되어서 나온다는것은 개인적으로 좋다고 생각한다. 



이 책은 이렇게 네이버 카페(http://cafe.naver.com/codinghello)와 저자 블로그(https://rintiantta.blog.me/) 가 있어서 공부하다가 궁금한 점이 있으면 언제든지 질문을 통해 답변을 받을 수 있다. 그리고 소스코드도 다운로드 받을수 있으며 유투브 동영상 강의도 있다. 저자인 윤인성 님의 유투브 채널 (https://www.youtube.com/channel/UCJM7NRGBP9l5xOXU4XEU6UA) 을 가면 이책에 나온 챕터별 동영상 강의가 꾸준히 업데이트 되고 있다. 책으로 공부하고 지하철 타고 이동하면서 복습을 하거나 예습을 할 수 있다. 


내용을 보면 쉬운 내용은 쉽게, 어려운 내용도 쉽게 자세히 설명을 해주고 있다. 아무래도 코드를 설명하다 보면 라인 별로 설명을 해야될 경우가 있는데 이렇게 코드 자체에 주석과 함게 강조 처리를 해서 설명을 해줘서 프로그래밍을 처음 접하는 사람들도 이해하는데에 많은 도움이 된다.


이 책은 난이도로 봤을때 그렇게 어려운 책이 아니다. 파이썬 기초를 연습하는데 충실한 책이다. 다른 응용을 위해서는 파이썬 관련 다른 책들이 필요하겠지만 처음 파이썬을 접하는 사람에게는 많은 도움이 될거라 생각이 된다.


728x90
반응형
반응형


레고 크리에이터 힘센 공룡은 3 IN 1 이다. 즉 하나의 제품으로 3가지를 만들수 있다는 이야기 이다. 기존에 티라노사우르스 같이 생긴 공룡을 만들어서 올렸었는데 이번에는 오랜만에 익룡 버전으로 바꿔서 만들어 봤다. 티라노 사우르스 버전은 아래 글에서 확인 할 수있다.


2017/02/11 - [Enjoy Life/Lego] - [31058]레고 크리에이터 힘센 공룡



익룡 버전은 기존에 만들었던 티라노사우르스 버전보다 브릭 개수가 더 적은것 같았다. 하지만 브릭이 적게 들어가더라도 허접하지 않다는게 큰 매력이다.  익룡의 발톱이며 날개도 섬세하게 잘 표현되어있다.



완성된 모습이다. 날개를 펼칠수도 있고 오른쪽 사진 처럼 여러 방향으로 날개의 모양을 컨트롤 할 수 있다.



이렇게 서있는 모습도 가능하다.



얼굴을 자세히 보면 티라노 보다는 순진하게 생겼다. 티라노는 이빨이 있어서 좀더 임펙트가 있었는데 익룡은 좀 귀여워 보인다.




728x90
반응형

+ Recent posts