20210123~24 TIL(Django Restframework, Spring)
2022. 1. 24. 18:38
20210123
ㅇTIL
1.Django
학습자료 :
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를 관리하여 효율적인 유지보수를 하기 위해 사용되고 있다.
- Rest API(Representational State Transfer API)란?
-
- Restful API란?
- Rest API 설계 가이드를 준수한 API를 뜻한다.
- API를 Restful하게 설계하여, API의 목적이 명확히 무엇인지를 파악하기 위해 Restful 방식을 지향하게 된다.
- Restful API란?
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 에 라이브러리가 추가되면 반드시 "Load Gradle Change(새로고침)" 을 해주어야 적용된다.//build.gradle 파일에 추가 configurations { compileOnly {extendsFrom annotationProcessor } }
-
-
Getter,Setter 메소드를 애노테이션화 시켜 생성자를 자동으로 생성해준다. 그 다음, set+변수명, get+변수명을 이용해서 메인 메서드에서 바로 출력 가능하다.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); } }
- 조회 할 빈이 모두 필요할 때, 자바 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 |