리전 : aws의 모든 위치하고 있는 물리적인 장소 2021년 3월 30일 기준으로 서울에 리전이 추가되어있습니다. 실제로 서울지역에 aws가 존재하는지 확인해봅시다. AWS 아시아 태평양 (서울) 리전 정식 오픈! | Amazon Web Services 2016년 1월 7일(목) 대한한국 서울에 새로운 AWS 아시아 태평양 (서울) 리전을 오늘 공개하면서, AWS가 다시 한번 큰 확장을 시작합니다! AWS 한국 고객들은 새로운 Asia Pacific (Seoul) 리전을 통해 더 빠 aws.amazon.com aws 리전 서비스 AWS 리전 서비스 aws.amazon.com 모든 서비스가 모든 리전에서 동작하는 것은 아닙니다. 예를들어 A라는 서비스는 미국 리전에서 동작하지만 서울 리전에서는 동작하지 ..
가상화는 단일한 물리 하드웨어 시스템에서 여러 시뮬레이션 환경이나 전용 리소스를 생성할 수 있는 기술입니다. 다음과 같은 그림으로 표현할 수 있습니다. 위 그림을 비추어 보자면, 하나의 물리 하드웨어에서 8개의 조각으로 나눠져있다는 것을 확인 할 수 있습니다. 이는, 8개의 시뮬레이션 환경이나 전용 리소스라는 것을 알 수 있습니다. 가상화는 [하이퍼바이저]라는 기술을 통해 구현이 가능합니다. 하이퍼바이저는 가상화를 구동하고 생성하는 소프트웨어입니다. 하이퍼바이저란? 하이퍼바이저는 하드웨어에서 시스템의 운영 체제와 리소스를 분리해 VM에 할당하여 가상 머신을 생성하고 구동하는 소프트웨어입니다. www.redhat.com 클라우드 서비스는 가상화 기술과 연관이 있습니다. ---- 나중에 다시 보는게 좋을 것..
클라우드는 구름을 뜻합니다. 그러면 실제 구름일까요? 이것은 비유적인 표현입니다. 직접 서버를 만든다고 생각해봅시다. 그러면 장비를 구입하구... 설치하구... 시간도 시간이지만, 굉장히 어렵습니다. 이것을 만약 대신 해주는 서비스가 있으면 좋지 않을까요? 이것이 클라우드 서비스입니다. 즉, 클라우드 서비스는 외부에서 서버를 만들어서 제공해주는 서비스라고 생각하면 될 것 같습니다. 지금은 많은 클라우드 서비스가 존재합니다. 예를들면, aws, gcp, azure (아마존, 구글, 마이크로 소프트 순) 이 존재합니다. 들리는 말로는 아마존에서 서버를 운영하고 있는데... 잉여 서버가 남아서 그것을 제공해주는 서비스가 aws라고 들었습니다. 이제 우리는 이렇게 제공해주는 서버를 가지고 웹이나 소프트웨어를 운..
나는 얼마전 스프링 시큐리티를 설치하고, 유저를 만들어서 진행을 한적이 있었다,. 그리고 오늘 프로잭트를 실행시켰다. 하지만 결과는 참담했다. 모든 테스트가 틀렸다고 나온다는 것을 알 수 있었다. 이상했다. 나는 분명... 한적이 없는데.. 알고보니 스프링 시큐리티 자체에서 유저를 만들고, 그것을 모든 테스트 코드에 적용하기 때문이라고 했다. 그래서 나온 상태코드가 403 (권한이 없다)가 나온것도 그 때문인것 같다. 그러면 어떻게 이 문제를 해결해야 될까? @Configuration @EnableWebSecurity public class SpringConfig extends WebSecurityConfigurerAdapter{ } 이걸 추가하게 되면 스프링 시큐리티에서 적용되는 시큐리티는 더 이상 적..
시대가 변하고 있다. 사람들의 생활 패턴은 점점 아날로그에서 디지털로 진화하고 있다. 종의 기원을 작성한 다윈의 말을 이용하자면, 시대에 맞게 진화하지 않으면 안된다고 한다. 그러니까 현재 이 시대를 조금더 이해하기 위해 나는 개인적으로 프로그래밍을 배우는 것이 더 좋다고 생각한다. 왜냐하면 프로그래밍을 통해 무언가를 만들어가기 때문이다. 우리가 대부분 잘아는 기업들이 IT기업임을 감안하자면, 우리는 프로그래밍을 왜 배워야하는지 이해할거라 생각한다. 그런데 프로그래밍은 배운다는건 쉽지 않다. 그래서 이 책을 소개 한다. 혼자 공부하는 첫 프로그래밍이라는 책은 파이썬이라는 언어로 프로그래밍을 쉽게 설명했다. 근데 어째서 파이썬이냐고? 지금 대한민국에서 많이 사용되는 언어인 JAVA가 아니라 파이썬이냐고? ..
원래는 스프링 시큐리티에 대해 공부하고 하려다가 너무 오래 걸릴 것 같아 생략하고 적용하는것부터 진행하려고 한다. 아무튼 스프링 시큐리티를 적용하는 이유는 게시글을 만든 유저만 수정이 가능하게 만들기 위해 적용하는걸로 알고 있다. 아무튼... 적용해보자. org.springframework.security.oauth.boot spring-security-oauth2-autoconfigure 2.1.10.RELEASE 이것을 추가해줘야 스프링 시큐리티를 사용할 수 있게 된다. (이글은 백기선님 강의를 보고 작성한 글이기때문에 start.security를 사용하지 되지 않습니다.) 생각해보니 vo를 만들지 않았다. @Getter @Setter @Builder @NoArgsConstructor @AllArgs..
이번에는 강의를 듣기전에 먼저 작성하기로 해보자. 이벤트 수정의 경우는 1. 수정이 정상적으로 실행이 되었을때 : 200 2. 수정이 잘못된 경우 - 비어있는 객체가 들어있을 경우. - 잘못된 객체가 들어올 경우.. - 권한이 없는 사람이 접근했을 경우 - 페이지가 존재하지 않는 경우 이렇게 들 수 있는데... 솔직히 2-3은 지금당장은 하지 못할 것 같다. 왜냐하면 유저를 고려하지 않았기 때문이다. 테스트 코드를 작성해보자. @Test void update_event() throws Exception { Delivery delivery = generateEvent(100); DeliveryDto deliveryDto = modelMapper.map(delivery, DeliveryDto.class); ..
곧 회사일이 바빠진다고 한다. 바빠지기 전에 열심히 공부 하자! 간단하게 테스트 부터 작성해보자. @Test public void create_event() throws Exception { Delivery delivery = generateEvent(100); this.mockMvc.perform(get("/api/delivery/{id}",delivery.getId())) .andDo(print()) .andExpect(status().isOk()) .andExpect(jsonPath("id").exists()) .andExpect(jsonPath("_links.self").exists()) .andExpect(jsonPath("_links.profile").exists()); } 이것을 실행하면 어..
먼저 테스트 코드부터 작성하자. @Test void eventQuery() { IntStream.range(0, 30) .forEach(this::generateEvent); } private void generateEvent(int index) { Delivery delivery = Delivery.builder() .item("Delivery" + index) .user("klom") .build(); deliveryRepository.save(delivery); } 이렇게 작성하면 나는 0번부터 30번까지의 이벤트를 생성하는 로직이다. 그러면 생각해야 될것이 이제 이것들을 테스트를 해야 된다. 최종 코드는 다음과 같다. @Test void eventQuery() throws Exception { I..
* 여기서 인덱스란? 메인 페이지를 뜻합니다. 메인페이지를 위한 테스트 코드를 작성하자. @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK) @AutoConfigureMockMvc @AutoConfigureRestDocs @Import(RestDocsConfiguration.class) @ActiveProfiles("test") public class IndexControllerTest { @Autowired private MockMvc mockMvc; @Test void index() throws Exception { mockMvc.perform(get("/delivery")) .andDo(print()) .andExpect(sta..
람다는 왜 만들어졌을까? 람다를 사용하게 되면 굉장히 코드가 단순해진다는 것을 느낄 수 있다. 런타임시에는 익명 함수로 사용하든 람다식으로 고쳐서 사용하든 상관없다는 뜻이 된다. 최대한 간결하게 만들어서 실수를 방지 하는것이 좋지 않을까? 예를 들어, Hello hello = new Hello() { @Override public void write(String writer) { System.out.println(writer); } }; 다음과 같은 익명 함수가 존재한다고 해보자. 이것을 람다로 사용하게 된다면, Hello hello = writer -> { System.out.println(writer); }; 단, 한줄로 코드가 변경되었다. 여기서 의문인것이 어노테이션, enum,제네릭과 달리 이전 ..
이제 문서를 빌드해보자. 그전에 pom.xml에 다음을 작성하자. org.asciidoctor asciidoctor-maven-plugin 1.5.8 generate-docs prepare-package process-asciidoc html book org.springframework.restdocs spring-restdocs-asciidoctor ${spring-restdocs.version} maven-resources-plugin 2.7 copy-resources prepare-package copy-resources ${project.build.outputDirectory}/static/docs ${project.build.directory}/generated-docs 만약에 버전이 맞지 않는..