api gateway는 msa에서 필수 요소중 하나로 하나의 api로 여러개를 호출 할 수 있다고 한다. 예를 들어, web, app 등등이 존재한다고 가정하면 하나의 API로 이것들을 통신이 가능하다고 한다. 근데 나는 솔직히 이해가 되지 않았다. 왜냐하면 rest api가 web이든 app이든 바뀌지 않을텐데 하나의 api로 통신이 된다는게 말이 되지 않는다고 생각했다. 그림으로 그려보면 다음과 같다. 분명히 restapi는 변경이 되지 않을텐데 api gateway가 있을 필요가 없다고 생각했다. 근데 이건 잘못된 생각이 었다. 단 한가지 내가 빼먹은 부분이 존재하는데 그건 바로 포트(port)다. 즉, 기기1는 1000번 포트를 기기2는 2000번 포트를 기기3은 3000번 포트를 가진다고 해보자..
스프링에서는 빈이라는 객체를 만들어서 관리할 수 있습니다. 이것을 IOC라고 부릅니다. 빈을 만드는 방법은 어노테이션 방법과 XML방법이 존재합니다. 하지만 여기에서는 빈 생성 방법에 대해 설명하지는 않겠습니다. 이러한 방법이 발전을 해서 @ComponentScan 을 이용해서 빈 등록이 가능해집니다. 정확히 말하면 이게 빈을 등록하는 직접적인 방법은 아니지만, 이 글에서 중요한 부분이 아니기 때문에 넘어가도록 하죠. 이렇게 빈을 생성하게 되면 (어떠한 방법이든 상관없습니다.) @Autowrite라는 어노테이션을 활용해서 빈을 사용할 수 있습니다. 이것을 의존성 주입이라고 부릅니다. 의존성 주입에는 총 3가지가 존재합니다. 필드 주입 필드 주입 방법은 말 그대로 필드 위에 @Autowrite같은 의존성 ..
AOP란 Aspect Object Programming의 약자로 관점 지향 프로그래밍이라고 한다. 객체 지향 프로그래밍의 보완성으로 나온 프로그래밍방식이라합니다. 어떻게 보면 객체 지향의 상위 호완이라 생각할 수 있겠지만, 그거는 설명하기 귀찮기때문에 넘어가자. 여기에 서로 다른 클래스가 존재한다. 3개의 클래스안에는 공통적인 기능이 존재한다. 공통적인 기능이 존재해도 3개의 클래스 모두 같은 기능을 추가해야한다. 물론, 리펙토링을 통해 이것을 처리할 수 있겠지만, 애초에 리펙토링 자체도 코드 한줄을 입력해야 되는 것이기 때문에 어떻게 보면 3개의 기능을 추가한다는 건 다르지 않는다. 그러면 관점을 조금만 바꿔서 생각해보자. 만약에 클래스가 시작할때, 클래스가 종료될때 로그를 찍히게 만들 수 있게 한다면..
스프링에서는 다양한 방법으로 DI와 IOC(Injection Of Controller) 를 지원한다. 근데 이들이 어떤것이 존재하는지 알 필요가 있을까? 내 생각에는 종류를 아는 것도 중요하지만, 용어의 뜻부터 아는 것도 중요하다고 생각이 든다. 먼저 DI는 dependency Injection의 약자로 의존성 역전이 되었다는 의미라 할 수 있다. 여기서 의존성이란 존재함을 의미한다. 일반적으로 의존하고 있다는의미는 마치 부모가 자식을 낳는 듯한 느낌처럼 자식이 탄생하기 위해서는 부모가 반드시 있어야 된다는 뜻이다. 이것을 코드화 시켜보자. public class Parents { public void birth() { Child child = new Child(); } } 부모가 birth라는 메서드를..
나는 얼마전 스프링 시큐리티를 설치하고, 유저를 만들어서 진행을 한적이 있었다,. 그리고 오늘 프로잭트를 실행시켰다. 하지만 결과는 참담했다. 모든 테스트가 틀렸다고 나온다는 것을 알 수 있었다. 이상했다. 나는 분명... 한적이 없는데.. 알고보니 스프링 시큐리티 자체에서 유저를 만들고, 그것을 모든 테스트 코드에 적용하기 때문이라고 했다. 그래서 나온 상태코드가 403 (권한이 없다)가 나온것도 그 때문인것 같다. 그러면 어떻게 이 문제를 해결해야 될까? @Configuration @EnableWebSecurity public class SpringConfig extends WebSecurityConfigurerAdapter{ } 이걸 추가하게 되면 스프링 시큐리티에서 적용되는 시큐리티는 더 이상 적..
원래는 스프링 시큐리티에 대해 공부하고 하려다가 너무 오래 걸릴 것 같아 생략하고 적용하는것부터 진행하려고 한다. 아무튼 스프링 시큐리티를 적용하는 이유는 게시글을 만든 유저만 수정이 가능하게 만들기 위해 적용하는걸로 알고 있다. 아무튼... 적용해보자. 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..
오랜만에 작성하는것 같다. 아무튼 다시 작성하게 되어서 기쁘다.! restAPI docs를 만들기 위해서는 org.springframework.restdocs spring-restdocs-mockmvc test 이 의존성을 추가해줘야 한다. RestApi 만들기 - spring-rest-docs (5) 자 드디어 rest-docs를 적용할때가 왔다. Spring REST Docs Document RESTful services by combining hand-written documentation with auto-generated snippets produced with Spring MVC Test. docs.spring.io.. b-programmer.tistory.com 이글에서 spring-rest..
자 드디어 rest-docs를 적용할때가 왔다. Spring REST Docs Document RESTful services by combining hand-written documentation with auto-generated snippets produced with Spring MVC Test. docs.spring.io 원래 private MockMvc mockMvc; @Autowired private WebApplicationContext context; @Before public void setUp() { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context) .apply(documentationConfiguration(this.re..