Skip to content

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

Notifications You must be signed in to change notification settings

jeongyeon0208/spring-intro

Repository files navigation

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

  • 섹션 1. 프로젝트 환경설정

    View 환경설정

    Untitled

    1. get방식으로 넘어와서 @GetMapping 으로 들어감
    2. return “hello” → 템플릿의 hello.html 찾아서 따임리프 템플릿 엔진 처리
    3. 즉 컨트롤러에서 리턴값으로 문자를 반환하면 ‘viewResolver’가 화면을 찾아서 처리해
    4. ‘resources:templates/’ + {ViewName} + .{html}

    template engine 쓰면 맘대로 설정 가능

  • 섹션 2. 스프링 웹 개발 기초

    1. 정적 컨텐츠

    파일 그대로 웹브라우저에 전달

    • 원리

      Untitled

      내장톰켓서버 요청 → 스프링한테 넘김 → 컨트롤에서 hello-static 찾아봄 → 없으면 내부 resources 내 static/hello-static.html 찾아서 반환

    2. MVC와 템플릿 엔진

    서버에서 변형 후 전달 (랜더링 된 html 전달)

    • 템플릿 엔진

      Untitled

      localhost:8080/hello-mvc?name=spring” 넘기면 내장 톰켓 서버 거쳐서 스프링한테 → 스프링이 helloController에 매핑 확인 후 메소드 호출 → hello-template 리턴 → 키는 name 값은 spring → viewResolver (화면관련해결자) 동작 → html 변환 후 웹브라우저 전달

    • MVC 패턴이란?

      MVC: Model, View, Controller의 약자로, 어플리케이션의 구성요소를 세가지 역할로 구분한 패턴

      사용자로부터의 요청은 Controller에서 받아 어떻게 처리할 지 결정

      이후 Model에서 데이터베이스를 처리

      이를 가지고 View를 통해 시각화

      Model : 데이터를 처리하는 영역으로 데이터를 가진 객체

      사용자가 원하는 모든 데이터를 가지고 있어야 함

      Model에 변화가 있을 때 Controller과 View에 이를 통보하고 사용자 요청이 있을 때 이를 수신하지만 View와 Controller에 대한 정보는 알면 X

      데이터 변경이 있을 때 Model이 직접 수정할 수 있게 View, Controller을 참조해서는 안된다

      View : 데이터를 보여주는 화면 (HTML, CSS, Javascript 등을 통해)

      View는 별도로 데이터를 저장하지 않고 단지 보여주기만!

      View도 다른 구성요소의 정보를 몰라야 함

      Controller : Model, View와 소통하며 사용자와 데이터 간 다리 역할

      사용자 입력이 있을 때 이에 대한 응답으로 Model과 View를 업데이트

      사용자의 요청은 Controller에 의해 처리

      Controller은 Model, View에 대한 정보를 가지고 있어야 함

      Model, View의 모니터링을 통해 수정 요청이 있을 때 각 구성요소에 통지할 수 있어야 함

    • MVC 패턴은 왜 필요할까?

      각 영역을 분할함으로써 서로 간의 의존성을 낮출 수 있음

      독립적인 영역으로 구성되면 각 영역 간 분업 및 협업이 원활

    3. API

    ex) 제이슨 데이터 구조 포멧으로 클라이언트에게 데이터 전달(view 없이 바로) / 서버끼리 통신할 때

    • @ResponseBody

      http의 body부에 이 data를 내가 직접 넣어주겠다!

      Untitled

      localhost:8080/hello-api를 치면 톰켓 내장 서버에서 스프링에 hello-api왔다고 던짐 → 스프링에서 @ResponseBody 붙어있으면 (안붙어있으면 viewResolver가) http에 그대로 data 넘김 → data 문자면 바로 문자 나오고, 객체면 jason 방식으로 data 만들어서 반환

    • API와 서버

      API는 “Application Programming Interface”의 약자로 서로 다른  애플리케이션에서 데이터를 읽고 쓸 때, 서로간 상호작용을 용이하게 함

      ex) 기상청의 소프트웨어 시스템에는 날씨 데이터, 휴대폰의 날씨 앱은 API를 통해 기상청의 소프트웨어 시스템과 소통하여 휴대폰에 날씨 정보를 표시

      서버는 서비스를 제공하는 소프트웨어, 클라이언트는 서비스를 사용하는 소프트웨어

      클라이언트가 요청을 하고 서버는 그에 따른 응답 / 요청을 받아 응답을 하는 과정 = 서비스

      서버는 다양한 형태 ex)웹서버, 데이터베이스서버 등

      요청을 보내는 앱을 클라이언트라고 생각하면, 응답을 보내는 앱이 서버

      위의 예시에서 기상청의 데이터베이스가 서버이고, 휴대폰 앱은 클라이언트

  • 섹션 3. 회원 관리 예제 - 백엔드 개발

    • shift + f6 : 같은 이름 rename

    • ctrl + alt + v : 변수 추출

    • test 먼저 만드는게 테스트주도개발 티디디(?)

    • ctrl + alt + shift + t : 메소드 추

    • ctrl + shift + t : 테스트 만들어

    • alt + insert : constructor, getter setter 등 추가

    • ctrl + 클릭 : 메소드 보기 / ctrl + alt + 왼쪽(←) : 이전거

    • //given//when//then

      뭔가 주어졌을 때, 이걸 실행했을 때, 이게 나와야돼!

  • 섹션 4. 스프링 빈과 의존관계

    • 컨트롤러 : 멤버 서비스를 통해 회원가입, 조회 할 수 있어야됨 (컨트롤러 - 멤버서비스 의존)

    컴포넌트 스캔과 자동 의존관계 설정

    • 컴포넌트 스캔

      • @Controller

        @Controller 쳐두면 기능 없어도, 스프링 뜰 때 컨테이너 (스프링 통) 생기고, 멤버 컨트롤러로 객체 생성해서 스프링에 넣고 관리

      • 스프링 컨테이너에 등록하고 쓰기

        new 해서 쓰면 다른 여러 컨트롤러들이 MemberService 쓸 수 있어서 스프링 컨테이너에 등록하고 쓰는게 좋다!

        • 생성자 만들고 @Autowired
      • @Service

        스프링이 멤버 서비스로 등록해줌

      Untitled

    자바 코드로 직접 스프링 빈 등록하기

    하나하나 직접 설정 파일 등록하기

  • 섹션 5. 회원 관리 예제 - 웹 MVC 개발

    • 우선순위 : 스프링 컨테이너에서 찾고 static 찾음 / 컨트롤러에서 @Getmapping 에서 먼저 찾음
    • url에 직접 치면 Get방식
    • @PostMapping : data 를 form에 넣어서 전달할 때
    • @Getmapping : 주로 조회할때
  • 섹션 6. 스프링 DB 접근 기술

    • @SpringBootTest : 스프링 컨테이너와 테스트를 함께 실행한다.
    • @Transactional : 테스트 케이스에 이 애노테이션이 있으면, 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백한다. 이렇게 하면 DB에 데이터가 남지 않으므로 다음 테스트에 영향을 주지 않는다.
    • ctrl + alt + n : inline

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published