멋사 Backend 35일차 🦁

신재원·2023년 6월 8일

💬 Java

Counting 정렬

  • 특정 조건에 부합되어야 사용 가능
  • 구현이 어려워 버블정렬, 삽입정렬을 사용해야겠다.

🍀 Spring

👀 역할과 책임을 잘 분리해야한다.
현업에서는 빈번하게 잘 지켜지지 않는다고 합니다.
( 일단 결과만 원하는 대로 나오면 된다고 생각하기 때문 )

🐱‍🚀 @PostMapping() vs @GetMapping()

  • HTTP 요청의 메소드에 따라 매핑을 처리하는 방식의 차이가 있습니다.
  • HTML의 form 태그에 method 방식을 작성해주어야 한다.
    ( 개발자들 사이의 관례상 )
    (Get 방식은 "get" 작성)

@GetMapping("url"), @PostMapping("url") 로 작성
한 가지 더 차이점은

  • Get 방식으로 했을경우 사용자가 입력한 값이 노출되는것을 볼수있습니다.
  • Post 방식의 경우는 사용자가 입력한 값이 노출되지 않습니다.
    (보안상의 데이터는 Post 방식 사용)

📣 CR (Create, Read)

  • Update, Delete 는 뒤에 다룰 예정

Model과 Controller 분리

Model 객체는 대표적으로 @Service, @Repository 를 구현
(컨트롤러에서 뷰로 데이터 전달)

  • 기존 코드
@Controller
public class Controller {
private int hits = 0;
@RequestMapping("/hits")
    public String hits(Model model) {
        hits++;
        model.addAttribute("hits", hits);
        return "hits";
    }
}

문제점
@RequestMapping() 을 사용해 method 방식을 작성해줘도 되지만,
최근에는 @GetMapping() @PostMapping() 을 사용해 구체적으로 명시한다고 합니다.
View는 분리가 되었지만, Controller에서 데이터 값을 조작을 하고 있습니다. (비즈니스 로직 처리, View 반환, 역할이 많다)

  • 수정 코드

✔ 비즈니스 로직 (Model)

@Service
public class HitsService {
    private int hits = 0;

    public int increaseHits() {
        return ++hits;
    }
}

✔ 컨트롤러

@Controller
public class Controller {
	// final로 선언해줘야 좋다. (불변성)
    private final HitsService hitsService;
    
    // 생성자 주입
    public Controller(HitsService hitsService) {
        this.hitsService = hitsService;
    }

    @GetMapping("/hits")
    public String hits(Model model) {
        int hits = hitsService.increaseHits();
        model.addAttribute("hits", hits);
        return "hits";
    }
}

PRG 패턴

  • Post - Redirect - Get 패턴의 약자 이며,
  • 페이지에서 새로고침을 하면 이런 화면을 한번쯤 보신분들도 있을것이다.
    이런 화면이 뜨는 대표적인 이유는 마지막의 메소드 요청 방식이
    Post 였기 때문입니다.
  • 이 화면에서 계속 버튼을 누르게 되면, DB에 똑같은 값만 바인딩 됩니다.
    ❗❗ 초기 이커머스 회사에서 많이 발생했다고 합니다.
    ex : 결제가 2번됨, 똑같은 주문이 4번 발생함
  • 기존 코드

View 의 반환으로 @PostMapping() 의 url을 반환하여서 위의 사진과 같은 화면이 발생합니다.

  • 수정 코드

redirect : 주소명 을 반환하여 Post 메소드 방식이였던것을 Get 으로 돌립니다.
( PRG 패턴 )

🙋‍♂️ DTO DAO 차이

DTO : Data Transfer Object 로 데이터가 이동을 한다는 객체
( 뒤에서 자세히 다룰 예정 )

DAO : Data Access Object 로 DAO는 앞에서 자세히 다루었습니다.
( 데이터를 접근하는 객체 )

0개의 댓글