1. API 설계

 

2. 3계층 설계하기

  1. ControllerProductRestSearch
    • Controller: 관심 상품 관련 컨트롤러
    • RequestController: 검색 관련 컨트롤러
  2. Service
    • ProductService: 관심 상품 가격 변경
  3. 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로 기능 확인하기

+ Recent posts