본문 바로가기

전체 글163

Service - ServiceImpl 쓰지 말라고만 하고 사라지면 어떡해요! 요즘은 많이 줄어들었지만 예전에는 개발을 하다 보면 Service - ServiceImpl 구조를 굉장히 많이 만나볼 수 있었다. 나 조차도 사실 이걸 왜 써야하는지, 근본적인 이유가 무엇인지에 대한 의문을 품지 않고 그저 이런 구조를 사용해서 개발을 하는 것이 회사 개발팀의 컨벤션이기도 했고, 사실 큰 불편함도 없기도 해서 사용하기도 했다. 어느 날 개발을 하던 도중에 의문이 생겼다. 아무리 봐도 대부분의 Service와 ServiceImpl의 관계는 1:1에서 더 이상 바뀔 일이 없을 것 같아 보였고, 동료 개발자에게 질문을 했다. 왜 이런 구조를 채택했냐고. 돌아온 대답은 우리가 알고 있는 이유와 비슷했다. 인터페이스와 구현체를 분리함으로써 얻을 수 있는 이점이 많다는 이유였다. 틀린 말은 아니다... 2024. 2. 26.
RestTemplate은 너무 낡았고, WebClient는 너무 귀찮아. 뭐? RestClient? 스프링 6.1 버전, 그리고 스프링 부트 3.2.0-M1 버전부터 새롭게 RestClient가 등장했습니다. 이미 스프링에는 RestTemplate과 WebClient가 있는데 왜 굳이 새로운 Http Client를 추가시킨 걸까요? RestClient는 무엇이고, 기존 RestTemplate나 WebClient와는 무엇이 다른 걸까요? RestTemplate RestClient를 알아보기 전에 우선 RestTemplate부터 간단하게 알아보도록 합시다. RestTemplate의 첫 등장은 2009년, 스프링 3.0 버전과 함께였습니다. 첫 등장 당시에는 그렇게 크지 않은 크기의 클래스였습니다. 여러 오버로드 메서드들을 사용해서 다른 서비스의 API를 호출할 수 있는 여러 방법을 제공했습니다. 하지만 시.. 2024. 2. 21.
면접관 : 스프링부트 auto-configuration의 동작방식을 설명해주세요. - 2 면접관 : 스프링부트 auto-configuration의 동작방식을 설명해주세요. - 1 우선 우리가 본 콘솔 출력 내용을 다시 한 번 보도록 하겠습니다. ============================ CONDITIONS EVALUATION REPORT ============================ Positive matches: ----------------- AopAutoConfiguration matched: - @ConditionalOnProperty (spring.aop.auto=true) matched (OnPropertyCondition) AopAutoConfiguration.AspectJAutoProxyingConfiguration matched: - @ConditionalOnC.. 2024. 2. 16.
면접관 : 스프링부트 auto-configuration의 동작방식을 설명해주세요. - 1 본 포스팅에 있는 내용이 100% 정답이라고 할 수도 없고, 검색하며 읽어보고 강의를 들으면서 배운 내용을 정리한다는 목적이 더 큰 포스팅이므로 부족한 부분이 많을 수 있습니다. 언제든 댓글등으로 의견 남겨주셔서 더 좋은 포스팅이 되도록 도와주시면 감사하겠습니다. 면접관 : 스프링부트 auto-configuration의 동작방식을 설명해주세요. - 2 스프링부트로 개발을 하면서 관련 문서를 하나 둘 읽다 보면 auto-configuration이라는 말을 적어도 한 번은 보셨을 겁니다. 아니면 이 글의 제목처럼 면접을 보러 갔더니 그동안 내가 달달 외운 Dependency Injection이나 Spring Bean, 아니면 하다못해 JVM이 무엇인지는 안 물어보고 난데없이 스프링부트 auto-configu.. 2024. 2. 13.
스프링 @Transactional 어노테이션을 사용하는 가장 좋은 방법 Spring Transactional annotation 스프링은 1.0 버전부터 AOP 기반의 트랜잭션을 지원했고, 이를 사용하여 개발자들은 트랙잭션 범위를 선언적으로 지정할 수 있었습니다. 얼마 지나지 않아 1.2 버전에서 스프링은 @Transactional 어노테이션을 추가했고, 이로써 트랜잭션 범위를 지정하는것이 훨씬 더 쉬워졌습니다. @Transactional 어노테이션은 다음 속성들로 설정이 가능합니다. value와 transactionManager - value는 transactionManager와 동일(alias)하게 사용됩니다. 이를 사용해 @Transactional 어노테이션이 사용된 블록에서 사용될 TransactioinManager의 참조를 제공합니다. propagation - @T.. 2024. 2. 9.
확실히 스프링 시큐리티에 컨트리뷰트를 하고 나서 내 인생이 달라졌다. 원래는 고딩때 일진 눈도 못마주치고 코드 대충 짜고 PR 찍찍 뱉고 했는데, 스프링 시큐리티 컨트리뷰션 오너가 되고나니깐 품위유지 할려고 스스로 노력할려고한다. 방금도 코드가 엉망진창 구현되어있길래 찾아서 리팩터링 하고왔다. 학생때는 일진은 커녕 같은 찐따 눈도 못마주쳤는데 이제는 배달음식 주문할때도 큰 소리로 또박또박말하고, 편의점 피시방에서도 알바생이랑 눈마주치기 가능해졋다 아무리 기분 나쁜 일이 생겨도 샤워하면서 혼자 나는 누구? " 스프링 시큐리티 컨트리뷰터" 하면서 웃으니깐 기분도 좋아지네 이래서 자리가 사람을 만든다는말이 나온거같다. 별거 아니지만 스프링 시큐리티 문서에 오류가 있어 수정한 내용을 올렸더니 다행히도 통과 되었습니다. 처음 해보는 컨트리뷰션이라 굉장히 떨리고 이게 맞나 하면서 당.. 2024. 2. 2.
당신의 RESTful API는 정말 RESTful 한가요? - REST와 Hypertext, HATEOAS 들어가기에 앞서 이 포스팅은 REST가 뭔지 찾아보다 생각보다 더 깊은 내용이 숨어있어 여러가지로 찾아보고 정리하고자 쓴 글입니다. 해당 포스팅에 써 있는 내용이 100% 정답일 수는 없습니다. 분명 모자란 부분도 있고, 틀린 부분도 있을테고, 이상한 부분도 있을겁니다. 그래도 정말 노력하고 재미있게 쓴 포스팅이니 함께 읽어주시고 부족한 부분을 채울 수 있도록 도와주시면 감사하겠습니다. REST? REST (representational state transfer, representational 상태 전송) 란 월드 와이드 웹의 개발과 디자인을 위해 만들어진 소프트웨어 아키텍처 스타일의 한 종류이다. REST는 Web과 같은 분산 하이퍼미디어 시스템의 아키텍처가 어떻게 동작해야 하는지에 대한 일련의 제약.. 2024. 1. 29.
Bean Scope - 스프링 공식문서가 말하는 빈 스코프 들어가기에 앞서, 해당 문서는 스프링 공식 문서를 번역한 포스트 입니다. 해당 문서에서는 XML 기반으로 빈 설정을 하고 있는데 이는 어노테이션 기반으로도, 자바코드로도 설정 할 수 있습니다. 개인적으로 공부 할 요량으로 한 포스팅이다 보니 번역 상태가 굉장히 좋지 않습니다. 가능하시다면 원문을 읽으시는것을 추천 드립니다. 빈 정의를 생성한다는 것은, 클래스의 실제 인스턴스를 만드는 방법을 알려주는 일종의 레시피를 만드는 것과 같다고 할 수 있습니다. 빈 정의를 일종의 레시피로 본다는 것은 우리가 레시피 하나만 있으면 여러 객체의 인스턴스를 만들 수 있다는 점에서 굉장히 중요합니다. 객체 생성에 필요한 의존성이나 설정들을 제어하는 것 이외에도 우린 빈 정의(Bean Definition)를 통해 해당 객체.. 2024. 1. 26.
Lazy-initialized Beans 기본적으로 ApplicationContext는 초기화 단계에 모든 싱글턴 빈을 생성하고 설정합니다. 싱글턴 빈은 단 하나만 만들어져 공유되는 빈 만약 prototype이라면 매 요청시마다 새로 만들어야 하기 때문에 초기화 단계에 미리 만들 필요가 없기 때문이라 생각함 대다수의 경우 설정이나 환경오류를 즉각 발견할 수 있기 때문에 이런 pre-instantiation이 유용합니다. 하지만 싱글턴 빈의 pre-instantiation을 원하지 않는 경우 lazy-initialized 되도록 빈 설정을 할 수 있습니다. lazy-initialized빈은 IoC 컨테이너에게 자신이 처음 요청된 시점에 빈을 생성하라고 알려줍니다. 만약 초기화 단계에 인스턴스화 되는 싱글턴 빈이 lazy-initialized 설정.. 2024. 1. 24.
728x90