스프링 1 (추가중)
# 웹이란? - 인터넷 : 전세계의 모든 네트워크를 묶는 연결망 - 웹 : 전세계의 인터넷에 어딘가에 있는 특정 공간 - HTTP : 인터넷 안에서 웹 공간을 찾아 가기위한 역할
# 백엔드 개발자는? - 백엔드 개발자는 API를 개발함. - Application Program Interface - 운영체제와 응용프로그램 사이의 통신에 사용되는 언어나 메시지 형식 (중간역할을 해줌, 점원같은 역할)
### REST API Representational State Tranfer의 약자로 웹을 이용할때 제약조건들을 정의하는 소프트웨어 아키텍처 스타일. - 고전API : 화면을 포함해서 규칙이고 뭐고 일단 알아서 데이터를 보내줌. => 기준, 틀이 없음. - REST API : REST 규칙대로 잘 구현된 API를 REST API라고 부를 수 있고 그 외에는 HTTP API라고 불러야함. 규칙을 잘 지킨 API를 RESTful API라고 불림. - 구성요소: URL(자원), Method(행위), Representation(표현) ### URL - 웹에서 요청하는 방법 = API를 요청하는 방법으로 볼 수 있음. - 웹사이트에서 주소를 통해 원하는 정보를 요청을 하는 것.(식별자 역할)
# 스프링이란? - 로드 존슨이 2002년에 Expert One-on-One J2EE Design and Development에서 소스코드를 공개하고 개발방법을 제안한게 오픈소스로 계속 진행되었음.
## **현재 start.spring.io에 2버전 지원이 끝남**
### 스프링 프로젝트 폴더 구조 - src폴더에 소스코드가 들어있음 - main아래로 그룹과 패키지를 쭉 따라가면 ~~Application클래스가 나오는데 이 파일에 메인메서드가 있음 - resources 폴더는 프로그래밍 언어 외적으로 짠 파일들을 나둠 - bulid.gradle -> GRADLE이 빌드할때 이 파일에 적힌대로 빌드함 - gradlew.bat 그래들을 빌드해서 패키징을 할 때 사용하는 bat파일임. -> 빌드하기 위한 실행용 파일 - External Libraries에는 그래들이 다운받은 라이브러리들이 들어있음
### 스프링 주요 개념 - IOC : Inversion of Control (제어의 역전) - 프로그램의 흐름을 제어하는 주체가 정반대로 뒤집힌다 - 객체의 흐름을 제어하는 주체가 정반대로 뒤집힌다 - DI : Dependency Injection (의존성 주입) - 의존한다 = 사용한다 - 객체를 사용한다 -> 객체의 메서드, 필드를 사용 - 컨테이너 (Spring / IOC / **DI**) - 객체를 생성해서 관리하는 공간 - 빈을 담아두는 곳 - 스프링 빈 - 스프링 객체
### 스프링 MVC 각 역할 - View: 화면 - Model: 데이터 처리, 로직 - Service - Repository - Controller: Model - View 중간 매개체
### HTTP method (목적) 1. 조회: GET 2. 생성: POST 3. 수정: PUT(전체수정), PATCH(부분수정) 4. 삭제: DELETE
### 스프링 IoC & 스프링 빈 - 스프링에서는 사용자가 직접 객체를 생성하는것이 아니라, 스프링이 객체를 생성하고 관리를 해줌 - Component - Configuration + Bean
=> 등록된 빈을 주입하는 방법은 Autowird 사용 - Component어노테이션이 있는 클래스는 컴포넌트 스캔을 통해 빈 객체로 등록이 된다.
### Spring 의존성 주입 방법 1. 필드 주입 ```java @Service public class ProductSerivice { // 클래스의 필드에 선언하기 @Autowired private ProductRepository productRepository; } ``` - 테스트할때 불편함 --- 2. Setter 주입 ```java @Autowired public void setProductRepository(ProductRepository productRepository) { this.productRepository = productRepository; } ``` - 외부에서 객체를 다시 넣을 수 있어 변경이 될 가능성이 있어 특별한 상황이 아니라면 추천안함 --- 3. 생성자 주입 ```java private ProductRepository productRepository; public ProductSerivice(ProductRepository productRepository) { this.productRepository = productRepository; } ``` - 외부에서 객체를 생성해서 주입해서 사용함 - 생성자는 한번만 실행하기때문에 불변성 확보.
### @RequestParam ```java public void saveProduct(@RequestParam("name") String productName) { System.out.println("POST"); productSerivice.save(productName); } ``` - 주로 데이터 입력을 할 때 사용 - url 에서 name을 파라미터로 받아 productName에 담음 ex) localhost:8080/?name="이름적을부분"
### @PathVariable ```java @GetMapping("/products/{id}") public String findProduct(@PathVariable("id") Integer id) { System.out.println("GET"); System.out.println(id); return productSerivice.findProduct(); } ``` - 주로 데이터를 가져올때 사용함 - 어노테이션에서 id를 문자열 보간으로 적으면 id의 값을 받아와 매개변수에 담음 ex) localhost:8080/{id}
### @RequestBody ```java @PostMapping("/products") public void saveProduct(@RequestBody Product product) { System.out.println("POST"); productSerivice.save(product); } ``` - http body부분을 주로 JSON형태로 보내는데, 그 때 자동으로 역직렬화(Deserialization)를 하고 서버에서 받는다.
출처 (송아지할때송아 김송아님 강의) 경고>
This post is licensed under CC BY 4.0 by the author.