🐞AOP 적용 에러 해결🐞
스프링 부트를 실행시켰을때 컨트롤러에서 확인차 찍은 로그만 콘솔에 나왔다 이로인해 AOP가 적용되지 않았음을 알수있었다

🔎원인분석
현재 패키지 구조를 보면 수업때 쓴 코드를 따로 정리하고 새로 패키지를 만들어서 정리해두었다

PointcutCommon에 설정된 경로
@Aspect
public class PointcutCommon { // 포인트컷만 관리하는 클래스
@Pointcut("execution(* com.example.biz..*Impl.*(..))")
public void aPointcut() {}
@Pointcut("execution(* com.example.biz..*Impl.get*(..))")
public void bPointcut() {}
}
현재 포인트컷 설정을 보면 경로가 패키지 정리전 경로로 연결되있어서 적용이 안됬음을 알수있었다
🛠️해결방법
1. 포인트컷설정의 경로를 변경한다
@Aspect
public class PointcutCommon { // 포인트컷만 관리하는 클래스
@Pointcut("execution(* com.example.demo..*Service..*(..))")
public void aPointcut() {}
@Pointcut("execution(* com.example.demo..*Service..*List(..))")
public void bPointcut() {}
}
경로를 바꿔주고 실행시키면 AroundAdvice만 실행되는것을 볼수있다

Before를 실행시키기 위해 코드를 확인한 결과 포인트컷이 전체에 적용되는게 아니라 리스트에만 적용이 되어있었고 로그를 출력할때 인자로 ProceedingJoinPoint를 사용했기때문에 적용이 되지 않았다
public class BeforeAdvice {
@Before("PointcutCommon.bPointcut()")
public void printBusinessMethod(ProceedingJoinPoint pjp)
ProceedingJoinPoint는 AroundAdvice에서 사용하고 before에서 사용할때는 인자로 joinPoint를 사용해야한다
수정후
@Aspect
@Service
public class BeforeAdvice {
@Before("PointcutCommon.aPointcut()")
public void printBusinessMethod(JoinPoint jp) {
String methodName = jp.getSignature().getName();
System.out.println("현재 수행중인 비즈니스 메서드 [" + methodName + "]입니다");
}
}
✔️콘솔 확인

AOP가 잘 적용된것을 볼수있다
🐞 EmptyResultDataAccessException 🐞
부트를 실행하고 테스트를 위해 로그인시 비밀번호를 틀리게 입력했을때 생긴 에러다


🔎원인분석
에러를 해석해보면 현재 회원정보 조회가 0건인데 JdbcTemplate.queryForObject()를 사용했을때 무조건 1건이 나온다고 가정했기 때문에 생긴 에러로 즉 expected 1, actual 0 = 한 줄을 기대했는데 결과가 0이다 라는뜻이다
queryForObject를 사용시 결과가 0이라면 EmptyResultDataAccessException 이라는 에러를 보여준다
🛠️해결방법
memberDAO에서 로그인 조회를 할때 트라이 캐치를 사용하여 에러를 잡고 null을 반환하도록 한다
public MemberDTO getMember(MemberDTO memberDTO) {
try {
return jdbcTemplate.queryForObject(
SELECT_ONE, // 예: "SELECT * FROM MEMBER WHERE MID=? AND MPW=?"
new MemberRowMapper(),
memberDTO.getMid(), memberDTO.getMpw()
);
} catch (org.springframework.dao.EmptyResultDataAccessException e) {
return null; // ✅ 아이디/비번 불일치 = 로그인 실패
}
}
🐞SQLException:Column count doesn't match value count at row 1🐞
회원가입 테스트를 하다가 발생한 에러다

🔎원인분석
테이블에 지정된 컬럼의 개수가 입력한 값과 맞지 않아서 생긴 에러다
현재 회원가입시 아이디와 비밀번호 이름만 받기때문에 DAO의 쿼리문의 파라미터가 3개다
private static final String INSERT = "INSERT INTO MEMBER VALUES(?,?,?,'USER')";
따라서 DAO의 insert를 다시 확인해보았다
//회원가입
boolean insertMember(MemberDTO memberDTO) {
if(jdbcTemplate.update(INSERT, memberDTO.getMid(),memberDTO.getMpw(),memberDTO.getMname()) <= 0) {
return false;
}
return true;
인서트에 문제없는것을 확인하고 멤버 테이블을 확인했다

확인결과 사용하지 않는 컬럼인 이메일 컬럼이 테이블에 안에 존재했다 따라서 이 컬럼을 사용하지 않아도 에러가 났던것이다
🛠️해결방법
테이블을 삭제하지 않고 컬럼만 지우기 위해 ALTER를 사용하여 이메일 컬럼을 제거해주었다
ALTER TABLE MEMBER DROP COLUMN MEMAIL;

확인을 해보면 컬럼이 제거된것을 확인할수 있다 따라서 회원가입기능이 정상작동하였다
'🐢🐢꼬부기 LV.2 | 실습•에러 > 🛡️껍질에 숨기(에러해결)' 카테고리의 다른 글
| 롬복 적용 에러해결 (0) | 2026.02.10 |
|---|---|
| Git Clone 후 Eclipse 프로젝트 Import 실패 해결 (0) | 2026.02.07 |
| 스프링 부트 Failed to configure a DataSource 에러 해결 (0) | 2026.01.30 |
| 스프링 부트 과제 에러 해결 (0) | 2026.01.19 |
| SQLException : No value specified (0) | 2026.01.15 |