반응형

드디어 에일로이가 증명의 의식을 참가하게 된다. 


증명의 의식은 2가지의 퀘스트로 진행되는데 하나는 "버려진 용사의 길 달리기" 이다. 증명의 의식 자체가 이 용사의 길의 끝을 누가 빨리 도착하느냐에 따라서 우승자가 가려진다. 그렇기 때문에 다른 참가자들보다 빨리 이 길을 통과해야 한다. 모든 조작이 사용자에게 맞겨지는것은 아니기 때문에 천천히 가도 되는것같다. 가는 길을 좀 헷갈려서 몇번 떨어져 죽긴 했지만 그래도 무사히 도착할수 있었다. 



다른 참가자들이 날고 기고 한다고 하더라도 역시 우승은 에일로이이다. 하지만 기쁨을 누리는것도 잠시뿐이었다. 갑자기 화살이 날아오고 주변에 같이 있던 참가자들은 다 죽고 만다. 그리고 바로 "공격자사살하기" 퀘스트로 이어진다. 



공격자 사살하기 퀘스트는 날아오는 화살을 피하면서 진행을 해야한다. 숲풀에 숨어서 옆으로 돌아가서 쳐도 되지만. 일단 숨어서 기다리다 보면 적 2명이 다가오는데 이 2명을 죽이고 나면 데스브링어건을 얻을수 있다. 그런데 생각보다 적 2명이 쎄다. 그냥 설렁설렁 대충 하면 바로 죽는다. 현재 에일로이보다 전투력과 방어력이 높은것 같다. 어쨌든 데스브링어건을 얻긴 하는데 이게 무거워서 이동하는데 정말 극악이다. 들고 움직이다가 포탄 맞아서 몇번 죽기도 했다. 조준도 힘들어서 그냥 당겼더니 어느새 총알이 다 떨어져버렸다. 그래서 역시 옆길로 돌아가서 적들을 다 해치우지만 방심하다가 적에게 잡힌다. 

그런데 어디선가 나타난 로스트가 적과 싸우지만 역부족이었다. 로스트와 에일로이 근처에 설치된 폭탄을 보고 로스트는 에일로이를 살리기 위해 낭떠러지로 밀고 자신은 죽는다. 이렇게 증명의 의식 퀘스트는 마무리 된다.



728x90
반응형
반응형


회사에서 Spring boot를 사용하기 시작한지는 한 1~2년 정도 된것 같다. 쓴다기 보다는 Spring 사이트에 있는 소스들을 가져다 붙이는 수준이었다. 체계적으로 공부해본적은 없고 눈앞에 닥치면 찾아서 하다보니 부족한 점이 많이 느껴졌다. 이번에 받은 이 "실전 스프링 부트 워크북"은 그런 부족한 점을 채워줄수 있는 좋은 가이드가 되었다. 


Chapter 1에서 부터 4까지는 Spring Boot를 실습하기 위한 준비 단계정도로 볼수 있다. 기본적인 이론과 설명들, 프로젝트 구성에 대해서 소개를 해주고 있다. 그리고 Chapter 5부터 본격적으로 Spring Boot를 가지고 Web 어플리케이션을 만들기 시작한다. 



특히 Chapter 6 을 보면 Spring Boot Test 에 대해서 설명을 하고 있는데 책을 읽을 당시 회사에서 Spring Boot Test에 대한 내용을 한참 구글링 하던 시기였다. 내가 개발중인 코드에 대한 Controller Test case를 어떻게 작성을 해야 하나 고민을 하던 중이었는데 책의 내용들이 내게 많은 도움이 되었다. 아마도 이 책이 없었으면 코드가 뭐가 뭔지도 모를 코드들을 가져다가 썼을것이다. 




그리고 이 책의 좋은 점이 실제 작성된 코드에 대해서 중요한 부분에 대한 설명들이 많이 있다는 점이다. 다른 Spring 관련 책들도 소스 코드에 대한 설명들이 있기는 하지만 너무 추상적이거나 어렵게 설명한 책들이 많다. 하지만 이책에서는 적어도 내 기준에는 각각의 소스 코드에 대한 설명들이 이해하기가 쉬웠다. 그리고 개발관련 서적의 딱딱함이 덜 하다는 느낌이 들었다. 


기본적인 Spring Boot 에 대한 설명부터 시작해서 security, 메세징등 기본적으로 알아야 할 기능들은 잘 설명해 놓은 책이다. 물론 이거 한권으로 Spring Boot에 대한 모든 기능을 마스터 할수는 없지만 기본기를 다지기에는 아주 좋은 책이라고 생각이 든다. 단지 아쉬운 점은 이 책에도 중간중간 언급이 되어있지만 지금 사용하고 있는 Spring Boot 최신 버전과는 약간 차이가 있을 수 있다는 점이다. 책에서는 1.3.3 Release 버전을 사용하고 있는데 현재 Spring Boot 최신 버전을 1.4를 넘어 1.5, 2.0을 바라보고 있다. 이부분에 대한 것만 제외 한다면 Spring Boot에 관심 있는 분들에게 한번쯤 읽어보라고 추천해주고 싶다. 


728x90
반응형
반응형
AWS 에 가상서버를 하나 만들면 이 서버를 시작하고 정지 할 때마다 공인 IP 주소가 변경된다. 그래서 AWS 는 Elastic IP 라는 고정 공인 IP 주소를 할당해 주는 서비스를 제공해주고 있다. 


EC2 서비스에 보면 왼쪽에 Elastic IPs 라는 메뉴가 보인다. 



메뉴에 들어가보면 위와 같은 화면이 나온다. Allocate new address를 클릭하면 아래와 같이 Elastic IP가 할당된다.



IP가 할당되었으니 이제 가상서버하고 연결을 해주면 된다.





Actions 메뉴에 있는 Associate address를 선택한다. 




Instance 항목에 가상 서버의 인스턴스 ID를 입력하면 된다. 콤보박스로 선택하게 되어있다. 



그러면 이렇게 연결이 완료된다. 


가상 서버 만드는 것만큼이나 아주 간단하고 쉽다. 



728x90
반응형

'Development > AWS' 카테고리의 다른 글

네트워크 관련 내용들  (0) 2023.01.13
[AWS] EC2 Ubuntu 서버에 FTP 서버 설정  (0) 2018.04.01
[AWS]AWS 에 가상서버 만들기  (0) 2017.06.17
반응형

기존에 사용하고 있던 넷북을 서버로 켜놓을까 하다가 항상 켜놓을 수 없고 매일 사용할때마다 코드 꼽고 하는 작업이 번거로웠다. 그리고 SSH로 접속을 해보았는데 좀 느려서 써먹기는 좀 힘들어 보였다. 그래서 AWS 에 가상 서버를 한번 만들어서 써보자는 생각이 들었다. 어차피 프리티어 기간에는 어느정도 수준 까지는 공짜로 사용할수 있으니 딱 좋았다. 그리고 예전에 AWS 세미나 갔을때 받았던 크래딧도 있어서 이 기회에서 써봐야 겠다고 마음먹었다.




먼저 아마존 Console Home 에서 EC2 를 클릭하고 나오는 화면에서 Create Instance 밑에 있는 Launch Instance 를 클릭한다. 



여기에서는 AWS 에서 만들 가상 서버 종류를 선택할 수 있다. 서버 아래에 보면 "Free Tier Eligible" 이라는 단어가 있는 서버가 프리티어에서 제공되는 서버인것 같다. 참고로 Virtual Appliance 는 하이퍼 바이저에서 실행할수 있는 OS와 기타 소트프웨어를 포함하는 이미지 이다. 그리고 위에 보이는 AMI(Amazon Machine Image)는 EC2 서비스를 사용하기 위핸 Virtual Appliance 다.



Instance Type은 가상 서버의 크기를 결정하는 것이다. 여기도 역시 "Free Tier Eligible" 이라고 써있는것을 선택한다.



따로 설정을 변경할 일이 없기 때문에 모든 설정은 Default 로 되어있는것으로 하고 바로 Next를 누른다.



가상 서버에 저장장치를 추가하는 화면이다. 역시 Default로 하고 Next를 누른다.


   


여기는 태그를 추가하는 화면이다. 키-값의 쌍으로 이루어져 있다. 적당한 값을 넣고 Next를 누른다.





방화벽은 SSH로 접근을 허용할 수 있도록 기본 구성을 하고 "Review and Launch"를 클릭한다.



지금까지 설정사항을 보여준다. Launch를 클릭한다.



가상 서버의 키를 선택하는 화면이다. 나는 미리 키를 만들어둬서 기존에 만들어놨던 키를 선택했다. 만약 만들지 않았다면 EC2 서비스 화면에서 "Key Paris" 메뉴를 선택해서 만들면된다. 가상 서버를 로그인 하려면 키가 필요하며 이 키는 비밀번호를 대신해서 사용한다. "Launch Instances"를 클릭하면 모든게 마무리 된다. 



잘 동작 하는지 확인해보려면 맨 처음 보았던 화면(EC2서비스 화면) 에서 Instances를 클릭하면 현재 서버가 어떤 상태인지 확인 할 수 있다.

지금 글로 적기는 했지만 실제로 해보면 정말 간단하다. 윈도우 설치보다도 더 간단하다. 클릭클릭 몇번만 하면 내가 사용할 수 있는 서버가 짠~ 하고 만들어진다. 아직 모르는게 많지만 앞으로 써보면서 많이 배워야겠다.


728x90
반응형
반응형

테스트케이스를 만들어서 작업을 하면 소스코드가 수정될 경우 코드를 테스트 해보기가 참 수월하다. 그런데 이 테스트 케이스 작성하는게 생각보다 만만치는 않다. 

실제 DB 를 읽어서 테스트를 해야 하는지. 아니면 Mock 객체를 정의를 해서 사용을 해야 하는지. 실제 DB 를 사용할 경우 저장된 data 가 변경이 되어서 구현했을 당시 테스트 케이스는 Pass였지만 나중에 빌드 시점에 테스트 케이스가 실행될 경우에 Fail 이 나면 어떻게 할것인지. 

생각해보면 그냥 서비스 구현해서 화면 띄우고 버튼 눌러서 테스트 하는것이 더 편할지도 모른다는 생각이 들기도 한다. 

작성할 때마나 서비스 테스트,  repository테스트, 컨트롤러 테스트에 대해서 구글링 하면서 작성을 하다보니 뭔가 남는게 없는것 같아서 샘플을 한번 만들어보기로 했다. 

 

최근에 필요하기도 했고 나중에 또 써먹을 일도 있을것 같아서 Controller 테스트 케이스를 작성한 것을 공유해 본다.

 

각각의 구성은 아래와 같이 되어있다. 

(java : 1.8, SpringBoot : 1.5.3)

 

Book.java

@Entity
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long bookId;

    private String title;

    // Getter & Setter 생략
}

 

BookRepository.java

public interface BookRepository extends JpaRepository<Book, Long>{}

BookService.java

public interface BookService {
    Book getBook(Long id);
}
 

BookServiceImpl.java

@Service
public class BookServiceImpl implements BookService {

    @Autowired
    private BookRepository bookRepository;

    @Override
    public Book getBook(Long id) {
        return bookRepository.findOne(id);
    }
}
 

BookController.java

@RestController
public class BookController {

    @Autowired
    private BookService bookService;

    @RequestMapping(value = "/book/{bookId}", method = RequestMethod.GET, produces = "application/json")
    public Book getBook(@PathVariable Long bookId){
        return bookService.getBook(bookId);
    }
}

/book/{bookId} 라는 url 로 request 를 보내면 bookId 에 맞는 Book 객체를 리턴해주면 되는 형태이다. 테스트 케이스 없이 테스트 하려면 톰캣으로 띄워놓고 실제로 화면에서 위에 정의한 서비스를 호출하는 컴포넌트를 클릭해서 정상 동작을 하는지 확인해봐야한다. 그러다가 소스에 글자라도 하나 틀리면 수정한다음에 다시 톰캣 재기동을 하는 번거로운 작업을 진행해야 한다. 

 

 

 

 

 

 

 

 

 

 

이런 번거로움을 피하기 위해 테스트 케이스를 작성해 보았다.

@RunWith(SpringRunner.class)
@SpringBootTest
public class BookControllerTest {

    private MockMvc mockMvc;

    @MockBean
    BookController bookController;

    @Before
    public void setup(){
        mockMvc = MockMvcBuilders.standaloneSetup(bookController).build();
    }


    @Test
    public void getBookTest() throws Exception {
        given(this.bookController.getBook(new Long(1)))
                .willReturn(new Book("Homes"));

        mockMvc.perform(get("/book/{bookId}", 1))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$['title']", containsString("Homes")))
                .andDo(print());
    }
}

BookController를  MockBean으로 정의를 해주었다. 그리고 BookController 의 getBook메소드에 파라메터가 1이 들어왔을 때 리턴 받는 결과를 미리 정의한다. (18~19 라인) 그리고 화면에서 요청하는 것처럼 Request를 수행해준다.  perform에 있는 파라메터를 보면 get 메소드를 호출하게 되며 파라메터로 1값을 넣어서 실행을 한다. OK 응답을 받게 되고 리턴 받는객체의 title이 "Homes"  인지 비교를 한다. 19라인에서 책 이름을 미리 Homes  로 정의 했기때문에 테스트는  Pass가 된다. 마지막에 andDo(print()) 는 실제 수행된 로그가 콘솔창을 통해 볼수 있도록 처리해 준것이다.

 

처음에 만들때는 좀 삽질을 하긴 했지만 만들고 보니 앞으로 자주 써먹을것 같다. 앞으로도 바쁘지만 테스트케이스를 만들면서 코드 작성을 하도록 해야겠다.

 

참고로 위 소스를 작성한 gradle.build 파일은 아래와 같다.

dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('org.springframework.boot:spring-boot-starter-data-jpa')

    runtime('group:com.h2database:h2');

    testCompile('group:com.jayway.jsonpath:json-path')

    testCompile('org.springframework.boot:spring-boot-starter-test')
}
 

 

728x90
반응형

'Development > Java' 카테고리의 다른 글

[OAuth] Oauth의 간략한 흐름.  (0) 2017.07.04
[Spring Security]간단 Spring Security  (0) 2017.06.27
[Spring]Jasypt 를 이용한 properties 암호화  (6) 2017.04.25
[SpringCloud]Spring Config..  (0) 2016.01.26
spring Cache  (0) 2015.12.05
반응형

철권 하면 제일 먼저 생각나는것은 1:1 대전게임이지만 스토리 모드도 있다. 이야기가 진행되면서 중간중간 대전 퀘스트가 있어서 사용자가 직접 조작을 할 수 있다. 약간 RPG 성 게임모드를 둔것같다. 아무래도 맨날 1:1 만 하다보면 빨리 질리니깐 넣어놓은것 같다. 그런데 해보면 알겠지만 스토리모드가 중독성이 있다. 소설책 읽는 느낌이 들어서 계속 다음 챕터를 진행하고 싶은 충동이 생긴다. 



이야기는 프롤로그와 함께 시작된다. 한편의 소설을 써내려같은 느낌으로 이야기가 전개가 된다. 이야기를 하면서 그 이야기에 대한 실제 회상영상들이 나온다. 그리고 그 사이사이에 대전 모드가 나타난다. 





스토리모드 첫번째를 진행하고 나면 헤이하치가 정말 또라이구나 라는 생각이 절로 든다. 회사에 앉자마자 하는 일이 토너먼트 개최라니. 이시점에서 약간 갓오브 하이스쿨이 아주 스치듯이 생각이 났다. 현재 스토리모드의 난이도는 중간 모드이다. 잘해서 중간모드로 진행한것은 아니고 맨 처음 시작할 때 그냥 다음다음을 누르다 보니 중간모드로 선택이 되었다. 스토리 모드 도중에 난이도는 조절 가능한것 같다. 



챕터 제목이 불꽃의 복수인거 보면 마지막 장면에서 따온것 같다. 마지막장면에 카즈야는 도망치고 헤이하치는 폭발에 휩싸인다. 당연히 안죽었을거라 생각이 되지만. 앞으로 진행될 막장 가족의 이야기가 점점더 흥미진진해진다. 


728x90
반응형
반응형

지난번에 예약구매 했던 철권을 플레이를 해보았다. 

먼저 게임을 시작하면 인트로 동영상이 시작된다. 



내용을 보면 거의 막장드라마급이다. 내가 철권의 세계관은 자세히는 모르지만 일단 이 영상을 보면 아들이 아버지를 죽이려고 한다. 아마도 헤이하치는 아마도 좋은 아빠는 아닌듯 하다. 거의 싸움에 미친놈이니 아들이 눈에 보이기나 하겠어. 절벽에서 애를 던저버리다니 거의 막장오브 막장이다. 



게임의 시작 화면은 이렇게 생겼다. 그렇게 나쁘다 할정도는 아니지만 헤이하치만 저렇게 놓여있어서 아쉽긴 하다.

컨트롤 일개도 못하지만 사나이는 손과 발만으로도 이길수 있다는것을 보여준 한판이다. 연습모드이긴 하지만 역시 철권은 패드의 진동을 느끼면서 해야 재맛인것 같다. 



연습모드로 해봤는데 역시나 조작이 좀 어렵다. 예전에 철권2 할때는 연습모드에서 필살기 연습할수 있는 모드가 따로 있었는데 이번에도 있는지 한번 찾아봐야겠다. 패드로 하면서 느낀점은 일단 횡이동이 어렵다. 내가 조작을 잘못하고 있는건지는 모르겠는데 횡이동이 생각처럼 쉽게 안되서 분명 공간은 3차원인데 난 2차원에서 격투게임을 하고 있는 느낌이다. 철권 샀다고 조이스틱까지 지를수는 없으니 패드 조작법을 좀 찾아봐야겠다.


728x90
반응형
반응형

어머니의 심장 퀘스트는 증명의 의식이 시작되기 전에 에일로이가 마을 이곳저곳을 돌아다니면서 진행되는 퀘스트이다.

퀘스트라기에는 거의 하는것이 없고 대부분이 말을 걸어보고 대화하는게 주요 역할이다. 





에일로이에게 친구가 없을텐데라는 생각에 오랜친구가 누군가 했더니 에일로이가 어렸을때 절벽에서 떨어진 부족아이를 구하는 퀘스트(2017/05/14 - [Enjoy Life/Games] - [Horizon Zero Dawn]황야의 가르침)가 있었는데 그때 구해준 녀석이다. 이 퀘스트를 끝내면 옷을 받을 수 있다. 





마지막에는 사냥꾼의 오두막에 들어가서 쉬게 되는데 거기에서 바스트라는 녀석을 만난다. 이녀석도 에일로이가 어렸을때 에일로이한테 돌을 던졌다가 한대 맞은 녀석이다. 그때 에일로이가 돌을 맞은 다음 행동을 선택해야 했었는데 나는 돌을 던져서 손에 있던 돌을 떨어뜨린다를 선택했다. 영화나 드라마에서 꼭 이렇게 재수없는 녀석이 한명씩 나오는데 게임에서도 이렇게 나오다니. 난 분명 게임을 하고 있는데 한편의 드라마를 보고 있는것 같다. 


728x90
반응형
반응형

지난달 철권7 예약 판매가 있어서 예약구매를 했다. 보통 게임 사고 싶으면 출시 이후에 가격좀 떨어지면 사곤 했는데 이번에 같이 주는 예약 특전이 맘에 들어서 바로 예약구매를 했다. 그리고 잠시 잊고 있다가 6월 1일 출시후 바로 그날 저녁에 택배로 받았다. 


예약 특전에 포함된 것들은 철권7 타이틀과 커맨드북, 콜렉터즈카드, 프로모션 코드로 구성되어있다. 


위에 보이는 것이 커맨드 북이다. 내가 예약구매를 하게된 가장 큰 이유가 저 커맨드 북이었다. 커맨드북이 저정도 퀄리티이면 이건 예약구매 필수다라는 생각을 바로 했다. 

타이틀과 콜렉터즈 카드이다. 타이틀이야 다른 게임과 동일하고 콜렉터즈 카드야 플라스틱 카드 정도이다. 난 이것때문에 예판을 구매한게 아니니깐.



자, 바로 이거다. 커맨드북. 
거의 이건 커맨드 백과사전 수준이다. 펼쳐보기 아까울정도의 퀄리티라서 택배 받고나서 책에 쌓여있는 비닐 포장을 뜯어야되 말아야되 한순간 고민을 했다. 내가 이거 천년만년 소장할 것도 아니고 보면서 게임을 즐겨야지 라는 생각에 단숨에 겉 포장을 뜯었다. 그리고 펼쳐봤는데 내용도 알차게 들어있다. 책에는 캐릭터 컨셉아트(오른쪽 사진)와 캐릭터 커맨드(왼쪽 사진), 개발자 인터뷰로 구성되어있다. 손이 거의 폐급이라서 모든 캐릭터의 커맨드는 못외울거고 맘에 드는 캐릭터 몇개만 연습좀 해서 게임을 해봐야겠다. 

게임사고 뿌듯하기는 정말 오랜만인것 같다. 


728x90
반응형

+ Recent posts