하루 늦은 4월의 일기
카파도키아에 도착해서 차안에서 쓰는 일기🇹🇷

3월의 일기를 쓰고 발목인대를 다쳐서
클라이밍 프다 모두 올 스탑
그치만 수영 강습 추첨 성공!
헬스+ 수영 조합으로 하고 있는데 넘 행복
헬스로 근력 운동하고 물속에서 풀어주는 그 느낌이 너무 행복하다



이제 어느 순간에서든
행복을 찾을 수 있는 사람이 되어가고 있어서
나의 성장을 느낄 수 있어서 뿌듯뿌듯

어제 비행기 안에서 했던 생각이 뭐였냐면

유연하고도 단단한 사람이 되고 싶다!

생각의 사고가 유연하고
마음이 단단한 사람

나이가 들어가도 여러 의견에 열려 있는
나의 의견이 모두 옳은 게 아니라
틀릴 수 있음을 늘 인지하고
다른 사람의 의견을 귀담아 들을 수 있게

그리고 다른사람들의 말에 상처 받지 않고
너무 휘둘리지도 않고
내면이 단단한 사람이 되고 싶다



적고보니 둘은 어떻게 보면 상충되는 게 아닌가..
이래서 중용이 중요하다 했는가
중용도 언젠가 읽어보아야지

나는 어느정도 통제 성향이 있어서 그런부분에선 유연함이 필요하고
또 다른 사람들의 말에 상처도 받기도 하기때문에
넘겨들을 수 있는 단단함

그래도 이리 인지하는게 어디인가

요새 책을 좀 더 읽고 있는데
확실히 다독을 하면 이 두개가 정말 많이 도움이 되는 거 같다
책을 더 많이 읽어야 겠다 (다짐 또 다짐..)


그리고 4월의 나의 행복의 가장 큰 부분을 차지한
콜드플레이 콘서트


심지어 두번 감
너무 좋아서 한번 더 감
너무너무너무 행복했다..

인생콘서트 등극

콜드플레이 형님들.. 내한 오시면
언제든 가겠읍미다..ㅇㅅㅇ77

5월은 여행으로 시작하는데
잘 담아가야겠다🇹🇷

요새 사는게 즐겁다 행복하고
다채롭다

나를 더 잘 알게 되고
나를 다루고 컨트롤 하는 방법을 더 잘 알아가고 있다

예전부터 생각했는데
인생은 나를 알아가는 과정이다
라고 생각했었는데

내가 보는 유튜브에 정확하게
같은 말을 하는 유튜브를 봐서 3월의 일기를 쓸때가 되었구나 써야지!
라는 생각을 하고 바로 일기를 쓴다 ㅎㅎ

인생이 더 다채로워 진건
역시 취미 덕분이다

그리고
가장 중요한 건
나에게 밀려오는 감정을 회피 하지 않고
마주 한다는 것이다

내 감정을 인정하는 거 까지는 알고 있었지만,
감정을 마주 할 때 그 감정이 올라왔다 내려오는 걸
경험하고 지금은 그걸 연습하고 있는거 같다

그리고 연습할 때마다
잘되는 것이 느껴져서 아주 좋다

외로움을 마주하고
그리움을 마주하고
이런 부정적이라고 하면 부정적이고
힘든 감정을 마주하면 그 감정이 올라왔다가 내려가는 것이 신기하게도 느껴진다

물론 기쁘고 뿌듯하고 행복한 감정은
원래 잘 만끽한다 ㅎㅎ

그리고 작년에 머리를 다치면서
오랫동안 크로스핏을 쉬었었는데
작년에는 그게 너무나도 힘들었는데..

1년이란 시간이 지난 지금은
지금도 가끔 무리 하면 아프지만
내몸을 관리하면서 할 수 있는 운동을 하고
새로운 취미, 운동을 경험해보고
더 인생에 다채로워졌다
이런걸 보면
호재가 호재가 아니고 악재가 악재가 아니란 말이 맞다
다쳐서 힘든 순간이 많았지만
다치지 않았으면 크로스핏만 계속 했을텐데..
지금은 더 많은 활동들을 찾아서 하고 있지 않나?
이렇게 긍정적으로 생각하는 나
칭찬해!


특히, 3월에 시작한
클라이밍, 프리다이빙이 인생이 참 다채롭게 만들어 준다
그리고 업무도 열심히 하고 있어
퇴근할때마다 뿌듯하고
자존감이 올라간다

역시 난 성취감을 참 좋아한다
나를 더 단단하게 만들어 준다

3월엔 독서를 참 못한 거 같다
다시 독서를 하고 일기도 하루라도 더 써야겠다

마지막으로
앞에 말한 유튜브 링크를 공유하며
3월의 일기 끝

4월도 하루하루 오늘 하루
행복하길

아 여기 유튜브에서
꿈이 뭐냐 라는 질문이 있었는데

예전에 내 꿈은 행복하게 살자
였는데 지금은

오늘 하루 행복하게

https://youtu.be/AJOX_QwTZF4?si=SxX9XsejuShljQ_c






'DIARY' 카테고리의 다른 글

2025년 1월의 일기  (0) 2025.01.20

어떤말부터 적어야 할까

잘 산다는건 어떤 걸까
사람들이 사는 그 길 대로 살아야 잘 살고 있다는 기분이 드는걸까? 한국 사회에서는

나는 그동안 그런 인생을 살아왔다
어렸을때 부터 공부를 안한 적이 없고
크게 부모님 의견을 반한적도 없다

눈 앞에 놓인 공부를 열심히 했고
그 결과 대학을 진학 했고
남들이 다들 가고 싶어하는 대기업도 들어갔다

다음주면 그 대기업에 들어 온지 만 10년이 된다
이제 다음 스텝은 뭐일까
결혼 , 출산 , 육아 이겠지?

이게 남들과 다르게 느리다고 괜히 위축든다
난 지금까지 열심히 잘 살아왔는데
이걸로 평가를 받기도 한다

그럴때마다 조그라드는 기분이다
내가 당당하면 될텐데
혼자서 나를 다독이고 또 다독이는데
매번 하는 대수롭지 않은 말들이 날카롭게 다가온다

나만 떳떳하면 될텐데
평생을 모범생으로 살아온 탓일까
나도 원하는걸 못해서 그런걸까
자꾸 움츠러든다

인생은 속도가 아니라 방향이라고
다 알고 그렇게 살고 있는데
나는 스스로 너무 좋은 사람라고 알고 있는데도
움츠러 들지만
오늘 또 이런 일기를 쓰면서 나를 다독인다

생각해보면
사는건 이렇게 나를 다독이는 과정이지 않을까
주변사람들과 대화해 보면
사람들은 늘 가지지 못한 것을 가지고 싶어 한다

내가 어떤걸 가져도 그 다음 그 다음,
끝이 없겠지
그냥 오늘 하루를 성실히 행복하게 잘 사는 것
그것 만이 내가 해야하고 행복하게 살 수 있는 방법이지 싶다

여러 플랫폼으로 일기를 쓰고 있긴 하다.
예전엔 아이패드에 펜슬로
요새는 직접 글씨 쓰는게 좋아서 직접 노트에 적어서
또 가끔 막 적고 싶을땐
아이폰 일기앱으로 무작정 내 마음을 적곤한다.
 
 
그래도 일기를 쓰고 
뭔가 기록한지 대략 몇년 된거 같긴 한데
요새는 좀더 의식적으로 일기를 쓰려고 노력한다.
일기를 쓰는게 나랑 대화하는 거 처럼 느껴지고
또 생각 정리 하는게 이만한게 없기 때문이다.
 
그 누구에게도 인정 받지 않아도 되고
내가 나를 인정 해주면 되고
내가 나를 토닥일 수 있기에
이만한 것이 있나 싶다.
 
책을 읽고
일기를 쓰고 내가 점점 단단해 져가는게 느껴져서 좋다.
 
또 살다 보면 무너지고 슬픈 날도 있겠지만
나이가 들면서 좋은건
그럴 때 내가 어떻게 해야 된다는 것을 알고 있기 때문이다.
 
20대가 너무나도 힘들었던건

그럴때마다 우왕좌왕 어떻게 할지 모르는 내가 너무나도 감당이 안되었다. 

 
어느덧 30대 중반이고
회사에서도 연차가 올라가만 가는데
그래도 지금의 나를 보면
나이를 헛먹진 않은거 같아서 뿌듯하다.
 
 
 

'DIARY' 카테고리의 다른 글

2025년 3월의 일기  (0) 2025.03.22

Vuex를 다시 일하면서 쓸일이 생겼다..

ㅎㅎ.. 알고는 있지만 정확하게 이해하고 있는거 같진 않아서 다시 정리해보고자 한다!

(백엔드 위주로 하고싶은데.. 참,,, FE 를 놓지 못하게 한다 회사가)

 

 

 


1. Vuex 란?

  • Vue의 상태(State) 관리 도구
    • 상태: 여러 컴포넌트 간에 공유되는 데이터 속성
  • 서비스가 복잡해 졌을 때, 데이터를 다른 컴포넌트에 공유해야 할 수도 있음
    • 컴포넌트 레벨이 깊어지거나 관계가 복잡했을 때 상태관리 도구는 유용하게 사용
  • 컴포넌트에서 API를 불러와 화면을 그리는 것이 아닌, Vuex에서 API를 불러옴
    • Vuex의 State에 API로부터 받아오 데이터를 담음
    • State를 컴포넌트에 전달하여 화면을 그림
  • Vuex 구성요소
    • state : 여러 컴포넌트에 공유되는 data
    • getters : 연산된 state 값을 접근하는 속성 computed
    • mutations : state 값을 변경하는 이벤트 로직, 메서드 methods
    • actions : 비동기 로직을 선언하는 async mehods

 

2.State

  • 여러 컴포넌트 간에 공유할 데이터 - 상태

 

 

3.Getter

  • state값을 접근하는 속성이자 computed() 처럼 미리 연산된 값을 접근하는 속성

 

 

4. Mutations 이란?

  • state의 값을 변경 할 수 있는 유일한 방법이자 메서드
  • mutations는 commit()으로 동작
// store.js
state: { storeNum: 10 },
mutations: {
  modifyState(state, payload) {
    console.log(payload.str);
    return state.storeNum += payload.num;
  }
}

// App.vue
this.$store.commit('modifyState', {
  str: 'passed from payload',
  num: 20
})

 

  • mutations로 상태를 변경해야하는 이유?
    • 특정 시점에 어떤 컴포넌트가 state를 접근하여 변경한 건지 확인하기 어렵기 때문
    • 따라서, 뷰의 반응성을 거스르지 않게 명시적으로 상태변화를 수행
    • 반응성, 디버깅, 테스팅 혜택

src/store/index.js

import Vue from 'vue';
import Vuex from 'vuex';
import {fetchNewsList} from '../api/index.js';

// Vuex는 플러그인 형식으로 제공
Vue.use(Vuex);

//  인스턴스
export const store = new Vuex.Store({
  state : {
    news: []
  },
  mutations: {
    // 첫번째 인자 state, 두번째 인자 action으로부터 전달받은 값
    SET_NEWS(state, news) {
      // state에 데이터 전달
      state.news = news;
    }
  },
  actions: {
    // mutation에 접근할 수 있도록 context 인자가 제공
    FETCH_NEWS(context) {
      fetchNewsList()
        .then(response => {
          // mutation에 data를 넘길 수 있음
          context.commit('SET_NEWS', response.data);
        })
        .catch(error => {
          console.log(error);
        }) 
    }
  }
})

 

 

src/views/NewsView.vue

<template>
  <div>
	  // store의 state에 접근
    <div v-for="item in this.$store.state.news" > {{ item.title }} </div>
  </div>
</template>

<script>


export default {
  created() {
    // action 호출
    this.$store.dispatch('FETCH_NEWS');
  }

}
</script>

<style>

</style>

 

 

5. Actions 이란?

  • 비동기 처리 로직을 선언하는 메서드
  • 비동기 로직을 담당하는 mutations
  • 데이터 요청, Promise, ES6 , async 와 같은 비동기 처리는 모두 actions에 선언
  • actions에 비동기 로직을 선언해야하는 이유?
    • 언제 어느 컴포넌트에서 해당 state를 호출하고, 변경했는지 규격화를 하여 확인하기 위해
    • mutations에 시간차를 두고 state를 변경하는 경우 추적하기 어려움
    • 그러므로 mutations속성에는 동기처리 로직만 넣어야함
  • Vuex에서 api 호출은 Actions에서 하기
    • 비동기 호출
    • Backend API를 호출하여 Mutations에 넘겨주기 위한 속성
    • Vuex 구조상 actions에서 state에 바로 담을 수 없게 되어 있음
    • Actions는 Vue Component에서 Dispatch라는 api로 호출 가능
// store.js
mutations: {
  setData(state, fetchData) {
    state.product = fetchData;
  },
},
actions: {
  fetchProductData(context) {
    // api 호출 이후 응답을 state에 넣음
    return axios.get('https://domaion.com/products/1')
    						.then(response = context.commit('setData', response));
  }
}

// App.vue
methods: {
  incrementCounter() {
    this.$store.dispatch('fetchProductData');
  }
}

 

 

6. Module

  • state, getters, mutations, actions가 많아질 수록 코드의 가독성은 떨어지고 유지보수는 힘들어짐
    • 별도의 파일로 모듈화 하는 것이 편함
    • actions.js, mutations.js 파일에 각 코드를 옮기기

 

7. Helper

7.1 mapStates

  • Vuex에 선언한 states 속성을 뷰 컴포넌트에 더 쉽게 연결해주는 헬퍼
<template>
  <div>
    <div v-for="item in ask"> {{ item.title }} </div>
  </div>
</template>

<script>
import {mapState} from 'vuex';
export default {
  computed: {
    // store의 state에 접근하여 ask를 가져옴
    // spread 연산자로 computed에 ask를 뿌림
    ...mapState({
      ask: state => state.ask,
    }),
  },
  created() {
    this.$store.dispatch('FETCH_ASK');
  },
}
</script>

<style>

</style>

7.2 mapGetters

  • Vuex에 선언한 getters 속성을 뷰 컴포넌트에 더 쉽게 연결해주는 헬퍼
import { mapGetters } from 'vuex'

export default {
  // ...
  computed: {
    // mix the getters into computed with object spread operator
    ...mapGetters([
      'doneTodosCount',
      'anotherGetter',
      // ...
    ])
  }
}
...mapGetters({
  // map `this.doneCount` to `this.$store.getters.doneTodosCount`
  doneCount: 'doneTodosCount'
})

7.3 mapMutations

  • Vuex에 선언한 mutations 속성을 뷰 컴포넌트에 더 쉽게 연결해주는 헬퍼
// App.vue
import { mapMutations } from 'vuex';

methods: {
  ...mapMutations(['clickBtn']),
  atuhLogin() {},
    displayTable() {}
}

// store.js
mutations: {
  clickBtn(state) {
    alert(state.msg);
  }
}

 

<button @click="clickBtn">popup message</button>

 

7.4 mapActions

  • Vuex에 선언한 actions 속성을 뷰 컴포넌트에 더 쉽게 연결해주는 헬퍼
// App.vue
import { mapActions } from 'vuex';

methods: {
  ...mapActions(['delayClickbtn']),
}
  
// store.js
actions: {
  delayClickBtn(context) {
    setTimeout(() => context.commit('clickBtn'), 2000);
  }
}
<button @click="delayClickBtn">delay popup message</button>

참고:

https://greedysiru.tistory.com/808

 

Vue.js - Vuex, Vuex 모듈화 및 state 적용

본 내용은 인프런 장기효(캡틴판교)님의 Vue.js 완벽 가이드 - 실습과 리팩토링으로 배우는 실전 개념 강의를 토대로 작성하였습니다. 1. Vuex Vue의 상태(State)관리 도구 상태: 여러 컴포넌트 간에 공

greedysiru.tistory.com

https://vuex.vuejs.org/guide/getters.html#the-mapgetters-helper

 

Getters | Vuex

Getters Sometimes we may need to compute derived state based on store state, for example filtering through a list of items and counting them: computed: { doneTodosCount () { return this.$store.state.todos.filter(todo => todo.done).length } } If more than o

vuex.vuejs.org

 

+ Recent posts