2022.12.15.THU

ronglong·2022년 12월 15일
0

코드스테이츠 Day41

  1. Spring MVC - API 계층
  • Spring MVC
    - 클라이언트 요청을 처리하는 프레임워크
    - 서블릿 기반 동작
  • M(Model) : 작업 결과물
  • V(View)
    - Model을 이용하여 프론트엔드에 리소스 제공.
    - JSON 변환. {”속성”:”값”}. Gson 라이브러리 사용.
  • C(Controller)
    - 클라이언트 측의 요청을 직접 전달 받는 엔드포인트(Endpoint)
    - Model 데이터를 View로 전달하는 역할
  1. Controller
  • 패키지 구조 : 기능 기반 / 계층 기반. Spring Boot팀에서는 기능 기반 권장.
  • main() 메서드가 포함된 애플리케이션의 엔트리포인트(어플리케이션 시작점) 클래스 작성
    • Spring Initializr를 통해 생성한 프로젝트에는 엔트리포인트 클래스가 작성되어 있음
      -- > 동일&하위 패키지에 대하여 작동하므로, 패키지 바깥으로 꺼낼 것!
    • @SpringBootApplication
      • 자동 구성 활성화
        • @ComponentScan이 포함되어 있어, @Component 찾아서 빈 등록
        • @Configuration 찾아서 @Bean 등록
    • SpringApplication.run(~); ---> 어플리케이션 실행
  • Controller 작성
    • @RestController, @Controller
      • 해당 클래스가 REST API의 리소스를 처리하기 위한 API 엔드포인트로 동작
      • @Component 포함하므로, 빈으로 등록됨.
    • @RequestMapping
      • 클라이언트 요청과 핸들러 메서드(Handler Method)를 매핑
      • 클래스 전체 단위의 공통 URL(Base URL) 설정
    • 핸들러 메서드(Handler Method)
      • HTTP Method와 매치되는 @GetMapping, @PostMapping 등
      • @RequestParam : 쿼리 파라미터, 폼 데이터, x-www-form-urlencoded 형식의 파라미터 전달 받기 가능
      • @PathVariable : 클라이언트 요청 URI에 패턴 형식으로 지정된 변수의 값을 파라미터로 전달 받기 가능
    • Map, HashMap 객체를 이용하면 자동으로 JSON형식으로 데이터 처리됨.
      • 핸들러 메서드 리턴 값으로 ResponseEntity 객체를 리턴.
      • new ResponseEntity<>(map, HttpStatus.CREATED);
  • 실습에서 페어님과 함께 만든 코드↓
 // 1. 회원 정보 수정을 위한 핸들러 메서드 구현
    @PatchMapping("/member/phone")
    public ResponseEntity modifyPhoneNumber(@RequestParam("memberId") Long memberId,
                                            @RequestParam("phone") String phone){
        (members.get(memberId)).put("phone", phone);

        return new ResponseEntity<>(members.get(memberId), HttpStatus.OK);
    }
    
    // 2. 회원 정보 삭제를 위한 핸들러 메서드 구현
    @DeleteMapping("/member")
    public ResponseEntity deleteMember(@RequestParam("memberId") Long memberId){
        members.remove(memberId);
        return new ResponseEntity<>(null, HttpStatus.NO_CONTENT);
    }
// 1. 커피 정보 수정을 위한 핸들러 메서드 구현
    @PatchMapping("/coffee/korname-price")
    public ResponseEntity modifyKorNameAndPrice(@RequestParam("coffeeId") Long coffeeId,
                                                @RequestParam("korName") String korName,
                                                @RequestParam("price") int price){
        (coffees.get(coffeeId)).put("korName", korName);
        (coffees.get(coffeeId)).put("price", price);

        return new ResponseEntity<>(coffees.get(coffeeId), HttpStatus.OK);
    }

    // 2. 커피 정보 삭제를 위한 핸들러 서드 구현
    @DeleteMapping("/coffee")
    public ResponseEntity deleteCoffee(@RequestParam("coffeeId") Long coffeeId){
        coffees.remove(coffeeId);
        return new ResponseEntity<>(null, HttpStatus.NO_CONTENT);
    }
  • 페어 실습 하기 전에 학습하면서 개인 실습할 때, 처음에 포스트맨에서 CORS오류가 났는데, 오류 고쳐보겠다고 구글링해서 포스트맨 에이전트도 깔고 그랬음,,
    https://wooogy-egg.tistory.com/10
    이후에 다른 오류 원인도 있었는데, 메인 메서드의 패키지 위치가 잘못된 것이었다. @ComponentScan의 범위 때문에.
  1. 오전 데일리 코딩
  • 오늘은 BFS 문제였는데, 지난 DFS는 결국 레퍼런스 봤지만, 얘는 비슷한 유형이니 풀 수 있을 줄 알았다. 하지만 또 풀지 못했고,, 결국 레퍼런스 봤다ㅠ
    알고리즘..⭐️
    밑에는 레퍼런스 코드. 그래도 레퍼런스 코드 보면 이해는 가서 다행이라면 다행..
    이전에 BFS 처음 배울 때 Queue를 썼던 기억이 어렴풋이 났다.
public ArrayList<String> bfs(tree node) {
    Queue<tree> queue = new LinkedList<>();
    ArrayList<String> values = new ArrayList<>();
    queue.add(node);

    while(queue.size() > 0) {
      tree curNode = queue.poll();

      values.add(curNode.getValue());

      if(curNode.getChildrenNode() != null) {
        queue.addAll(curNode.getChildrenNode());
      }
    }
    return values;
	} 

<느낀 점>
섹션3 첫 날!
컨텐츠가 엄청 자세해서 좋았다. 그만큼 양이 많아서 오늘 다 못 읽었지만..;;
기본 파트는 다 봤는데, 심화 파트를 거의 하나도 못 봤다. 주말에 봐야할 것 같다.

페어 실습은 어렵지 않을까 걱정했는데, 생각보다 순한맛의 과제였다.
2시간 주어졌는데 1시간만에 끝냄ㅎㅎ 룰루~
무난히 끝나서 다행이다.
확실히 직접 해보니까 더 재밌는 것 같다.

섹션3부터 뭔가 진짜로 배우기 시작하는 느낌이 들고, 그만큼 공부할 것이 많아 보인다.
뒤쳐지지 않게 부지런히 공부해야겠다.

알고리즘은 지금 약간 노답인데, 일단은 메인인 Spring 학습을 잘 따라가는 게 먼저다.
데일리 코딩 하루에 한 문제씩이라도 열심히 보는 수밖에...

요구사항에 맞춰 어떤 어플리케이션의 기능을 특정 범위로 제한하는 것을 어플리케이션 경계를 설정한다고 하는데, 초보 개발자에게는 이게 굉장히 중요해보인다.

내일도 화이팅.

0개의 댓글