[Inflearn]/자바 스프링 프레임워크(renew ver.)

[inflearn] 20240113 [스프링-프레임워크] - 17강 필기

Jelly-fish 2024. 1. 13. 16:20

17강 - Service & Dao 객체 구현

웹 프로그래밍의 구조에서 Service 와 DAO 객체의 구현에 대해서 학습한다.

 

17-1 웹 어플리케이션 준비
17-2 한글 처리
17-3 서비스 객체 구현
17-4 DAO 객체 구현

 

 

17-1 웹 어플리케이션 준비

 

[웹 어플리케이션의 일반적인 프로그램 구조]

 

사용자 요청(브라우저)

프론트 컨트롤러 (Dispatcher Servlet) → 뷰 (View, Jsp 파일)

컨트롤러

서비스

DAO (Data Access Object)

Database

 

17-2 한글 처리

web.xml [DispatcherServlet 서블릿 등록]
 <!-- Dispatcher Servlet 등록 -->
 <servlet>
 	<servlet-name>appServlet</servlet-name>
 	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 	<init-param>
 		<param-name>contextConfigLocation</param-name>
 		<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
 	</init-param>
 	<load-on-startup>1</load-on-startup>
 </servlet>

 

web.xml [한글 처리]
 <filter>
 	<filter-name>encodingFilter</filter-name>
 	<filter-class>
 		org.springframework.web.filter.CharacterEncodingFilter
 	</filter-class>
 	<init-param>
 		<param-name>encoding</param-name>
 		<param-value>UTF-8</param-value>
 	</init-param>
 	<init-param>
 		<param-name>forceEncoding</param-name>
 		<param-value>true</param-value>
 	</init-param>
 </filter>

<filter-mapping>
	<filter-name>encodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

 

출처 - Inflearn - 스프링 프레임워크 (renew) 17강

17-3 서비스 객체 구현

  • 방법 1 : new 연산자를 이용한 service 객체 생성 및 참조 (지양해야 할 방식)
// 의존 객체를 직접 주입하는 방식
MemberService service = new MemberService();

  • 방법 2 : 스프링 설정파일을 이용한 서비스 객체 생성 및 의존 객체 자동 주입
<!-- ① applicationContext.xml 파일에서 다음과 같이 빈(Bean) 객체 생성 -->
<beans:bean id="service" class="com.bs.lec17.member.service.MemberService"></beans:bean>

 

// ② 의존 객체를 필요로 하는 클래스에 의존 객체 자동 주입
@Autowired
MemberService service;

  • ★ 방법 3 : 어노테이션을 이용해서 서비스 객체 생성 및 의존객체 자동 주입 ★
// ① 서비스 객체 생성
@Repository("memService")
public class MemberService implements IMemberService
{ .... }
// ② 의존 객체 자동주입
@Resource(name="memService")
MemberService service;

 

17-4 DAO 객체 구현

 

Member.java (회원 정보를 담는 객체 DTO (Data Transfer Object))

 

package com.bs.lec17.member;

public class Member
{
	private String memId;
	private String memPw;
	private String memMail;
	private String memPhone1;
	private String memPhone2;
	private String memPhone3;
	
	// getter / setter 생략 ...
    
	public String getMemId() {
		return memId;
	}
	public void setMemId(String memId) {
		this.memId = memId;
	}
    
    	//    ....
    
}

IMemberDAO.java (인터페이스)

 

package com.bs.lec17.member.dao;

import com.bs.lec17.member.Member;

public interface IMemberDAO
{
    // 회원 정보 입력
    void memberInsert(String memId, String memPw, String memMail, String memPhone1, String memPhone2, String memPhone3);
    // 회원 정보 검색 → id, pw 로 검색 후 회원 객체 반환
    Member memberSelect(String memId, String memPw);
    // 회원 정보 수정
    void memberUpdate();
    // 회원 정보 삭제
    void memberDelete();
}

MemberDAO.java (위의 인터페이스를 구현한 DAO 객체)

 

package com.bs.lec17.member.dao;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

import com.bs.lec17.member.Member;

//@Component
@Repository
public class MemberDao implements IMemberDao {

	private HashMap<String, Member> dbMap;
	
	public MemberDao() {
		dbMap = new HashMap<String, Member>();
	}
	
	@Override
	public void memberInsert(String memId, String memPw, String memMail, String memPhone1, String memPhone2, String memPhone3) {
		System.out.println("memberInsert()");
		System.out.println("memId : " + memId);
		System.out.println("memPw : " + memPw);
		System.out.println("memMail : " + memMail);
		System.out.println("memPhone : " + memPhone1 + " - " + memPhone2 + " - " + memPhone3);
		
		Member member = new Member();
		member.setMemId(memId);
		member.setMemPw(memPw);
		member.setMemMail(memMail);
		member.setMemPhone1(memPhone1);
		member.setMemPhone2(memPhone2);
		member.setMemPhone3(memPhone3);
		
		dbMap.put(memId, member);
		
		Set<String> keys = dbMap.keySet();
		Iterator<String> iterator = keys.iterator();
		
		while (iterator.hasNext()) {
			String key = iterator.next();
			Member mem = dbMap.get(key);
			System.out.print("memberId:" + mem.getMemId() + "\t");
			System.out.print("|memberPw:" + mem.getMemPw() + "\t");
			System.out.print("|memberMail:" + mem.getMemMail() + "\t");
			System.out.print("|memberPhone:" + mem.getMemPhone1() + " - " + 
											   mem.getMemPhone2() + " - " + 
											   mem.getMemPhone3() + "\n");
		}
		
	}

	@Override
	public Member memberSelect(String memId, String memPw) {
		Member member = dbMap.get(memId);
		
		return member;
	}

	@Override
	public void memberUpdate() {

	}

	@Override
	public void memberDelete() {

	}

}

 


★ 방법 3 : 어노테이션을 이용해서 서비스 객체 생성 및 의존객체 자동 주입

 


서비스 객체로 쓰일 클래스라는 것을 명시하기 위해
어노테이션 `@Service` 를 MemberService 에 명시해 준다.

 

MemberService.java
@Service
public class MemberService implements IMemberService
{
	....
}


서비스 객체를 필요로 하는 컨트롤러인 MemberController 에서
`@AutoWired` 어노테이션을 작성해 주면, 의존객체 자동주입이 이루어진다.

 

@Controller
public class MemberController
{
    @Autowired
    MemberService service;
    
    ....
}

★ [Key Point]

서비스 객체인 MemberService.java 클래스 상단에

`@Service` 어노테이션을 붙여주게 되면
자동적으로 스프링 컨테이너에 담기게 되기 때문에, 
MemberController.java 에서 `@AutoWired` 어노테이션만으로

의존 객체 자동 주입이 이루어진 것이다.

 


`@Service` 를 대체할 수 있는 어노테이션
  1.  `@Component`
  2.  `@Repository`

DAO 객체에서의 `@Component` `@Repository` 어노테이션 사용.

 

DAO 객체도, Service 객체와 마찬가지로

`@Component`나, `@Repository` 어노테이션을 클래스에 명시해 주는 방법을 통하여

자동적으로 스프링 컨테이너에 담기도록 처리할 수 있다.

 

MemberDAO.java
@Component
// @Repository
public class MemberDAO implements IMemberDAO
{
	....
}

 

MemberService.java
@Autowired
MemberDao dao;