1. 스프링 AOP란?AOP는 관점 지향 프로그래밍(Aspect-Oriented Programming)이라고 부르며, 프로그램의 핵심 기능 외에 부가적인 기능을 분리해서 모듈화 하는 기법이다. 핵심 비즈니스 로직과는 직접적인 관계가 없는 로직들(ex. 로깅, 트랜잭션)이 코드의 여러 부분에서 반복될 수 있다. AOP는 비즈니스 로직과 상관없는 반복적인 코드들을 별도의 모듈로 관리하여 코드의 유지 보수를 쉽게 하고 핵심 비즈니스 로직에 집중할 수 있도록 한다.ex) @Transactional은 트랜잭션 처리라는 부가적인 기능을 애너테이션으로 적용하는 방식이다. 원래는 트랜잭션을 사용하려면 transaction.begin(), transaction.commit(), transaction.rollback() ..
예제 코드Member.classupdateUsername()을 통해 사용자의 이름을 변경할 수 있다.@Entity@Setter@Getterpublic class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "member_id") private Long id; private String username; @ManyToMany @JoinTable(name = "MEMBER_PRODUCT", joinColumns = @JoinColumn(name = "member_id"), inverseJoinColumns = @JoinColumn(name = "pr..
TDD란?프로덕션 코드를 먼저 작성하는 것이 아닌 테스트 코드를 먼저 작성한다. RED : 테스트에 실패하는 코드를 작성한다.테스트할 프로덕션 코드가 없기 때문에 에러가 발생한다.GREEN : 테스트를 통과할 수 있도록 최소한의 코드만 작성한다.프로덕션 코드가 엉터리여도 된다. 단순히 테스트 통과만을 위한 프로덕션 코드를 작성한다.BLUE : 테스트 통과는 유지하면서 프로덕션 코드를 개선한다. TDD - REDcalculateTotalPrice()는 프로덕션에서 실제로 사용할 코드에 대한 테스트 코드를 작성한다. CafeKiosk 클래스의 calculateTotalPrice() 메서드는 아직 작성되지 않은 상태이다.@Testvoid calculateTotalPrice() { CafeKiosk ca..
사용자의 입력은 믿을 수 없는 정보이다.사용자 입력에서 발생할 수 있는 예외 케이스를 고민해야 한다. 그리고 예외 케이스에 대한 검증이 필요하다.ex) 이메일 입력창에 특수 문자를 입력할 수 있다. null을 대하는 자세→ 항상 NPE를 방지하는 방향으로 경각심을 가지고 코드를 작성한다.→ return null을 자제한다. NPE 발생 여지를 만든다.→ 대안책으로 Optional이 있다. Optional에 대하여→ Optional은 비싼 객체다. 꼭 필요한 상황에서만 반환 타입으로만 사용한다. 반환 타입이 아닌 파라미터로 받지 말자.→ Optional은 분기 케이스가 존재한다.Optional 자체가 null인지Optional에 담긴 데이터가 null인지따라서 파라미터로 Optional을 받아서는 안 된다..
@Data 애너테이션포함하는 애너테이션 : @Getter, @Setter, @RequireArgsConstructor, @ToString, @EqualsAndHashCode/** * @see Getter * @see Setter * @see RequiredArgsConstructor * @see ToString * @see EqualsAndHashCode*/@Target({ElementType.TYPE})@Retention(RetentionPolicy.SOURCE)public @interface Data { String staticConstructor() default "";} @Data 애너테이션이 포함하는 애너테이션들에 대해서 알아보자. @Setter는 수정하면 안 되는 값을 수정하게 만든다.E..