5차 Q&A
Q 5-1 스프링 빈(Bean)
Q 5-2 DI
Q 5-3 RestApi
Q 5-4 CRUD
Q 5-1 스프링 빈(Bean)
스프링 컨테이너에 의해 관리되고 애플리케이션의 핵심을 이루는 객체들을 스프링 빈이라고 부릅니다.
스프링 빈은 스프링 컨테이너에 의해 인스턴스화되어 조립,관리되는 객체
즉, 스프링 빈은 스프링의 객체로 이해하면 편합니다
스프링은 빈을 스프링 컨테이너에 등록하기 위해 XML파일 설정,애너테이션 추가 등 여러방법을 제공합니다.
예를들어 DoHi라는 클래스에 @Component 애너테이션을 붙이면 DoHi 클래스가 빈으로 등록됩니다.
그럼 스프링 컨테이너에서는 Dohi 클래스를 빈으로써 클래스의 첫글자를 소문자로 바꿔서 관리하게 됩니다
Class : DoHi → Bean : doHi
@Component //Class (DoHi)를 Bean (doHi)으로 등록 public class DoHi{ }
Q 5-2 DI
IoC ( 제어의 역전 / Inversion of Control )
자바를 공부하다보면 객체는 항상 필요한 곳에서 직접 생성을 했을 것입니다.
dohi = new Dohi(); //new 키워드로 클래스Dohi의 객체 생성
IoC는 객체를 직접 생성, 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와서 사용하는 것을 뜻합니다
스프링에 적용을 해보면 스프링은 스프링 컨테이너가 객체를 관리,제공하는 역할을 합니다
private Dohi dohi; //객체를 코드에서 생성하는 것이아니라 받아온 객체를 dohi에할당
즉, 제어권을 개발자가 아닌 framework가 가지게 함으로써 해서 모듈간의 느슨한 결합을 제공하고자 한다.
DI ( 의존성 주입 / Dependency Injection )
위에서 본 것처럼 스프링에서는 객체를 관리할때 IoC(제어의 역전)을 사용합니다.
의존성이란 다른 객체를 참조하는 것을 의미하는데
의존성 주입은 스프링 컨테이너에서 관리하는 Controller, Service, Repository와 같은 Spring Bean을 주입하는 과정이다.간단하게 말하면 객체가 필요할때마다 스프링 컨테이너에서 주입받아 사용한다고 생각하면 편하다.
예시
public class DiTest{
@Autowired
Dohi dohi;
}
*@Autowired
DI을 할 때 사용하는 애노테이션 : 의존 객체의 타입에 해당하는 빈(Bean)을 찾아 주입하는 역할을 합니다.
기존 코드들은 생성자를 사용해서 직접 생성을 했어야 했지만
위에 예시코드는 DiTest Class에서 Dohi라는 객체를 dohi에 주입받아서 사용합니다.
Ioc/DI는 중요한 개념이고 Spring의 메인 개념입니다
Q 5-3 Rest API
API( Application Programming Interface) 란 네트워크에서 API는 프로그램 간에 상호작용하기 위한 매개체를 말합니다
이해가 처음엔 잘 안되기에
예를 한번 들어보겠습니다
우리(클라이언트)가 웹 사이트의 주소를 입력해서 "멋있는 도히의블로그를 보여줘!" 라는 요청을 했다고 가정합시다.
그러면 API는 이 요청을 받아서 서버에게 가져다 줍니다.
그러면 서버는 API가 가져온 요청을 처리해서 "멋있는 도히의 블로그"라는 결과물을 만들어서 API에게 전달합니다.
API는 최종 결과물을 브라우저에 보내주기에 우리는 "멋있는 도히의 블로그"를 화면으로 볼 수 있게되는 겁니다.
요약하면 클라이언트의 요청을 서버에 전달하고, 서버의 결과물을 클라이언트에게 돌려주는 역할을 합니다
REST API ( Representational State Transfer api)는 웹의 장점을 최대한 활용하는 api입니다 이름의 뜻을 풀어서 해석하면
자원을 이름으로 구분해서 자원의 상태를 주고받는 api방식입니다.
REST API는 기술보다는 URL의 설계방식을 말합니다.
이설계방식을 따랐을 때 얻는 장단점이 무엇이고 REST API가 뭔지 더 자세하게 알아보겠습니다.
REST API의 장단점
장점
- URL만 보고 무슨 행동을 하는 API인지 알 수 있음
- 무상태 특징으로 클라이언트와 서버의 역할이 분리
- HTTP표준을 사용하는 모든플렛폼에서 사용가능
단점
- HTTP매서드(GET,POST와 같은 방식)의 개수에 제한
- 공식적으로 제공되는 표준 규약이 없음
REST API 사용방법
- URL에는 동사를 사용하지 말고 자원을 표시한다.
- 동사는 HTTP 메서드만
합치면 URL에는 동사는 HTTP메서드로 그외 동사를 사용하지 말고 자원을 표시한다.
자원은 가져오는 데이터를 말합니다.
예를 들어 저의 블로그의 지금 주소를 보면( https://dohi-blog.tistory.com/120) 게시글의 id로 게시글을 불러오는 주소입니다
게시글의 id가 120인 게시글을 가져와서 보는 URL인거죠
HTTP메서드라는 것은 서버에 요청을 하는 방법을 나눈 것인데 주로 사용하는 메서드는 아래에 표에 있듯
GET, POST, PUT, DELETE를 주로 사용합니다
각각 만들고(Create), 읽고(read), 업데이트하고(update),삭제(delete)하는 역할을 담당하는데 이것들을 크루드(CRUD)라고 부릅니다.
한번 예시로 정리 해보죠
예문 | 적합성 | 설명 |
/articles/1 | 적합 | 동사가 없고, 1번글을 가져온다는 의미 명확함 , 적합 |
/articles/show/1 /show/articles/1 |
부적합 | show라는 동사가 있음 , 부적합 |
GET/articles/1 | 적합 | id가 1인 글을 조회하는 API |
POST/articles/1 | 적합 | id가 1인 글을 추가하는 API |
PUT/articles/1 | 적합 | id가 1인 글을 수정하는 API |
DELETE/articles/1 | 적합 | id가 1인 글을 삭제하는 API |
이외에도 슬래시는 계층관계를 나타내거나, 밑줄대신 하이픈을 사용하거나 등등의 규칙이 있지만
간단하게 이정도만 배우고 차차 실습으로 알아가 봅시다:)
Q 5-4 CRUD
CRUD는 기본적인 데이터 처리 기능을 묶어서 부르는 말입니다
Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 의미하는데요
SQL가 대표적인 좋은 예시입니다 Insert, Select, Update, Delete를 생각하시면 편합니다
또 다른 예시를 간단하게 들어볼게요
요구사항으로 한번 간단하게 예시를 들어보고 끝내볼게요
작성을 위한 API (Create)
조회를 위한 API (Read)
수정를 위한 API (Update)
삭제를 위한 API (Delete)
이렇게 생각하시면 편할 겁니다!
위에서 배운REST API와 CRUD가 같네요?
CRUD (SQL) | 요구/조작 | REST API(HTTP) |
Create (Insert) | 작성 | GET |
Read (Select) | 조회 | POST |
Update (Update) | 수정 | PUT, PATCH |
Delete (Delete) | 삭제 | DELETE |
REST와 CRUD의 유사성으로 인해 아예 동일한 기능을 가지고 있다고 착각하기 쉽습니다.
정확하게 보면 차이가 있음을 알고 있으면 좋습니다! 참고 글
- REST는 일반적으로 HTTP 명령을 통해 데이터를 사용하는 것을 의미
- REST와 CRUD의 기능은 유사하지만 동일하지는 않습니다.
PUT은 아직 존재하지 않는 리소스라도 새로운 리소스를 추가하여 대체하고 POST는 새로운 리소스를 추가합니다. 둘다 새 리소스를 생성하지만 PUT은 일반적으로 이미 있는 리소스를 업데이트하는 데 사용됩니다.
PATCH(HTTP)는주로 리소스의 일부를 업데이트하는 데 사용하고 PUT은 리소스 전체를 교체하여 업데이트합니다
즉, REST와 CRUD는 함께 작동하지만 동일하지는 않습니다.
둘을 구별하는 가장 좋은 방법은 REST가 표준 (API 아키텍처)이고 CRUD가 함수라는 점입니다.
이 글은 을지대학교 백엔드 세션 강의를 위해 제작된 게시글입니다
언제나 조언부탁드립니다
'==5. 활동== > 멋쟁이 사자처럼 (12기 세션자료)' 카테고리의 다른 글
[Eulji_LikeLion_2024_BackEnd] 7차 ORM, JPA, AOP (0) | 2024.05.13 |
---|---|
[Eulji_LikeLion_2024_BackEnd] 6차 JAVA 연습 (0) | 2024.05.02 |
[Eulji_LikeLion_2024_BackEnd] 5차 의존관계,웹기능설계 (0) | 2024.04.27 |
[Eulji_LikeLion_2024_BackEnd] 4차 Q&A HashMap,Singleton (0) | 2024.04.18 |
[Eulji_LikeLion_2024_BackEnd] 4차 요구사항 (0) | 2024.04.08 |
댓글