20210123~24 TIL(Django Restframework, Spring)

2022. 1. 24. 18:38

20210123

ㅇTIL

1.Django

학습자료 :

1. Django로 Restful API 서버 만들기

 

dJango로 restful API 서버만들기 [2] - rest framework 적용

이전 글 2019/10/14 - [Study/python] - dJango로 restful API 서버만들기 [1] - django 서버 생성 소스코드 GIT : https://github.com/tkdlek11112/django_restful 시작하기 전에 지난 강의에서는 장고를 설치하..

cholol.tistory.com

2. API,REST API, Restful API 개념 살펴보기

  • Django Restframework,Rest API의 개념, 사용법에 대해 학습하였다. 
    • Rest API(Representational State Transfer API)란? 
      • 웹상에서 사용되는 여러 리소스를 HTTP URI의 방식으로 표현하고, 해당 리소스에 대해서 HTTP 메소드 형식으로 보다 깔끔하게 정의하는 방식을 뜻한다.
      • 리소스의 대한 행위를 HTTP Method(Create, Read, Update, Delete)로 표현한다.
      • 현재 대부분의 URI는 URL이며, URI의 동사는 GET,POST와 같은 HTTP Method로 표현되기 때문에, 명사로 지정해줘야 한다.
    • Rest API를 사용하는 이유?
      • 프로그램의 CRUD 기능 또는 여러 기능들이 체계적으로 잡혀있지 않으면, 충돌이나 API로 인한 여러 오류들을 발생시킬 수 있다. 이를 대비하여 보다 더 체계적인 방식으로 API를 관리하여 효율적인 유지보수를 하기 위해 사용되고 있다.
    • Restful API란?
      • Rest API 설계 가이드를 준수한 API를 뜻한다.
      • API를 Restful하게 설계하여, API의 목적이 명확히 무엇인지를 파악하기 위해 Restful 방식을 지향하게 된다.

20210124

1.Spring

<학습 : 김영한 스프링 핵심원리>

  • 자동 주입 대상 옵션 처리(주입할 스프링 빈이 존재 x)
//1) 자동 주입 대상이 없으면 메서드 호출 x
@Autowired(required = false) 
public void setBeanOption1(Member member){ 
system.out.println("setBeanOption1 = " + member); 
} 

//2) 자동 주입 대상이 없으면 Null 값 반환 
@Autowired 
public void setBeanOption2(@Nullable Member member){ 
system.out.println("setBeanOption2 = " + member); 
} 

//3) 자동 주입 대상이 없으면 "Optional Empty" 반환 
//Optional -> Java8 문법. null 값일 가능성 역시 포함한다. 
@Autowired(required = false)
public void setBeanOption3(Optional<Member> member){ 
system.out.println("setBeanOption3 = " + member); 
}​

 

 

  • Lombok 라이브러리
    • Getter,Setter 메소드를 애노테이션화하여 따로 작성하지 않아도 된다.
    • 코드가 간결해진다.
    • 롬복 설치 "build.gradle"
      • //build.gradle 파일에 추가
        
        configurations {
           compileOnly {extendsFrom annotationProcessor
           }
        }
        *build.gradle 에 라이브러리가 추가되면 반드시 "Load Gradle Change(새로고침)" 을 해주어야 적용된다. 
    • package hello.core;
      
      import lombok.Getter;
      import lombok.Lombok;
      import lombok.Setter;
      
      @Getter
      @Setter
      public class HelloLombok {
      
          private String name;
          private int age;
      
          public static void main(String[] args) {
              HelloLombok helloLombok = new HelloLombok();
              helloLombok.setName("cozzilzzil2");
              String name = helloLombok.getName();
              System.out.println("name = " + name);
          }
      }
      Getter,Setter 메소드를 애노테이션화 시켜 생성자를 자동으로 생성해준다. 그  다음, set+변수명, get+변수명을 이용해서 메인 메서드에서 바로 출력 가능하다.
  • 조회 할 빈이 모두 필요할 때, 자바 Collection을 이용하여 처리하는 방법에 대해 학습했다.
    • 클라이언트가 할인 서비스(FixDiscount,RateDiscount) 를 선택할 수 있다고 가정하면 스프링이 제공하는 기능을 통해서 처리가능하다. 
    • @Test void findAllBean() { 
          ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class,DiscountService.class);
          DiscountService discountService = ac.getBean(DiscountService.class);
      
          //멤버 생성 
          Member member = new Member(1L, "userA", Grade.VIP); 
      
          // FixDiscountPolicy 검증 
          int discountPrice = discountService.discount(member,10000,"fixDiscountPolicy"); 
          Assertions.assertThat(discountService).isInstanceOf(DiscountService.class);
          Assertions.assertThat(discountPrice).isEqualTo(1000); 
      
          // RateDiscountPolicy 검증 
          int rateDiscountPrice = discountService.discount(member,20000,"rateDiscountPolicy");
          Assertions.assertThat(discountService).isInstanceOf(DiscountService.class); 
          Assertions.assertThat(rateDiscountPrice).isEqualTo(2000); 
          } 
      	static class DiscountService { 
          private final Map<String, DiscountPolicy> policyMap; 
          private final List<DiscountPolicy> policies; 
          
          //@Autowired를 이용한 자동 주입(생성자가 1개일 경우 생략 가능하다) 
          @Autowired
          public DiscountService(Map<String, DiscountPolicy> policyMap,List<DiscountPolicy> policies){ 
          this.policyMap = policyMap; 
          this.policies = policies; 
          //key : 스프링 빈 이름 value : 스프링 빈 객체 
          System.out.println("policyMap = " + policyMap); 
          System.out.println("policies = " + policies);
          } 
          // discount가 얼마나 되는 지 확인하기 위한 메서드(할인 금액이니 메서드 타입은 int.)
          public int discount(Member member, int price, String discountCode) { 
          DiscountPolicy discountPolicy = policyMap.get(discountCode); 
          return discountPolicy.discount(member, price); 
          } 
      }

 Q.AnnotationConfigApplicationContext 에 파라미터로 일반 클래스(DiscountService)를 넣을 수 있는가?

  • AnnotationConfigApplicationContext 는 ApplicationContext의 구현 클래스이며, 스프링 컨테이너 그 자체가 될 수 있다. @Configuration이 붙은 설정 클래스 뿐만 아니라, 일반 클래스도 파라미터로 받을 수 있는데, 이때 일반 클래스 하나만 스프링 빈으로 등록된다. 
  • 기존의 방식으로 @Configuration이 붙은 설정 클래스를 넣으면, @Bean(수동 빈 등록), @ComponentScan(자동 빈 등록) 을 통해 전부 스프링 빈으로 등록된다.

ㅇ회고

  • 미라클 모닝 시작. 30일 도전 및 습관화하여 시간을 의미있게 보내자.
  • 그것을 함으로써 그것을 할 능력이 생긴다.
  • 어제의 나만을 뛰어넘는 것을 목표로 하자.

ㅇ내일 할일

  • Django REST API 복습( 스스로 API 만들어보기)
  • Django side project css 수정 및 post index logic 다시 생각해보기.

'TIL' 카테고리의 다른 글

20210203 TIL(Spring-AssertJ, HTTP)  (0) 2022.02.03
20210126 TIL(DRF, __str__ 메소드)  (0) 2022.01.26
20210119 TIL(Spring)  (0) 2022.01.19
20210118 TIL(spring-componant)  (0) 2022.01.18
20210116 ~ 20210117 TIL(Spring)  (0) 2022.01.17

BELATED ARTICLES

more