본문 바로가기
  • Code Smell

Spring boot4

[Spring] Spring AOP 사용시 주의 점 Spring AOP 사용시 주의 점 Spring AOP는 기존에 JDK Dynamic Proxy 를 사용하다가, Spring boot 2.0, Spring framework 4.3 에 올라와서 기본 프록시 라이브러리로 CGLib을 사용한다. 뭐가 다른거지 JDK Dynamic Proxy 와 CGLib 의 가장 큰 차이는 프록시 대상 객체가 인터페이스를 구현했느냐 여부이다. 신입 시절에 백엔드를 개발하다보면 회사 코드가 Service-ServiceImpl 로 구현되어 있었는데, 이게 Loose Coupling을 해결하기 위한 것인가 보다 했으나, 다형성을 위해 구현되는 경우가 거의 없었다. (interface : class = 1 : N 이 거의 없고 대부분 1 : 1) 아마 JDK Dynamic Prox.. 2023. 3. 31.
[Spring Boot] 메일 테스트용 수신 서버 (mail dummy server) mail dummy server 프로젝트 소스는 여기 메일 전송 로직 등을 만들고 제대로 발송이 되는지 확인해야 하는데, 이럴 때 naver, google, nate 등으로 마구 쏘다가는 발송 IP 차단 당할 수 있습니다. 또한 google 같은 경우에는 메일 전문을 비대칭키로 암호화해서 메일서버의 키로 복호화 해서 메일의 변조나 위장을 방지하는 DKIM 설정이 필요합니다. 그래서 테스트 해 보기가 여간 까다로운게 아닙니다. 이럴 때 메일을 수신해서 버려줄 수 있는 더미 서버가 있으면 좋겠다는 생각이 들어 하나 만들었습니다. SMTP (Simple Mail Transfer Protocol)는 RFC 2821 규약으로 정의 되어 있는데 이것도 무조건 OK 구문이면 금방 만들겠지만 규칙에 맞춰 만드려면 굉장.. 2022. 2. 11.
[Mybatis] mybatis 사용 시 xml, interface 경로가 일치해야 하는 문제 mybatis 사용 시 xml, interface 경로가 일치해야 하는 문제 springBoot에서 mybatis-spring-boot-starter 를 이용할 때 Data Access Object를 구현하지 않고 인터페이스 자체로 매핑되어 Data Access Object로 이용하는 방식이 있습니다. 하지만 이 방식에서 쿼리 메소드를 가지고 있는 인터페이스 파일과 실제 쿼리문이 담긴 XML 파일의 경로가 같아야 한다는 문제가 있습니다. 예를들어 인터페이스 파일의 패키지 경로가 sunghs.springexample.mapper.SampleMapper 라고 한다면, XML 파일의 경로도 sunghs.springexample.mapper.SampleMapper 이어야 한다는 문제 입니다. (프로젝트 경로로 .. 2021. 12. 2.
[JUnit] JUnit5 사용법과 TDD (2) - REST API 테스트 JUnit5 사용법과 TDD (2) JUnit 5의 dependency 추가 방법과 실행 순서, 기본 annotation에 대한 정리 -> TDD 정리 1 Spring 관련 주요 Test Annotation JUnit5와 spring-boot-test의 모든 annotation은 아니며 자주 사용되는 Annotation만 소개 @ExtendWith(Class[] c) 필요한 Class들을 Configuration 으로 만들어 사용 할 수 있다. (기존 Configuration 클래스도 땡겨 올 수 있다.) Configuration Component이므로 내부에 있는 Bean 까지 등록이 가능하다. Import 된 클래스는 주입으로 사용 가능. @Profile 클래스와 메소드 레벨에서 지정 가능하며, 특정.. 2021. 3. 30.