Spring Boot - 스프링 컨테이너

UnKnown12·2022년 11월 22일
0

Spring Boot

목록 보기
1/13
post-thumbnail

📌 Spring Container 구조

  • [View] DispatcherServlet 을 통해 사용자의 요청을 View 영역에서 받고,
    받은 요청을 @Controller 영역에 전달

  • @Controller 영역에서는
    사용자의 요청을 에 알맞게 메소드를 실행 ( Front Controller 방식을 통해 )
    @Controller 영역에서 생성되는 메소드들은 모두
    자바 객체인 Bean 형태로 생성되고

  • 생성 된 Bean 객체가
    @Repository , @service 어노테이션을 적용받아
    스프링 컨테이너 내부에서 이동이 가능하다

  • @Service 어노테이션은 스프링 컨테이너 내부에서 서비스 로직을 담당
    ( 내부 java 메소드의 연결 + 저장 + 호출 을 담당 )

  • @Repository 어노테이션은 스프링 컨테이너 내부에서 외부 I/O 처리 ( Input/Output )
    즉, 외부 DB 와 연결하고 저장 및 호출을 담당

ex)

  • Controller: 웹 MVC의 컨트롤러 역할
  • Service: 핵심 비지니스 로직 (회원가입, 탈퇴 등)
  • Repository: DB에 접근, 도매인 객체를 DB에 저장/관리
  • Domain: 비지니스 도메인 객체 (회원, 주문, 상품 등등)

📌 @ Controller

  • 사용자의 요청에 맞게 서비스를 실행하는 컨트롤러 영역

  • Spring Boot 에서 @Controller 어노테이션을 사용하면
    기본적으로 사용자에 요청에 따라 달라지는
    Front Controller 의 역할을 가지고 있다.

View 영역의 form 태그 액션 값에 따라
실행되는 컨트롤려 영역이 나뉘어 진다.

	private final MemberService memberService;

	/*
	 *  클래스의 의존관계를 @Autowired 어노테이션 한번의 선언만으로
	 *  스프링 컨테이너가 자동으로 연결해 주는 것. 
	 *  Java 내부 메소드 실행을 담당하는 @Service 어노테이션을 연결함으로 써
	 *  
	 *  사용자 요청에 알맞게 @Controller 어노테이션의 업무를 실행 
	 *  
	 *  쉽게말해, @Controller 어노테이션과 @Service 어노테이션을 잇겟다는 의미
	 */
	@Autowired
	public MemberController(MemberService memberService) {
		this.memberService = memberService;
	}

	@GetMapping(value = "/members/new")
	public String createFrom() {
		return "members/createMemberForm";
	}

	@PostMapping(value = "/members/new")
	public String create(MemberFormDTO form) {
    	/* 사용자가 이름을 입력하면 
        * 해당 이름을 MemberFormDTO 값에 저장하고 
        *  @ Serivce의 join(member)를 실행하여 java 메소드 내에 저장 
        * 저장된 데이터가 @Repository 를 통해 DB에 저장 
        */ 
		Member member = new Member();
		member.setName(form.getName());

		memberService.join(member);

		// @Controller -> @Service -> @Repository 업무가 모두 끝나면 홈 화면으로 리턴
		return "redirect:/";
		// return "forward:/";
	}

	@GetMapping("/members")
	public String list(Model model) {
		List<Member> members = memberService.findMembers();
		model.addAttribute("members", members);
		return "members/memberList";
	}

📌 @Service

  • 스프링 컨테이너 내부의 Java 서비스 로직을 담당
    사용자에 요청에 맞게 회원가입 또는 전체회원 조회 업무를 실행하는 메소드 를 가진다.
	@Service
@Transactional
public class MemberService {

	// MemberRepository memberReposity = new MemoryMemberRepository();
	private final MemberReposity memberRepository;
	
	/*
	 *  마찬가지로, @Autowired 어노테이션을 통해
	 *  @Service 어노테이션 + @Repository 어노테이션을 연결한다
	 */
	@Autowired
	public MemberService( MemberReposity memberRepository) {
		this.memberRepository = memberRepository;
	}
	
	// 회원 가입
	public int join(Member member) {
		memberRepository.save(member);
		return member.getId();
		
	}
	// 전체회원 조회 
	public List<Member> findMembers(){
		return memberRepository.finaAll();
	}

📌 @Repository

  • 스프링 컨테이너 외부 I/O 처리를 담당

+ JPA 를 통해 어떠한 DB 환경이더라도 자동으로 환경에 맞추어
대량의 데이터 Input / Output 를 실행한다.

@Repository
public class JpaMemberRepository implements MemberReposity {

	// JPA(@Entitiy)를 EntitiyManager 를 통해 모든지 동작 가능하다.
	private final EntityManager em;

	public JpaMemberRepository(EntityManager em) {
		this.em = em;
	}

	@Override
	public Member save(Member member) {
		// 멤버 data 저장 
		em.persist(member);
		return member;
	}

	@Override
	public List<Member> finaAll() {
		// select 한 내용을 "모두" 리턴하는 메소드 
		return em.createQuery("select m from Member m", Member.class).getResultList();
	
		/*
		 *  select m from Member m : JPQL 이라는 쿼리 
		 */
	}

📌 @Entity

  • @Repository 어노테이션 에서 JPA 실행하는 코드
  • data를 저장하는 VO 와 전송/호출 역할을 하는 DTO 모두 한꺼번에 실시한다
    ( VO + DTO )
// @Entitiy : JPA 가 관리하는 클래스 
@Entity
public class Member {
	// PK 키 
	@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "mySequence")
	@SequenceGenerator(name = "mySequence", sequenceName = "member_seq" , allocationSize = 1) 
	private int id;
	private String name;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
profile
Hyobin12

0개의 댓글