전체 글 39

[Spring] HATEOAS - REST API & HATEOAS

이번에는 REST API 와 HATEOAS 에 대한 이야기를 해보겠습니다. 인프런의 백기선님의 강의 내용을 바탕으로 학습한 내용입니다. REST API REpresentational State Transfer Application Programming Interface 의 약자입니다. REST 는 인터넷 상에서 시스템 간의 상호 운용성을 제공하는 방법중 하나인데, 위키에서 정의한 것을 보면, 월드 와이드 웹과 같은 분산 하이퍼 미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이라고 소개 하고 있습니다. REST API 라고 하는 것은 이 REST 아키텍처 스타일을 따르는 API 입니다. https://ko.wikipedia.org/wiki/REST REST - 위키백과, 우리 모두의 백과사전 대한민국의..

BackEnd/Spring 2022.05.01

[Design Pattern] Decorator Pattern

헤드퍼스트의 Design Pattern 중 세번째, Decorator Pattern 입니다. Decorator Pattern 객체에 추가적인 요건을 동적으로 첨가한다. 데코레이터는 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제공한다. Decorator Pattern 에 대한 정의입니다. 하지만 이 내용을 보면 코드가 어떻게 생겼는지 감을 잡기가 어렵습니다. 책의 예제를 보면서 패턴을 설명해보겠습니다. 먼저, 패턴이 적용되지 않은 예제에서 문제점을 살펴보겠습니다. 위의 설계에서 Beverage는 음료를 나타내는 추상 클래스이고, 커피샵에서 판매되는 모든 음료는 이 클래스의 서브 클래스가 됩니다. 위의 설계에서는 메뉴에 우유, 모카, 휘핑 크림 등이 추가할때마다 커피 가격이 올라..

[Design Pattern] Observer Pattern

헤드퍼스트의 Design Patterns 중 두번째, Observer Pattern 입니다. Observer Pattern 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의한다. 책에서 정의한 Observer Pattern 입니다. 하지만 이보다 더 중요하게 생각되는 것은 느슨한 결합 (Loose Coupling) 을 설명한 내용이라고 생각이 듭니다. 패턴의 정의를 설명하고 바로 뒤에 이어서 설명을 하고 있는데요, 느슨하게 결합되어 있다는 것은 서로 상호작용을 하지만 서로에 대해서는 잘 모른다는 것을 의미합니다. Observer Pattern 을 학습하면서 이 부분에 대해 생각을 하면 좋을 것 같습니다. 책의 예제를 활용하여 ..

[Design Pattern] Strategy Pattern

헤드퍼스트의 Design Patterns 의 내용을 보며 학습을 하고 기록을 남기려 합니다. 첫번째로는 Strategy Pattern 입니다. Strategy Pattern 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. Strategy 를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. 책에서는 Strategy Pattern을 마지막에 이렇게 정리를 하였습니다. 이제 책에 있는 예제를 활용하여 어떤 패턴인지 살펴보겠습니다. 처음에 모든 오리들이 꽥꽥소리를 낼 수 있고, 헤엄칠 수 있기 때문에 Duck에 간단한 코드를 구현했습니다. MallaredDuck 과 RedheadDuck 외에도 다른 유형의 오리들도 Duck 클래스로 부터 상속을 받습니..

[단위 테스트와 도구] 단위 테스트 & 통합과 고립(Sociable and Solitary)

단위 테스트를 주도로 하는 TDD 에 대해서 간단히 설명을 했습니다. 이제 단위 테스트를 작성할 때, 협력 객체에 대해서 어떤 관점으로 테스트를 작성할 지 또 그에 따른 도구들은 어떤 것이 있는지 학습하겠습니다. 해당 내용은 "우아한 테크캠프 Pro" 과정과 "ATDD와 함께 클린 API로 가는 길" 교육을 바탕으로 학습한 내용입니다. 1. 단위 테스트란? 응용 프로그램에서 테스트 가능한 작은 소프트웨어를 실행하여 예상대로 동작하는지 확인하는 테스트. 단위 테스트는 보통 메서드, 클래스 단위로 정해지는데, 단위의 크기가 작을수록 복잡성이 낮아집니다. 단위에 대한 정의는 하는 사람에 따라 다르지만 결국 검증하려는 시스템에서 작은 부분에 맞추어지고, 다른 종류의 테스트보다 가볍고 빠르고 화이트박스 테스트의 ..

[Spring] Test - @SpringBootTest

스프링부트에서 테스트를 하기 위한 도구들에 대해 학습해보고자 합니다. 그 중 첫번째로 @SpringBootTest 에 대해서 알아봅시다. 1. @SpringBootTest @Target(value=TYPE) @Retention(value=RUNTIME) @Documented @Inherited @BootstrapWith(value=SpringBootTestContextBootstrapper.class) @ExtendWith(value=org.springframework.test.context.junit.jupiter.SpringExtension.class) public @interface SpringBootTest Spring Boot 기반 테스트를 실행하는 테스트 클래스에 지정할 수 있는 어노테이션입니..

BackEnd/Spring 2022.03.20

[ATDD] RestAssured

간단하게 ATDD에 대한 개념만 지난 글에서 잠깐 다루었습니다. 이번에는 ATDD 를 하기 위한 테스트 도구를 소개하고자 합니다. 1. RestAssured REST 어플리케이션의 HTTP Endpoint 에 초점을 맞춘 테스트 도구. RestAssured 를 본격적으로 소개하기 전에 먼저 인수 테스트는 블랙박스 테스트의 성격을 가지고 있고, 내부의 코드를 직접 호출하지 않고 외부에서만 요청하여 검증하는 것이 좋습니다. 예를 들어, 고객이 상품을 구매한다는 액션을 할 때, 상품의 재고를 확인하고 할인율을 적용하고 고객의 등급을 확인하고 이런 여러가지의 내부로직이 동작한다고 해봅시다. 그렇다면 인수 테스트로 검증하는 것은 "고객이 상품을 구매한다" → "상품 구매 성공" 이 시나리오를 검증하는것 입니다. ..

[Spring] Spring Security (4) - Spring Boot 에서의 동작 실습

앞선 글에서 Spring Boot가 어떻게 DelegatingFilterProxy 를 실행하는지 설명하였습니다. 이제 예시를 들어 실제로 FilterChainProxy의 코드가 동작하는지 살펴보겠습니다. SecurityConfig 라는 클래스를 만들어 Spring Security 가 동작하도록 간단하게 설정을 해주었습니다. 필터가 동작하는 경로로 "/foo/**" 를 등록해주었습니다 Controller 도 간단하게만 구성하였습니다. Security에 등록된 경로를 매핑하는 컨트롤러를 하나 만들어주었습니다. 이제 테스트를 돌려 작성한데로 Controller 를 호출하는지와, 동시에 FIlterChainProxy 를 타는지 디버깅으로 실행해보겠습니다. 디버깅을 FilterChainProxy 의 doFilte..

BackEnd/Spring 2022.02.27

[Spring] Spring Security (3) - Spring Boot의 Filter Chain

저번에 Spring Security에서 DelegatingFilterProxy 가 스프링 시큐리티가 생성하는 FilterChainProxy에 필터처리를 위임하고, 이 FilterChainProxy 는 다시 여러필터를 체인 형식으로 갖고 있는 SecurityFilterChain 에 처리를 위임하는 내용을 봤습니다. 그런데, Spring Boot 를 사용하다 보면 이런 설정들을 해준 기억이 없죠. Spring Boot 는 강력한 보일러 플레이트의 기능을 하기 때문에, 이러한 설정들이 사용자에게 보이지 않고 해주는 경우가 많습니다. 그래서 어떤 기능을 제공받고 있는지, 어떤 개념을 이해하고 써야되는지 놓치기 쉽죠. Spring Boot 에서 우리가 Spring Security 를 사용했음에도 Delegatin..

BackEnd/Spring 2022.02.27

[ATDD] ATTD 란? Acceptance Test Driven Development

NEXTSTEP 의 ATDD 강의를 바탕으로 복습 및 ATDD 내 것으로 만들기! ATDD 란? 용어를 그대로 해석했을 경우, 인수 테스트 주도 개발 로서 인수 테스트를 먼저 작성한 후 기능 개발이 이루어지는 개발방법론입니다. 그러나 단순히 개발자의 사이드에서만, 즉 코드를 보는 쪽에서만 도입시켜야 되는 이론이 아닌 사용자와 개발자, 테스터 간의 커뮤니케이션을 원활하게 하는 개발 방법입니다. 커뮤니케이션을 원활하게 해준다는 것이 어떤 의미일지 생각해보면, 하나의 서비스를 구성할때 기획과 개발, 테스트 등 여러 관점에서 같은 것을 보게됩니다. 그리고 결과물을 보았을때 각자 예상했던것이 다를 수 있는 것이죠. 인수테스트는 이런 리스크를 방지하기 위해 기획단계부터 인수 조건을 정의하고 테스트를 작성하여 여러 ..