스프링 기초

밍키·2023년 3월 7일
0

Spring Framework

목록 보기
1/5
post-thumbnail

Spring 이란 JAVA의 웹 프레임 워크 이다.

프레임 워크는 어떠한 목적을 달성하기 위해 복잡하게 얽혀 있는 문제를 해결하기 위한 구조이자 약속이며, 소프트웨어 개발에 있어서 하나의 뼈대 역할을 한다.

즉 프레임 워크는 자주 쓰일 만한 기능들을 한데 모아 놓은 유틸(클래스)들의 모음(집합)이라고 정의할 수 있다.

page 만들기

@Controller
public class HelloSpring {
    //hello 라는 html에 들어가서 data항목을 helloSpring으로 변경
    @GetMapping("hello") // GetMapping은 localhost:8080//hello를 입력함으로써 아래 코드를 수행하게 만들어준다
    public String Hello(Model model)
    {
        model.addAttribute("data" , "helloSpring!!");
        return "hello";
    }

뷰 리졸버가 컨트롤러에서 hello를 리턴받은후 hello.html로 변환하여 사용자들이 볼수있게 웹브라우저에 띄어줌

웹 MVC란 ?

Model : 모델은 뷰가 렌더링하는데 필요한 데이터입니다. 예를 들어 사용자가 요청한 상품 목록이나, 주문 내역이 이에 해당합니다.
View : 웹 애플리케이션에서 뷰(View)는 실제로 보이는 부분이며, 모델을 사용해 렌더링을 합니다. 뷰는 JSP, JSF, PDF, XML등으로 결과를 표현합니다.
Controller : 컨트롤러는 사용자의 액션에 응답하는 컴포넌트입니다. 컨트롤러는 모델을 업데이트하고, 다른 액션을 수행합니다.

웹 애플리케이션 계층 구조

컨트롤러: 웹 MVC의 컨트롤러 역할

서비스: 핵심 비즈니스 로직 구현

리포지토리: 데이터베이스에 접근

도메인: 비즈니스 도메인 객체, 객체를 DB에 저장하고 관리
예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨

클래스 의존 관계

리포지토리는 인터페이스로 선언을 하고 서비스와 리포지토리에서 구현을 한다.

JPA

> JPA는 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해준다. JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환을 할 수 있다. JPA를 사용하면 개발 생산성을 크게 높일 수 있다.
@Entity //entity가 붙어야한다
public class Member {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }
}

리포지토리

public class JpaMemberRepository implements MemberRepository {
 private final EntityManager em; //em을 선언해야한다
 public JpaMemberRepository(EntityManager em) {
 this.em = em;
 }
 public Member save(Member member) {
 em.persist(member);
 return member;
 }
 public Optional<Member> findById(Long id) {
 Member member = em.find(Member.class, id);
 return Optional.ofNullable(member);
 }
 public List<Member> findAll() {
 return em.createQuery("select m from Member m", Member.class)
 .getResultList();
 }
 public Optional<Member> findByName(String name) {
 List<Member> result = em.createQuery("select m from Member m where 
m.name = :name", Member.class)
 .setParameter("name", name)
 .getResultList();
 return result.stream().findAny();
 }
}

*의존성 주입

@Configuration
public class MemberConfig {
    private final DataSource dataSource;
    private final EntityManager em;
    public MemberConfig(DataSource dataSource, EntityManager em) {
        this.dataSource = dataSource;
        this.em = em;
    }
    @Bean
    public MemberService memberService()
    {
        return new MemberService(memberRepository());
    }

    @Bean //스프링 컨테이너에 추가하는 애노테이션이며 해당 클래스는 스프링 컨테이너에 들어가게된다
    public MemberRepository memberRepository()
    {
        //return new MemoryMemberRepository();
        return new JpaMemberRepository(em);
    }
}

 
 
profile
밍키의 개발 일기장

0개의 댓글

관련 채용 정보