1. Mysql 연동시 에러 발생
아래 참고 링크로 해결했었다
https://titlejjk.tistory.com/264
2. Mysql auto increment 속성
memo 테이블의 컬럼 id 속성에 auto increment가 설정 되어 있어 파라미터로 넣어주는 id 값은 무시되고 저장된다
3. @Transactional
@Transactional은 이러한 문제를 해결해주는 Spring이 제공하는 어노테이션으로 @Transactional을 메서드 또는 클래스에 명시하게 되면 특정 메서드 또는 클래스가 제공하는 모든 메서드에 대해 내부적으로 AOP를 통해 트랜잭션 처리코드가 전 후 로 수행된다.
AOP는 일반적으로 두가지 방식이 있다.
- JDK Dynamic Proxy 방식 (타겟 클래스가 인터페이스 구현체일경우)
- CGLib 방식
JDK Dynamic Proxy 방식 (타겟 클래스가 인터페이스 구현체일경우)
왼쪽은 @Transactional을 적용하기전 상태이며, 오른쪽은 @Trnasactional이 적용되고 JDK Dynamic Proxy 방식 AOP로 동작했을 때의 모습이다.
트랜잭션 처리를 다이나믹 프록시 객체에 대신 위임한다.
다이나믹 프록시 객체는 타깃이 상속하고있는 인터페이스를 상속 후 추상메서드를 구현하며 내부적으로 타깃 메서드 호출 전 후로 트랜잭션 처리를 수행한다. Controller는 타깃의 메서드를 호출하는것으로 생각하지만 실제로는 프록시의 메서드를 호출하게된다.
CGLib 방식
CGLib는 Java 리플랙션 대신 바이트 코드 생성 프레임워크를 사용하여 런타임 시점에 프록시 객체를 만드는 방식이다.
타깃오브젝트가 인터페이스를 상속하고 있지 않는 다면 CGLib를 사용하여 인터페이스 대신 타깃오브젝트를 상속하는 프록시 객체를 만든다.
프록시 객체는 JDK Dynamic Proxy 또는 CGLib 방식 중 설정된 한 방식으로 만들어진다. Spring boot는 기본적으로 proxy-target의 값이 true이므로 CGLib를 사용하여 타깃이 인터페이스를 상속하건 말건 모두 수용하여 타깃을 상속하는 프록시 객체를 생성한다. 인터페이스가 없을때만 CGLib를 사용하고 이외에 JDK Dynamic Proxy 방식을 사용하고 싶다면 아래와 같이 application 파일에 proxy-target 값을 false로 주면된다.
요약하면 클라이언트는 타깃 Bean을 주입 받고 타깃의 메서드를 호출하는것 처럼 보이겠지만 실제는 프록시 객체를 주입받고 프록시 객체 메서드를 먼저 호출하게 되는것이다.
https://hwannny.tistory.com/98
참고 : 테스트 코드에서의 @Transactional은 db에 커밋되지 않도록 설정해준다
4. 로그 logback 사용
프로젝트를 개발하면서 로깅 라이브러리를 logback을 사용했다
https://wildeveloperetrain.tistory.com/302
추가로
info 레벨로 설정하기위해 application.yml에 아래와 같이 추가해 주었다
logging:
level:
root: INFO
또 각 환경 ( 개발,운영 등) 에 대해 로깅 설정을 위해 아래와 같이 추가 했다
spring:
profiles:
active: local
5. type javax.servlet.http.httpservletrequest not present 에러
https://devfunny.tistory.com/929
swagger 적용중에 위와 같은 에러를 만나게 되어 위 링크의 설명대로 스프링 부트 버젼을 낮추어 해결했다
원인은 SpringBoot 3.0은 JavaEE가 아닌 JakartaEE용으로 빌드되었는데, JakartaEE를 지원하는 SpringFox 릴리스가 없기 때문에 위와 같은 오류가 발생하는 상황이다.
'프로젝트' 카테고리의 다른 글
매장 예약 - Redis 캐시 적용 (0) | 2024.02.22 |
---|---|
매장 예약 서비스 - 동시성 문제 (0) | 2024.02.19 |
매장 예약 서비스 - Spring Jpa 연관 관계 (0) | 2024.02.18 |
배당금 프로젝트 (1) | 2024.01.31 |
계좌 시스템 개발 프로젝트 (0) | 2024.01.26 |