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 : 컨트롤러는 사용자의 액션에 응답하는 컴포넌트입니다. 컨트롤러는 모델을 업데이트하고, 다른 액션을 수행합니다.
서비스: 핵심 비즈니스 로직 구현
리포지토리: 데이터베이스에 접근
도메인: 비즈니스 도메인 객체, 객체를 DB에 저장하고 관리
예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨
클래스 의존 관계
리포지토리는 인터페이스로 선언을 하고 서비스와 리포지토리에서 구현을 한다.
@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);
}
}