📙 4주차

4주차에는 네이버 API를 사용하는 내용이 있다.
강의 덕분인지는 몰라도 생각했던 것보다 간단하게? 네이버 API를 이용했다.

  • 4주차 첫 번째 연습퀴즈 - API 설계하기
  1. 키워드로 상품 검색하고 그 결과를 목록으로 보여주기
  2. 관심 상품 등록하기
  3. 관심 상품 조회하기
  4. 관심 상품에 원하는 가격 등록하고, 그 가격보다 낮은 경우 표시하기 (숙제!)

먼저 만들어본 API
1 / GET /api/search?query=검색어 / List<>
2 / POST /api/products / Product
3 / GET /api/products / List<'Product'>
4 / POST /api/products / id

강의 API
1 / GET /api/search?query=검색어 / List<'ItemDto'>
2 / POST /api/products / Product
3 / GET /api/products / List<'Product'>
4 / PUT /api/products/{id} / id

  • @Transactional : update하는 것은 DB상의 변경이 일어나므로 '트랜잭션'이 일어나기 때문에
  • JSON을 자바에서 다루기 위해, JSONObject, JSONArray 클래스가 필요합니다.
  • org.json 패키지 : 자바에서 json을 다루는 데 도와주는 라이브러리
  • JSONObject rjson = new JSONObject(result); // 문자열(result)을 JSONObject로 바꿔줄게 ( 여기서 result 는 검색결과 )
// rjson 출력값
{"total":76906,"lastBuildDate":"Sat, 02 Jul 2022 14:14:24 +0900","display":10,"start":1,"items":[{"category2":"PC","image":"https://shopping-phinf.pstatic.net/main_2710485/27104851525.20210513151710.jpg","mallName":"���̹�","category3":"�귣��PC","category4":"","productId":"27104851525","category1":"������/����","link":" .....]
  • JSONArray : JSON으로 이루어진 배열
JSONArray items = rjson.getJSONArray("items"); 
  • @Component
    스프링이 자동으로 필요한 클래스를 필요한 곳에 생성하려면,
    "아, 사용자가 요구하면 자동으로 생성할 클래스 목록이 이것이구나"
    라고 확인할 수 있어야 하겠죠?
    그 목록에 등록하는 간단한 방법이 바로 컴포넌트 등록입니다.
  • @RequiredArgsConstructor은 반드시 필요한 클래스를 알아서 넣어주는데, Component 등록이 되어있지 않으면 불가능하다.

🚨 js에서 함수에서 받는 파라미터가 String형태이면 알아서 JSON형태로 바꿔버린다.

function(abc) {
	console.log(abc) -> JSON 형태 출력
	console.log(JSON.stringify(abc)) -> 문자열 형태 출력
}

그렇게 때문에 ajax로 백으로 데이터를 보낼때 꼭 다시 JSON.stringify( )를 해줘야한다.

  • @RequestParam : 스프링은 엄격해서 ? 뒤에 query로 오는 것들을 변수로 받고싶을 때 사용하다. 주의할 점은 변수명이 같아야한다.
public List<ItemDto> getItems(@RequestParam String query) {
        String resultString = naverShopSearch.search(query);
        return naverShopSearch.fromJSONtoItems(resultString);
    }
  • 스케줄링으로 매번 예약으로 도는 시간에 맞춰서 정한 시간에 딱 맞을 때 작동
    스케줄러가 정상 작동하려면 Week04Application에 @EnableScheduling를 붙여줘야한다.
// 초, 분, 시, 일, 월, 주 순서 ( * 은 뭐든 상관 없다 )
@Scheduled(cron = "0 0 1 * * *")

📔 5주차

5주차에는 AWS RDS의 MySQL을 연결하고 AWS EC2에 배포한다.

무난하게 잘 마치나 싶었는데, 역시나 아니다.
배포단계에서 스프링부트가 실행되지않는다.

엄청나게 긴 에러 메세지가 출력된다. 아무리 찾아보고 노력해도 해결이 안된다...
의욕이 사라진다... 누가 좀 도와줘....

다음 날 인스턴스 삭제하고 다시 시도했더니 성공!

profile
백엔드 개발자를 꿈꾸는 백승한입니다

0개의 댓글