Server/Spring
-
[Spring] Transactional Propagation 정리하기Server/Spring 2021. 11. 28. 23:52
@Transactional Propagation 알아보기 이번 글에서는 Spring Transactional 어노테이션에서 propagation 특징에 대해서 정리해보려 합니다. Propagation 옵션 설명 REQUIRED 기본 옵션 부모 트랜잭션이 존재한다면 부모 트랜잭션에 합류, 그렇지 않다면 새로운 트랜잭션을 만든다. 중간에 자식/부모에서 rollback이 발생된다면 자식과 부모 모두 rollback 한다. REQUIRES_NEW 무조건 새로운 트랜잭션을 만든다. nested한 방식으로 메소드 호출이 이루어지더라도 rollback은 각각 이루어 진다. MANDATORY 무조건 부모 트랜잭션에 합류시킨다. 부모 트랜잭션이 존재하지 않는다면 예외를 발생시킨다. SUPPORTS 메소드가 트랜잭션을 필..
-
[Spring] Test에서 public이 아닌 필드 Reflection 으로 값 넣어주는 법Server/Spring 2021. 11. 26. 21:21
Test에서 public이 아닌 필드를 Reflection 으로 값 넣어주는 법 이번 글에서는 테스트 코드를 작성하면서 public이 아닌 필드에 값을 넣어주어야 하는 상황에서 Reflection을 사용해서 값을 넣어주는 법에 대해서 정리해보겠습니다. 이번 글은 Reflection이 무엇인지 설명하는 글은 아니다 보니 Reflection을 알고 싶다면 Reflection 알아보기 를 참고하시면 좋을 거 같습니다. 먼저 제가 진행하고 있는 프로젝트에서 겪은 상황에 대해서 공유해보겠습니다. 현재 Repository는 Mockito를 사용해서 Mocking 하고 Service Layer의 메소드만 Unit Test를 해보려 하고 있습니다. 내부 로직이 없고 단순히 Entity -> DTO로 변환하는 메소드 입..
-
[Spring] 프로젝트에서 MyBatis ResultMap을 사용하게된 이유Server/Spring 2021. 11. 18. 22:05
MyBatis ResultMap 사용하게 된 이유 이번 글에서는 프로젝트에서 MyBatis를 사용하면서 ResultMap을 사용한 것에 대해서 정리해보겠습니다.(ResultMap이 어떤 것인지?를 정리한 것이라기 보다 프로젝트에서 왜 ResultMap을 썼고 어떻게 적용했는지 정도만 정리해두려 작성하는 글입니다!) MyBatis 사용하는 법이 궁금하다면 여기 에서 확인할 수 있습니다. 제가 프로젝트에서 사용하고 있는 Layer를 간단하게 그리면 위와 같습니다. 즉, 클라이언트에게 받아온 DTO를 Service Layer에서 DTO -> Entity 과정을 거친 후에 DB Layer에 영속화 시키는 작업을 하고 있습니다. 그리고 DB Layer에서 조회한 결과들도 Service Layer에서 Entity ..
-
[Spring] Primitive boolean Type is Remove Jackson 직렬화 문제 해결하기Server/Spring 2021. 11. 7. 17:25
Primitive boolean Type에서 isXX에서 is가 사라지는 Jackson 직렬화 문제 해결하기 이번 글에서는 Spring Boot에서 DTO를 클라이언트에 JSON 으로 Response 할 때 isXXX 네이밍에서 is가 사라지는 문제를 해결하는 아주 간단한 과정을 공유해보려 합니다. 프로젝트를 진행하면서 위와 같은 DTO를 클라이언트에게 반환하고 있었습니다. 보면 Primitive Type boolean의 isFailedGroupQuiz 라는 필드가 존재하는 것도 볼 수 있습니다. 그래서 이제 해당 DTO가 사용되는 API를 Postman으로 호출해보겠습니다. 응답 값을 보면 DTO에 분명 isFailedGroupQuiz 라고 적었지만, FailedGroupQuiz라고 오는 것을 볼 수 ..
-
[Spring] Swagger 404 Not Found 해결 방법Server/Spring 2021. 10. 23. 13:42
Spring Swagger 404 Not Found 해결하기 기존에 Java, Spring Boot 기반으로 Swagger를 사용할 때는 아래와 같이 사용했습니다. implementation 'io.springfox:springfox-swagger2:2.9.2' implementation 'io.springfox:springfox-swagger-ui:2.9.2' 먼저 build.gradle에 위의 의존성을 하겠습니다. 그리고 간단하게 자바 코드로 Swagger 설정을 하였습니다. http://localhost:8080/swagger-ui.html 그러면 위와 같이 문제 없이 접속이 되는 것을 볼 수 있습니다. (Swagger 사용법에 대해 좀 더 자세히 궁금하다면 여기 를 참고하시면 됩니다.) 그런데 문..
-
[Spring] AOP(Aspect Oriented Programming)란 무엇일까?Server/Spring 2021. 9. 27. 00:30
AOP(Aspect Oriented Programming)란 무엇일까? 스프링의 삼각형 중에 하나가 AOP(Aspect Oriented Programming)입니다. 이번 글에서는 어렵고 중요한 AOP에 대해서 정리해보겠습니다. AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불립니다. 그리고 흩어진 Aspect를 모듈화할 수 있는 프로그래밍 기법입니다. 정의하면 이런데.. 무슨 말인지 잘 와닿지 않는 거 같습니다,, 위의 A, B, C 클래스에서 동일한 색깔의 선들의 의미는 클래스들에 나타나는 비슷한(중복되는) 메소드, 필드, 코드들이 나타난다는 것입니다. 이러한 경우 만약 클래스 A에 주황색 부분을 수정해야 한다면 B, C 클래스들에 주황색 부분에 해당하..
-
[Spring] Kotlin으로 ModelMapper 사용하는 방법Server/Spring 2021. 8. 25. 23:17
들어가기 전에 이번 글에서는 Kotlin에서 ModelMapper를 사용하는 방법에 대해서 간단하게 정리 해보겠습니다. Spring으로 백엔드를 개발하다 보면 DTO로 클라이언트로 부터 받아오고 JPA를 통해서 디비에 접근할 때는 Entity로 변환해서 접근을 합니다. 그리고 JPA를 통해서 나온 결과를 그대로 반환하기 것이 아니라 DTO로 변환해서 클라이언트로 반환하게 되는데요. 그러면 매번 DTO 필드가 2개, 3개 달라질텐데 그에 해당하는 생성자를 만들어야 할 것입니다. 상당히 번거로운 작업이 될텐데요. 이럴 때 사용하면 좋은 것이 ModelMapper 입니다. ModelMapper는 서로 다른 Object 간의 필드 값을 자동으로 Mapping 해주는 라이브러리 입니다. gradle impleme..
-
[Spring] H2 Database 연결 에러 해결하기Server/Spring 2021. 8. 24. 14:16
H2 DataBase 에러 해결하기 이번 글에서는 Spring에서 H2 Database를 사용할 때 만난 에러를 해결하는 과정에 대해서 간단하게 정리해보겠습니다. H2 DataBase는 설치가 되어 있다고 가정한 상태로 글을 시작해보겠습니다. 설치를 한 후에 h2 디렉토리를 보면 bin 디렉토리가 존재할 것입니다. bin 디렉토리 안에는 h2.sh라는 파일이 존재할 것인데요. h2.sh 파일을 sh h2.sh로 실행하면 아래와 같은 화면을 볼 수 있을 것입니다. 안뜬다면 http://localhost:8082로 접속하면 보일 것입니다. 그리고 바로 연결 버튼을 누르면 위의 보이는 빨간색 에러를 볼 수 있을 것인데요. Database "/Users/choejeong-gyun/test" not found, ..