20220524 TIL

Don Lee·2022년 5월 25일
0

EpiTIL

목록 보기
15/24

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

https://www.inflearn.com/course/스프링-입문-스프링부트/dashboard

  • build.gradle에 관한 간단한 설명.

  • HelloController.java의 동작 설명

    1. 웹 브라우저에서 ~8080/hello 요청.
    2. 1의 요청이 GetMapping(”hello”)와 매칭 됨.
    3. 그 아래의 메소드 동작.
    4. modeldataspring!!을 받아서return “hello”;를 함.


@GetMapping("hello-string")
    @ResponseBody
    public String helloString(@RequestParam("name") String name) {
        return "hello " + name;
    }


hello라는 객체를 return하면 json형태로 치환된다. 예시는 아래의 코드.

@GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name) {
        Hello hello = new Hello();

        hello.setName(name);
        return hello;
    }

    static class Hello {
        private String name;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }


@ResponseBody 사용 원리


  • 일반적인 웹 애플리케이션 계층 구조

    • 컨트롤러: 웹 MVC의 컨트롤러 역할
    • 서비스: 핵심 비즈니스 로직 구현
    • 리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리
    • 도메인: 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨
public interface MemberRepository {
    Member save(Member member);

    Optional<Member> findById(Long id);

    Optional<Member> findByName(String name);

    List<Member> findAll();
}

Optional을 쓰는이유: 인수가 null일 경우 처리

💡 왜 MemoryMemberRepository는 MemberRepository에 있는 모든 걸 override할꺼면 굳이 MemberRepository.interface를 만들어야 하는 것인가? → 개구리책에서 SRP; 단일 책임 원칙과 ISP; 인터페이스 분리 원칙을 참고해보자.
@AfterEach
    public  void afterEach(){
        repository.clearStore();
    }

만약 다른 메소드가 있다면 해당 메소드가 끝나고 @AfterEach에 있는 코드를 실행함. 메소드 마다 의존관계가 없어야하기 때문이다.


  • MVC: 이전에는 view밖에 없었다. 하지만 기술이 발전하고 늘어남에 따라 view와 model을 분리하기 시작했다. 마치 백엔드와 프론트가 있는 것과, html과 css를 분리하는 것 처럼.
  • 실무에선 로그를 많이 쓴다. 실무에선 sout를 사용하지 않는다.
profile
쾌락코딩

0개의 댓글