본문 바로가기

Java & 스프링40

[Spring] auto DI, 생성자 주입 방식(Construct Injection) 스프링이다 스프링 부트를 이용해서 개발을 할 때 의존성 주입(DI-Dependency Injection)을 자주 사용하게 됩니다. 이때 보통 @Autowired을 이용해서 의존성 주입(DI)을 합니다. 스프링에서 지원해주는 자동 injection은 3가지 방식이 있습니다. 필드 injection setter injection 생성자 injection 각각을 간단한 코드로 먼저 살펴보겠습니다. 회원(Member)을 관리하는 service에서 DB 접근 로직이 있는 회원 repository(MemberRepository)를 DI를 통해 사용한다는 가정으로 소스를 작성해 보겠습니다. field injection(필드 injection) 필드 injection은 class에 선언한 필드에 @Autowired를 .. 2020. 1. 29.
[Java] was가 여러개/멀티스레드 환경에서 중복 id체크 어떤 문제? 일반적으로 운영 환경에서는 was가 여러 개인 환경이 대다수입니다. (대다수가 아니라 99% 정도?) was가 여러 개 이거나 멀티스레드 환경에서 만약 동시에 회원가입을 한다면 id 중복체크를 어떻게 해야 할까요? 아주 간단한 팁(?)을 공유해보겠습니다. 소스코드 아래와 같은 servicer가 있다고 가정해 보겠습니다. @Service @Transactional(readOnly = true) public class MemberService { @Autowired private MemberRepository memberRepository; /** * 회원 가입 * * @param member * @return */ @Transactional public Long join(Member membe.. 2020. 1. 29.
[jackson, issue] 이슈 해결 - No serializer found for class 어떤 이슈? 급하게 테스트해볼 이슈가 있어서 간단하게 객체를 만들고 이 객체를 json string으로 변환해야 할 일이 있었습니다. 그래서 테스트용 class를 생성하고 이를 ObjectMapper의 writeValueAsString()를 이용하여 출력해 보았는데... 아래와 같은 에러가 튀어나왔죠. com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.hongjun423.toy_project.domain.Student and no properties discovered to create BeanSerializer (to avoid exception, disable Serializat.. 2019. 12. 28.
[spring] AOP를 이용하여 controller의 input data 자동 로그 기록하기 스프링 부트에서 애플리케이션을 만들었을 때 로그기록이 상당히 귀찮았던 경험이 있을 거라고 생각합니다. 그런데 이 로깅을 자동으로 해주는 녀석이 있다면 얼마나 편해질까요? 스프링의 AOP(Aspect-Oriented Programming)를 이용하여 controller로 들어오는 data를 자동으로 logging 해주는 기능을 만들어 보도록 하겠습니다. dependency 먼저 우선 aop를 이용하므로 aop의 dependency를 추가해 보겠습니다. org.springframework.boot spring-boot-starter-aop 어떻게 만들까? AOP를 이용하여 모든 controller를 호출할 때 input data를 뽑아내고 그 data를 log로 기록하려고 합니다. 순서대로 무엇을 만들지 생.. 2019. 12. 27.