xml파일은 각자의 역할을 하는데, servlet-context.xml파일과 root.xml 파일의 bean들을 관리하는 범위를 제대로 지정해주지 않으면 빈이 어떤 파일에 정의되어야 하는지 혼란스러울 수 있다. 두 파일의 역할과 빈 범위 설정을 잘 지정해줘야 한다.
그래서 controller에 대한건 에 대한건 servlet-context.xml파일에 넣고
나머지를 root에 넣자, 라는 정의를 먼저 설정할 겁니당

1. servlete-context.xml에서 자동으로 bean을 받는 범위를 수정하기.
com.myaws.myapp.controller 패키지 내에 있는 모든 스프링 컴포넌트를 찾아서 자동으로 등록한다고 설정한다. 딱 컨트롤러에 있는 것만 빈을 등록한다!!

<context:component-scan base-package="com.myaws.myapp">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> <!-- 스테레오 안에 있는 컨트롤러를 제외하겠다 -->
</context:component-scan>
2. root.xml에도 범위를 지정해주면 된다.
<context:exclude-filter> 태그는 스캔 과정에서 특정 컴포넌트를 제외하는 필터를 정의 할 수있다.
타입의 유형을 annotation으로 설정해서 특정 애노테이션이 붙은 클래스들을 제외하겠다는 의미.
여기서는 @Controller 애노테이션이 붙은 클래스를 제외하겠다고 설정한다.
이제 멤버컨트롤러로 가서 값을 넘겨받아야하는데, 하기 전에 인터페이스를 하나 생성해야 한다.

4. service에 인터페이스 하나 생성하기
인터페이스는 미완성된 메소드가 있는곳을 뜻한다.

5. 메소드 하나를 선언만 해준다.
여기서는 수행할 작업을 정의만 해주고, 구체적인 구현은 클래스에서 처리하기 때문에 딱 요것만... 어디서 구현할거냐면
MemberService 인터페이스의 역할
MemberService는 memberInsert 메서드를 선언하여 서비스 계층에서 수행할 작업을 정의하고, 구체적인 구현은 이 인터페이스를 구현한 클래스에서 처리합니다.
이 인터페이스는 컨트롤러가 서비스 로직과 상호작용할 수 있는 명세를 제공하므로, 추후에 서비스 로직을 변경하더라도 인터페이스를 통해 느슨한 결합을 유지할 수 있습니다.

5-1. 멤버매퍼에도 같은 메소드를 하나 만들어준다.


7.클래스 옆에 implements MemberService 를 적으면 빨간줄이 뜨는데 마우스를 갖다대서
add 뭐시기 눌러주면 자동으로 메소드가 만들어진다.
여기에 마이바티스와 연동을 할것이다!! 그리고 클래스에 @Service 어노테이션 넣어서 선언해주기

@Service
public class MemberServiceImpl implements MemberService{
private MemberMapper mm;
@Autowired /* 주입시킨다 */
public MemberServiceImpl(SqlSession sqlSession) {
this.mm = sqlSession.getMapper(MemberMapper.class); /* 꼭 뒤에 클래스가 붙어야한다. */
}
@Override
public int memberInsert(MemberVo mv) {
int value = mm.memberInsert(mv);
return value;
}
}
8-1. 서비스 타입에 객체를 생성시키겠다, 라고 어노테이션을 만든다.
8-2. MemberServiceImpl 생성자를 하나 만들고 매개변수로 sql넣는다.
8-3. @Autowired로 주입시킨다. 객체로 생성된것 중에 매개변수 타입과 같은것을 찾아서 주입시키는 방식.
8-4. 매퍼는 우리가 만들어놓은 persistance안에 있는 멤버매퍼를 가져오는것이다. 마이바티스 전용 클래스를 쓰겠다! 라는거임
8-5. mm으로 멤버매퍼 변수 이름을 적어준다.

<!-- 아이디는 퍼시스탠스에 있는 이름과 동일하게 -->
<insert id="memberInsert" parameterType="mv">insert into member(memberid,memberpw,membername,membergender,memberbirth,memberaddr,memberphone,memberemail,memberhobby)
values(#{memberid},#{memberpw},#{membername},#{membergender},#{memberbirth},#{memberaddr},#{memberphone},#{memberemail},#{memberhobby})
</insert>

@RequestMapping(value="memberJoinAction.aws",method=RequestMethod.POST)
public String memberJoinAction(MemberVo mv) {
logger.info("memberJoinAction들어옴");
int value = memberService.memberInsert(mv);
logger.info("value: " + value);
String path="";
if (value == 1) { /* 성공하면 */
path ="redirect:/";
} else if (value == 0) { /* 실패하면 */
path ="redirect:/member/memberJoin.aws";
}
return path;
}