VARCHAR(50)이랑 VARCHAR(255)의 차이는 저장할 수 있는 문자열의 최대 길이다.
VARCHAR(50) → 최대 50자까지 저장 가능
VARCHAR(255) → 최대 255자까지 저장 가능
둘 다 가변 길이 문자열을 저장하는 타입이라, 실제로 저장된 문자열 길이만큼의 공간만 차지한다. 예를 들어, VARCHAR(255) 컬럼에 "hello"라는 5글자 문자열을 저장하면, 5자만큼만 공간을 사용한다.
50 쓰고 언제 255 쓸까?VARCHAR(50)은 짧은 문자열에 적합 (예: 이름, 닉네임 등)
VARCHAR(255)는 좀 더 긴 텍스트가 들어올 수 있는 경우 (예: 이메일, 주소, 설명 등)
일반적으로 큰 차이는 없지만, 인덱싱할 때는 차이가 생길 수 있다.
예를 들어 MySQL에서 VARCHAR(255)에 전체 인덱스를 걸면, 더 많은 공간을 차지하고 성능이 느려질 수 있다.
그래서 인덱스를 걸 컬럼은 너무 크게 잡지 않는 게 좋다.
AOP는 Aspect Oriented Programming의 줄임말로, 우리말로는 관점 지향 프로그래밍이라고 한다.
쉽게 말하면, 공통된 기능(로직)을 분리해서 코드 중복 없이 깔끔하게 관리할 수 있도록 도와주는 프로그래밍 기법.
우리가 개발하다 보면 로그 남기기, 트랜잭션 처리, 보안 검사, 예외 처리 같은 걸 여러 클래스나 메서드에서 반복해서 쓰게 된다.
그걸 각 메서드마다 다 넣으면:
코드가 지저분해지고,
유지보수가 힘들어진다.
그래서 이런 공통된 관심사(Aspect)를 따로 빼서 관리하는 게 AOP의 핵심.
예를 들어, 서비스 메서드 실행 전/후로 로그를 남기고 싶다고 하면,
public class UserService {
public void createUser(String name) {
System.out.println("로그: createUser 실행 전");
// 유저 생성 로직
System.out.println("유저 생성 완료");
System.out.println("로그: createUser 실행 후");
}
}
이렇게 모든 메서드마다 로그 코드를 넣기보단…
@Aspect
public class LoggingAspect {
@Before("execution(* com.example.service.*.*(..))")
public void logBefore() {
System.out.println("로그: 메서드 실행 전");
}
@After("execution(* com.example.service.*.*(..))")
public void logAfter() {
System.out.println("로그: 메서드 실행 후");
}
}
이렇게 공통 로직만 따로 관리하면 :
핵심 비즈니스 로직은 깔끔하게 유지되고,
공통 관심사도 한 곳에서 관리 가능하다.
| 개념 | 설명 |
|---|---|
| 관심사(Concern) | 비즈니스 로직 (예: 회원가입, 주문 등) |
| 공통 관심사(Aspect) | 여러 군데서 쓰이는 공통 기능 (예: 로그, 보안, 트랜잭션) |
| AOP | 공통 관심사를 분리해서 코드 중복을 줄이고, 깔끔하게 관리하는 방법 |