개발/Spring20 [Spring] 생성자 주입을 사용해야 하는 이유 Spring Framework는 @Autowired 애노테이션을 통해 다양한 의존성 주입을 제공한다. 생성자 주입필드 주입수정자 주입일반 메서드 주입우선 많은 개발자가 생성자 주입을 권장하고, 사용할 것이다. 하지만 우리 회사 코드에서는 필드 주입으로 되어 있는 코드들도 있다. 수정자 주입이나 일반 메서드 주입은 아예 없었던 것 같고, 생성자 주입과 필드 주입이 섞여있다. 필드 주입을 보면 생성자 주입으로 리펙터링을 하고 있고, 저뿐만 아니라 모든 팀원이 변경하고 있어 생성자 주입과 필드 주입이 공존하는 걸로 예상된다. 이전 개발자는 왜 필드 주입을 사용했을까?? 간결하기 때문인 것 같다. 실무에서는 한 객체가 여러 객체를 의존성 주입을 받는 경우가 있다.만약 의존성 주입을 받는 객체가 10개 이상이라고.. 2025. 1. 13. [Spring] 최근에 느낀 Spring 의 장점 (객체지향, DI) 1년 전 취업 준비를 했을 때를 돌이켜 보면, 스프링을 사용해 보면서 좋았던 점에 무엇인지에 대한 면접 질문을 많이 받았다. 그때마다 면접 족보?를 통해 달달 외웠던 내용을 잘 풀어서 얘기했던 것 같다. 사실 취준 때는 현재 많은 기업들이 스프링을 사용하기 때문에 취업 시장에서 유리했기 때문에 선택했던 이유가 가장 컸다. 그래서 사실 아래 내용을 100% 와닿으면서 스프링을 사용해 본 적은 없어 면접 대답도 술술 대답하지 못했던 적도 있다.스프링 부트의 장점 (톰캣 내장, 손쉬운 설정..)스프링 DI, AOP@Transactional ... 하지만 1년 정도 실무를 경험하고, 최근 스프링 핵심 원리 - 기본 편 강의를 다시 들으면서 왜 많은 기업에서 스프링을 선택하고, 스프링의 장점을 체감할 수 있었다... 2025. 1. 6. [Spring] 선착순 쿠폰 발급 요구사항 개발 (Redis, Kafka) 이번 포스팅에서는[Inflearn] 실습으로 배우는 선착순 이벤트 시스템 에서 실습한 내용을 기록하고자 하며, 아래 2가지 요구 사항을 만족하고 있다. 1. 쿠폰의 한정된 수량을 초과해서는 안된다.2. 쿠폰은 중복 지급이 불가하여, 1인당 1장만 지급되어야 한다. 위의 요구사항을 만족시키고, 아래 문제를 해결하기 위해 아래 기술을 사용하였다. 선착순이라는 특성으로, 동시성 문제가 반드시 발생할 것이라 예상하고 이를 해결하기 위해 Redis를 활용한다.INCR 커맨드 사용 : 쿠폰의 한정된 수량을 초과하지 못하도록 한다.SET 자료구조 사용 : 쿠폰을 1인당 1장만 지급되어야 하기 때문에 SET 자료구조를 사용하여 중복 지급을 막는다.Redis를 활용하여 동시성 문제를 해결할 수 있었으나, 동시에 많은 요.. 2024. 5. 16. [Spring] AOP 기반 Redis 분산락 적용 분산 시스템은 인터넷을 통해 연결된 컴퓨터가 하나의 시스템처럼 동작하는 환경을 말한다.따라서, 높은 처리량과 확장성, 고가용성을 보장해 준다. 하지만 분산 시스템은 데이터의 일관성 유지와 트랜잭션 관리 등 여러 복잡한 문제를 해결해야 하는 경우가 존재한다. 특히, 여러 노드가 동시에 공유 데이터를 변경하려고 할 때, 동시성 문제가 발생하여 데이터의 일관성이 무너지게 된다. 이를 방지하기 위해서는 분산락을 사용할 수 있고, 분산 락은 여러 노드가 동시에 접근 가능한 자원에 대한 접근을 하나의 노드만 접근할 수 있도록 제한한다. 이번 포스팅에서는[Inflearn] 재고시스템으로 알아보는 동시성이슈 해결방법 에서 배운 Redis를 활용하여 분산락을 구현하는 2가지 방법과유익한 블로그 글이었던 Kurly Tec.. 2024. 5. 11. [Spring] JPA 낙관적 락 & 비관적 락 인프런에서 재고시스템으로 알아보는 동시성이슈 해결방법 강의를 들으면서 배운 내용과 추가로 공부한 내용을 기록하려고 한다. 강의를 들으면서, 코드는 아래 링크에 기록해 두었다.https://github.com/minnseong/study-labs/tree/main/stock-system-concurrency-issue Lock에 대해서 정리하기 전에 강의를 다 듣고 나서, 락을 사용하지 않고 트랜잭션 격리 수준을 통해 동시성 문제를 해결할 수 있지 않을까 라는 고민을 하게 되었다. 격리 수준을 SERIALIZABLE로 설정한 후 강의에서 제공한 테스트 코드를 돌려본 결과, 무수히 데드락이 발생하는 것을 확인할 수 있었다. 당연히 동시성은 잡지 못했다.@Service@RequiredArgsConstruct.. 2024. 5. 8. [Spring] 커스텀 Annotation 대상 AOP 적용하기 공부하게 된 계기 최근 업무를 하면서 선임 개발자분께서 AOP를 적용한 코드를 보고, 테스트를 해야 할 일이 있었다. 작년에 강의를 들으면서 Spring AOP에 대해 공부한 적이 있어 어느 정도 코드 이해했지만, 선임과 대화하는 과정에서 헷갈리는 용어가 많아 원할한 커뮤니케이션이 힘들었고, 다음에 AOP를 적용할 부분이 있을 때, 막상 적용하기는 많이 헤맬 것 같다는 생각이 들었다. 그래서 오늘은 김영한님의 스프링 핵심원리 고급 편 PDF를 다시 복기하면서 개념을 복습하고, Annotation를 대상으로 AOP를 적용하는 예시를 통해서 실무적으로도 학습하려고 한다. AOP 탄생 배경 핵심 기능과 부가 기능 핵심 기능 해당 객체가 제공하는 고유의 기능 부가 기능 핵심 기능을 보조하기 위해 제공되는 기능 .. 2024. 4. 13. 이전 1 2 3 4 다음