1. API 설계
2. 3계층 설계하기
- ControllerProductRestSearch
- Controller: 관심 상품 관련 컨트롤러
- RequestController: 검색 관련 컨트롤러
- Service
- ProductService: 관심 상품 가격 변경
- Repository
- Product: 관심 상품 테이블
- ProductRepository: 관심 상품 조회, 저장
- ProductRequestDto: 관심 상품 등록하기
- ProductMypriceRequestDto: 관심 가격 변경하기
- ItemDto: 검색 결과 주고받기
3. 요구사항 정리
- 각 화면의 기능 정리
4. 관심상품 조회하기
4-1) 요구조건
- "모아보기" 탭을 눌렀을 때 등록된 관심 상품을 조회할 수 있습니다. (title, image, link, lprice, myprice 정보가 필요)
4-2) 구현
- Timestamped 클래스 만들기
- Product 클래스 만들기
- ProductRepository 만들기
- ProductRestController 만들기
5. 관심 상품 등록하기
5-1) 요구조건
- 상품을 검색한 후, 등록 버튼을 눌렀을 때 관심 상품이 생성되어야 합니다.
- 검색 결과에서 제목, 이미지, 링크, 최저가를 가져오면 됩니다.
5-2) 구현
- Dto 클래스 만들기
- Product 클래스 개선하기
- ProductService 만들기
- ProductRestController 개선하기
6. 키워드로 상품 검색하기 - NaverShopSearch 발전시키기
6-1) 요구조건
- 이전에 만들어 둔 NaverShopSearch 클래스를, 웹서비스에 이용할 수 있도록 발전시켜 보겠습니다.
- 검색어를 요구에 따라 바꿀 수 있어야 합니다.
- 검색 결과를 문자열에서 DTO로 바꿔야 합니다.
6-2) 구현
- org.json 패키지 설치하기
// https://mvnrepository.com/artifact/org.json/json
implementation 'org.json:json:20220320'
- 문자열 정보를 JSONObject로 바꾸기
JSONObject rjson = new JSONObject(result);
- JSONObject에서 items 배열 꺼내기
JSONArray items = rjson.getJSONArray("items");
api -> 데이터 요청 -> 받은 데이터(문자열) JSONObject로 변형 -> JSONObject 배열 꺼내기
-> 꺼낸 배열에서 각 속성별 데이터 꺼내기
NaverShopSearch naverShopSearch = new NaverShopSearch(); //API
String result = naverShopSearch.search("아이맥"); //문자열 데이터 받음
JSONObject rjson = new JSONObject(result); // 문자열 데이터 -> JSONObject
JSONArray items = rjson.getJSONArray("items"); // JSONObject -> JSONArray
for (int i = 0; i < items.length(); i++) { // JSONArray에서 각 데이터 추출
JSONObject itemJson = items.getJSONObject(i);
String title = itemJson.getString("title");
String image = itemJson.getString("image");
int lprice = itemJson.getInt("lprice");
String link = itemJson.getString("link");
- ItemDto 생성하기
- fromJSONtoItems 메소드 만들기 ( 위의 내용 메소드로 만들어서 처리)
public List<ItemDto> fromJSONtoItems(String result) {
JSONObject rjson = new JSONObject(result);
JSONArray items = rjson.getJSONArray("items");
List<ItemDto> itemDtoList = new ArrayList<>();
for (int i = 0; i < items.length(); i++) {
JSONObject itemJson = items.getJSONObject(i);
ItemDto itemDto = new ItemDto(itemJson);
itemDtoList.add(itemDto);
}
return itemDtoList;
}
7. 키워드로 상품 검색하기 - 네이버 API와 서비스 연결하기
7-1) 요구조건
- 사용자가 검색어를 입력하면, 컨트롤러가 그것을 전달받습니다.
- 전달받은 검색어로 네이버 API에 요청하고, 그 결과를 사용자에게 응답합니다.
7-2) 구현
- NaverShopSearch 컴포넌트 등록하기
더 이상 검색을 main 메소드에서 진행하는게 아니라, Controller 에서 가져다 써야 합니다.
스프링이 자동으로 필요한 클래스를 필요한 곳에 생성하려면,
"아, 사용자가 요구하면 자동으로 생성할 클래스 목록이 이것이구나"
라고 확인할 수 있어야 하겠죠?
그 목록에 등록하는 간단한 방법이 바로 컴포넌트 등록입니다.
-> NaverShopSearch 클레스에 @Component 선언
- SearchRequestController 만들기
@RequiredArgsConstructor // final 로 선언된 클래스를 자동으로 생성합니다.
@RestController // JSON으로 응답함을 선언합니다.
public class SearchRequestController {
//NaverShopSearch에 Componet 선언 했기에 사용가능
private final NaverShopSearch naverShopSearch;
@GetMapping("/api/search")
public List<ItemDto> getItems(@RequestParam String query) {
String resultString = naverShopSearch.search(query);
return naverShopSearch.fromJSONtoItems(resultString);
}
}
** SearchRequestController -> naverShopSearch.fromJSONtoItems(resultString) 메소드 실행하여 값 반환
- ARC로 기능 확인하기
'프로그래밍 > SpringBoot' 카테고리의 다른 글
Controller의 이해 (0) | 2022.05.29 |
---|---|
나만의 셀렉샵 API (2) - 기능 구현 (상품 검색/관심 상품 등록/관심 상품 보여주기) (0) | 2022.05.26 |
JPA 아키텍처 (0) | 2022.05.22 |
REST API - GET/POST/PUT/DELETE - Controller (0) | 2022.05.22 |
Rest API란? (Rest의 개념) (0) | 2022.05.22 |