분류 전체보기233 [Spring Annotation] @DependsOn @DependsOnPOJO가 늘어나면 Bean생성 과정 중 다른 Bean의 생성이 우선시 되어야 하는 경우가 발생할 수 있습니다.예를 들어 A, B라는 Bean의 로직은 C라는 Bean에서 필요하게 될 때 발생합니다.아직 Spring이 A, B를 초기화하지 않아 C라는 Bean이 먼저 초기화되면서 에러가 발생하게 될 것입니다.이 때 Bean의 초기화 순서를 보장해주는 Annotation이 @DependsOn입니다.@DependsOn("${BeanName}")으로 선언하고 해당 Class의 Bean은 반드시 ${BeanName}의 빈보다 나중에 생성됩니다.${BeanName}은 콤마(,)를 기준으로 여러개를 선언할 수 있습니다.@DependsOn({"Bean1", "Bean2", "Bean3",...})아.. FrameWorks/Spring & Boot 2025. 1. 12. [Spring Annotation] @Primary, @Required @PrimarySpring에서 @Primary를 붙여 자동연결시 우선순위를 부여해줄 수 있습니다.만약 PrefixGenerator 인터페이스 구현체인 DataPrefixGenerator 클래스에 @Primary를 붙여놓았으면 PrefixGenerator 형의 인스턴스가 다수 존재하더라도 @Primary를 붙인 Class의 Bean이 우선적으로 연결됩니다.@Componet@Primarypublic class DataPrefixGenerator implements PrefixGenerator { ...}@Required@Required는 Spring에 내장된 RequiredAnnotationBeanPostProcessor가 지원하는 Annotation입니다.RequiredAnnotationBeanPos.. FrameWorks/Spring & Boot 2025. 1. 12. [Spring Annotation] @Autowired, @Qualifier, @Import, @Resource, @Inject @Autowired@Autowired는 Bean Factory에 저장되어 있는 인스턴스를 전부 검색한 후에 자동으로 연결시켜주는 기능을 합니다.위에 @Component를 설명하면서 작성한 Class를 우리는 @Component를 선언해 줌으로써 Bean 생성을 하였습니다.그렇게 생성된 인스턴스를 연결시켜준다고 생각하면 됩니다. 맞는 비유일지는 모르겠으나, 바인딩이 된다고 생각하면 좀 더 이해가 쉬울 것입니다.위에서 우리가 선언한 SequenceDaoImplClass를 예로 들어 보겠습니다.@Componentpublic class SequenceService { @Autowired private SequenceDao sequenceDao; ...} @Autowired의 속성값으로 requi.. FrameWorks/Spring & Boot 2025. 1. 12. [Spring Annotation] @Configuration, @Bean, @Component @Configuration, @Bean@Configuration을 선언하면 해당 Class는 구성 Class임을 알리게 된느데요.Spring은 @Configuration이 달린 구성 Class에서 @Bean을 붙인 자바 메서드를 찾게 되는데, 해당 메서드와 동일한 이름의 Bean이 생성됩니다.이름을 따로 명시하려면 @Bean(name="${name}")을 붙이는 방법도 존재하니 특정 이름으로 생성하고 싶을 때에는 이 방법을 사용하면 됩니다.@Configurationpublic class SequenceGeneratorConfiguration { @Bean public SequenceGenerator sequenceGenerator() { SequenceGenerator seqgen.. FrameWorks/Spring & Boot 2025. 1. 12. 데이터의 처리에 따른 분류를 하는 CQRS 패턴 Pattern CQRS Pattern??명령(Command)과 질의(Qurey)의 책임(Responsebility)을 분리(Segregation)한다는 뜻의 약자를 따서 만든 패턴입니다.쓰기를 위한 데이터 모델(Write Model)과 읽기를 위한 데이터 모델(Read Model)을 분리하는 패턴이라고 할 수 있는 것이지요.그러면 명령(Command)과 질의(Qurey)란 무엇을 뜻하는 걸까요??간단하게 말하게 표현해 보겠습니다.Command : 시스템의 상태를 변경(Create, Update, Delete)하는 작업Query : 시스템의 상태를 조회(Read)하는 작업CQRS는 왜 사용할까??데이터를 쓰는 빈도보다 데이터를 읽는 빈도가 훨씬 높은 경우 쓰기를 위한 데이터 모델을 데이터 조회에 그대로 사용하는 경우 정.. Study/디자인패턴 2024. 9. 25. [Spring Core] 필수 개념 POJO(Plain Old Java Object)??POJO란 직역하자면 순수한 오래된 자바 객체입니다.Java로 생성하는 순수한 객체를 의미합니다.객체지향 원리에 충실하면서 환경 및 기술에 종속되지 않고, 필요에 따라 재활용할 수 있다는 것이 가장 큰 특징입니다.Spring Container를 사용하는 이유우리는 객체를 생성하기 위해 new라는 연산자를 사용해야 합니다.객체간의 참조가 많으면 많을수록 의존성이 높아지게 됩니다.이는 낮은 결합도와 높은 캡슐화를 지향하는 객체지향 프로그래밍의 핵심과는 반대의 방식입니다.따라서, 객체간의 의존성을 낮추어 결합도는 낮추고, 높은 캡슐화를 위해 사용해야 합니다.IoC ContainerSpring에서 객체를 생성하고 관리하고 책임지고 의존성을 관리해주는 Conta.. FrameWorks/Spring & Boot 2024. 9. 25. Vue의 시점을 정확하게 파악하기 위한 LifeCycle LifeCyclebeforeRouteLeave기존에 존재하던 컴포넌트가 제거되기 전에 이 훅을 호출주로 문서(게시글 등)를 저장하지 않은 상태로 다른 곳으로 이동하는 것을 방지하는데 사용beforeEach기존의 컴포넌트가 제거된 후 새로운 네비게이션이 시작될 때 이 훅을 호출전역으로 사용할 로직을 명시beforeRouteUpdate컴포넌트를 재사용 할 경우에만 발생하는 훅예를 들면 /board/page/1에서 /board/page/2로 게시판의 페이지를 이동 할 경우beforeEnter이동하려는 라우트에 진입하기 전 호출되는 훅beforeEach와 달리 라우트마다 각각 다르게 가드를 지정할 수 있음beforeRouteEnter새로운 컴포넌트를 만들기 전 호출되는 훅아직 컴포넌트를 만들기 전이므로 컴포넌트.. FrameWorks/Vue 2024. 8. 3. VueRouter의 Dynamic Routing 파헤치기 Adding routes동적 라우팅 에서는 주로 두가지의 메서드로 인해 동작하게 됩니다.router.addRoute()router.removeRoute()새 경로만 등록하기 때문에, 페이지 이동시에는 router.push() 또는 router.replace()메서드를 사용해야 합니다.const router = coreateRouter({ history: createWebHistory(), routes: [{ path: '/:articleName', component: Article}],}) 위와 같은 경우 /about, /store, /3-twinkle 등 모든 라우트가 Article 컴포넌트를 렌더링 할 것입니다. 이제 새로운 /about이란 라우트를 추가해 보겠습니다.router.addRo.. FrameWorks/Vue 2024. 8. 3. VueRouter의 Lazy Loading Routes 파헤치기 Lazy Loading Routes라우트를 설정하는데 import xxx from 'xxx를 사용하여 임포트해서 사용합니다.하지만, 이 경우 컴포넌트의 수에 따라 엄청난 지연이 발생할 수 있습니다. 그러면 어떻게 해결 할 수 있을까요? 우리는 import하는 함수를 이용하여 이를 해결할 수 있습니다.아래 코드를 이용해서 말이죠.const UserDetail = () => import('./UserDetail.vue')const router = createRouter({ //... routes: [ { path: '/users/:id', component: UserDetail }, // 위 아래 모두 같은 기능을 합니다. { path: '/users/:id'.. FrameWorks/Vue 2024. 8. 3. VueRouter의 Scroll Behavior 파헤치기 Scroll Behavior보통의 브라우저라면 페이지 이동시에 항상 페이지의 최상단으로 이동하는 것을 경험해 본적이 있을겁니다.하지만, 안타깝게도 Vue에서는 이 기능이 default가 아닌데요...우리가 이 문제를 해결하기 위해 사용할 수 있는 것이 scrollBehavior입니다. 선언 위치를 보실까요??const router = createRouter({ history: createWebHistory(), routes: [...], scrollBehavior (to, from, savePosition) { // return desired position }}) 위에서 인자로 사용되는 to와 from은 Navigation Guards과 유사합니다. 세번째 인자인 sa.. FrameWorks/Vue 2024. 8. 3. VueRouter의 Transitions 파헤치기 Transition앞전에 [[RouterView Slot]] 에서 배운 transition을 좀 더 활용하는 방법을 알아보겠습니다.route의 meta태그를 이용하여 동적으로 을 컨트롤 할 수 있습니다. 동작 방식이나 방법은 앞서 배웠기에 자세한 설명은 생략하고 예시를 보겠습니다.이전 글을 안보고 오셨다면 [[RouterView Slot]]을 먼저 보고 보시는걸 추천합니다.const routes = [ { path: '/custom-transition', component: PanelLeft, meta: { transition: 'slide-left' }, }, { path: '/other-transition', compone.. FrameWorks/Vue 2024. 8. 3. VueRouter의 RouterView Slot 파헤치기 RouterView slot에 v-slot을 사용하여 특정 컴포넌트를 유연하게 조작할 수 있습니다. 위의 코드는 평소에 사용하는 코드와 동일하게 동작합니다.위의 코드를 활용해서 유연하게 조작하는 것이지요. 살펴보도록 할까요??KeepAlive태그 안에 를 넣어 사용하는 방법입니다.태그로 감싸면 해당 컴포넌트는 리렌더링 하지 않겠다는 뜻입니다. 그럼 리렌더링을 하지 않으면 어떻게 될까요?? 만약 데이터를 변경시키고 다른 컴포넌트로 이동 후 다시 돌아왔을 대 데이터가 유지되어 있을 겁니다. 아래와 같이 사용합니다. Transition태그 안에 를 넣어 사용하는 방법입니다.태그로 감싸 하위의 컨텐츠에 트랜지션 or 애니메이션을 넣을 .. FrameWorks/Vue 2024. 7. 29. 이전 1 2 3 4 5 ··· 20 다음 💲 추천 글 728x90 반응형