에이콘아카데미 회고/5회차) 자바기반 풀스택 개발자 양성과정
Spring, Spring Boot) 56번째 회고
유쨈미
2024. 7. 9. 17:47
1. AOP를 활용한 로그인 구현
AOP (Aspect-Oriented Programming)는 횡단 관심사를 분리하여 모듈성을 높이는 프로그래밍 기법이다.
로그인 기능을 구현할 때 AOP를 사용하면, 핵심 비즈니스 로직과 인증 로직을 분리할 수 있다.
어노테이션/메소드 | 설명 |
@Aspect | 해당 클래스가 Aspect임을 선언 |
@Around | 대상 메소드 실행 전후에 로직 추가 |
ProceedingJoinPoint.proceed() | 원래 메소드 실행 |
💻 예시 코드
@Aspect
@Component
public class LoginAspect {
@Around("execution(* com.example.service.*.*(..))")
public Object loginCheck(ProceedingJoinPoint joinPoint) throws Throwable {
// 로그인 체크 로직
if(isLoggedIn()) {
return joinPoint.proceed();
}else {
throw new UnauthorizedException("로그인이 필요합니다.");
}
}
}
2. @Aspect와 @Around의 개념 및 활용
💡 @Aspect 개념 및 활용
@Aspect는 Spring AOP에서 관점(Aspect)을 정의하는 데 사용되는 어노테이션이다.
💡 @Aspect 개념
- 횡단 관심사(Cross-Cutting Concern)를 모듈화 한 클래스를 나타낸다.
- 로깅, 트랜잭션 관리, 보안 등 여러 객체에 공통적으로 적용되는 기능을 정의할 때 사용한다.
💡 @Aspect 활용
- 클래스 레벨에 적용하여 해당 클래스가 Aspect임을 선언한다.
- Spring의 자동 프록시 생성 기능과 함께 사용되어 AOP를 구현한다.
관련 어노테이션 | 설명 |
@Aspect | 해당 클래스가 Aspect임을 선언 |
@Component | Aspect를 Spring 빈으로 등록 |
💻 예시 코드
@Aspect
@Component
public class LogginAspect {
// Advice 메소드들이 여기에 정의된다.
}
💡 @Around 개념 및 활용
@Around는 Spring AOP에서 가장 강력한 Advice 유형 중 하나로, 메소드 실행의 전, 후, 예외 발생 시
모든 시점에 로직을 추가할 수 있다.
💡 @Around 개념
- 대상 메소드 실행의 완전한 제어권을 갖는다.
- 메소드 실행 전후에 로직을 추가하거나, 메소드 실행 자체를 건너뛸 수 있다.
💡 @Around 활용
- 메소드 레벨에 적용하여 Advice를 정의한다.
- ProceedingJoinPoint를 파라미터로 받아 원본 메소드의 실행을 제어한다.
주요 메소드/개념 | 설명 |
ProceedingJoinPoint | 원본 메소드의 실행을 제어하는 객체 |
proceed() | 원본 메소드를 실행 |
getSignature() | 실행 중인 메소드의 시그니처 정보를 얻음 |
💻 예시 코드
@Aspect
@Component
public class PerformanceAspect {
@Around("execution(* com.example.service.*.*(..))")
public Object measureExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
Object result = joinPoint.proceed(); // 원본 메소드 실행
long executionTime = System.currentTimeMillis() - start;
System.out.println(joinPoint.getSignature() + " 실행 시간 : " + executionTime + "ms");
return result;
}
}
3. Spring과 JDBC를 이용한 DB연동
Spring은 JDBC를 추상화하여 데이터베이스 연동을 쉽게 만든다.
JdbcTemplate 클래스를 사용하면 반복적인 코드를 줄일 수 있다.
클래스/메소드 | 설명 |
JdbcTemplate | JDBC 작업을 잔순화하는 핵심 클래스 |
query() | SELECT 쿼리 실행 |
update() | INSERT, UPDATE, DELETE 쿼리 실행 |
💻 예시 코드
@Repository
public class UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public User findById(Long id) {
return jdbcTemplate.queryForObject(
"SELECT * FROM users WHERE id = ?",
new Object[]{id},
(rs, rowNum) -> new User(rs.getLong("id"), rs.getString("name"))
);
}
}
4. 컴포넌트스캔과 어노테이션
Spring은 어노테이션을 통해 빈을 자동으로 등록하고 의존성을 주입한다.
어노테이션 | 설명 |
@Component | 일반적인 스프링 관리 컴포넌트 |
@Service | 비즈니스 로직을 담당하는 컴포넌트 |
@Repository | 데이터 접근 계층 컴포넌트 |
@Autowired | 의존성 자동 주입 |
5. ApplicationContext 활용
ApplicationContext은 Spring IoC컨테이너의 인터페이스로, 빈의 생성과 관리를 담당한다.
메소드 | 설명 |
getBean() | 컨테이너에서 빈을 가져옴 |
getBeansOfType() | 특정 타입의 모든 빈을 가져옴 |
💻 예시 코드
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = context.getBean(UserService.class);
6. Spring 핵심 개념 요약정리
- 의존성 주입 DI
객체 간의 의존관계를 외부에서 설정한다. - 제어의 역전 IoC
객체의 생명주기 관리를 프레임워크가 담당한다. - AOP (Aspect-Oriented Programming)
횡단 관심사를 분리하여 모듈성을 향상시킨다. - PSA (Portable Service Abstraction)
환경과 세부기술에 독립적인 추상화 계층을 제공한다.