Categories
투병

폐암인가

3월 7일, 퇴원 후 나는, 폐 걱정이 전혀 안되었다면 거짓말이겠지만

이제부터라도 건강하게 살기 위해 아침에 일어나서 간단하게 아침 식사도 하고 원래 야채를 싫어하지만 회사 식당에서 나오는 야채도 잘 먹고, 잠도 잘 자며 충남대병원 진료일을 기다렸다.

3월 27일이 되어, 회사에 휴가를 내고 충남대병원으로 향했다.

머리로는 “별 거 아닐거야.” 라고 세뇌를 시키는데 마음이 자꾸만 걱정을 하게 된다.

점심으로 오랜만에 맘스터치 싸이버거를 먹고

달달한 커피를 들고 병원으로 향했다.

“별 거 아니겠지.”

하지만 의사 선생님은 별 거 아니라고 하지 않으셨다.

CD에서 엑스레이 사진을 보더니 흉부 ct를 찍어보자고 하신다.

진짜 큰 병인가..

무거운 마음으로 회사에 가서 엑스레이 CD를 열어보는데

정확히는 의사가 아니라서 잘 모르겠지만 하얀색 저 놈인 것 같다.

나는 인터넷에서 여러 사람들의 각종 사례들과 병들을 찾아보니

호치킨이니 뭐니 하는 림프종과 폐암 같은 무서운 병들이 나온다.

회사 동료는 “괜찮은 사람들은 인터넷에 올리지 않는다.” 라며 검색을 하고 찾아보면 더 스트레스 받고 안좋다. 라고 이야기를 하며 위로해주지만

나는 “다른 사람이 아플 때, 나 였어도 그렇게 이야기 했을거다. 그런데 당사자가 되니 그게 쉽지않다.” 라는 이야기를 나누며 일상을 보냈다.

3월 31일, CT 촬영일이다.

촬영 전 미리 주사기를 꽂아주고 이후에 촬영실에 들어가 주사기에 조영제를 넣는데

온 몸이 뜨거워지고 토할 것 같은 느낌이 났지만 금방 촬영이 끝났다.

결과는 4월 7일이 되어서야 나왔다.

호흡기내과 선생님은 CT 결과를 보며

“폐에 있는 것이 종양인 것 같은데 모양으로 봐서는 악성이다.”

“조직 검사를 해봐야겠다.” 라며

입원을 하고 검사 당일에는 보호자가 반드시 있어야 된다고 이야기를 하셨다.

왜 하필 나지? 난 담배도 안피는데.. 담배를 혐오하는 사람인데..

부모님이 걱정할까봐 지금까지 말씀드리지 못하고 혼자 병원에 다녔었는데, 이제 말씀을 드려야되는 날이 왔다.

아빠한테 전화로 지금까지 진행 상황과 앞으로 어떻게 해야되는지 상세히 말씀드리니

아빠는 전재산을 팔아서라도 내 병을 치료하는데 전념할거라고 하시며

하시던 일도 다 취소하고 병원에 오시게 되었다.

Categories
투병

이상한 덩어리

후미 추돌 후, 나는 대전자생한방병원에 입원하게 되었다.

입원을 진행하며 엑스레이를 찍게 되었는데 주치의 선생님을 통해 폐에 이상 소견이 있다는 말을 들었다.

별 거 아닐 확률이 높으니 너무 걱정하지 말라고 하면서 퇴원 후에 큰 병원에서 다시 검사를 받아보라고 하셨다.

하지만 나는 걱정이 된 나머지, 입맛도 없어 밥도 먹지 않고, 잠도 거의 못 자고 날이 밝았다.

다음 날, 대전에서 큰 병원 여러 군데 전화를 해봤지만 바로 진료를 볼 수 있는 데는 없었고, 자생한방병원과 같은 건물을 쓰는 이비인후과·소아과에서 코로나 검사를 하며 겸사겸사 폐에 있는 이상 소견을 여쭈어보았다.

의사 선생님은 나이가 많은 환자면 바로 가라고 하겠는데 나이가 워낙 젊으셔서 진짜 별 것 아닐거라며

너무 걱정하지 말고 퇴원 후에 큰 병원에서 진료를 받아보라고 하셨다.

그래서 나도 “진짜 별 거 아닌가보다.” 라고 생각하며 밥도 잘 먹고 잠도 잘 자려고 했다.

대망의 퇴원일, 폐의 이상소견이 담긴 진료의뢰서와 CD를 가지고 퇴원을 했다.

퇴원 후, 대전에서 가장 좋다는 충남대병원으로 가기로 했고, 가장 빠른 예약이 3월 27일이라 그 때로 예약했다.

Categories
투병

운명의 날

2024년 3월 3일, 삼일절을 낀 3일의 달콤한 휴일을 부모님과 즐겁게 보내고 집으로 돌아가는 길이였다.

국도를 타고 얼마 지나지 않은 그 때, 엄청난 소리와 함께 온 몸이 저려왔다.

뒤에서 후미 추돌을 한 것이였다.

내 재산 1호인 싼타페가 부서져서 마음이 아팠지만 일단 상대방과 사고 처리를 해야했다.

그런데 상대 차주 왈,

“내가 일부러 그랬나?”

이런 식의 궤변을 늘어놓다 사고 처리 후에도 죄송하다는 말 한마디 없이 내 마음에 상처를 남기고 사라졌다.

하지만 이 때는 몰랐다.

이 사고가 전화위복이 될 줄..

Categories
프로그래밍

Props & Emits

Props

자식 컴포넌트에서 부모로부터 데이터를 받는 것이다.

<!-- ChildComp.vue -->
<script setup>
const props = defineProps({
  msg: String
})
</script>

자식 컴포넌트에 props 를 선언하고

<script setup>
import { ref } from 'vue'
import ChildComp from './ChildComp.vue'

const greeting = ref('부모 컴포넌트로부터 💌을 전달받았어요!')
</script>

<template>
  <ChildComp :msg="greeting" />
</template>

이렇게 부모 컴포넌트에서 자식 컴포넌트로 greeting 을 msg로 전달한다.

Emits

자식 컴포넌트는 부모로부터 props를 받는 것 뿐만 아니라 이벤트를 발송 할 수 있다.

<script setup>
// emit할 이벤트 선언
const emit = defineEmits(['response'])

// 인자와 함께 emit
emit('response', '자식 컴포넌트로부터 🌷를 받았어요!')
</script>

이렇게 자식이 발송한 response 라는 이름의 이벤트에 메시지를 실어서 보내면

<script setup>
import { ref } from 'vue'
import ChildComp from './ChildComp.vue'

const childMsg = ref('자식 컴포넌트로부터 아직 메시지를 받지 못했어요!')
</script>

<template>
  <ChildComp @response="(msg) => childMsg = msg" />
  <p>{{ childMsg }}</p>
</template>

부모에서는 이렇게 수신할 수 있다.

Slots

props 로 데이터를 전달하는 것 외에도 구성 요소는 slots 를 통해 템플릿 조각을 자식 구성 요소에 전달할 수도 있다.

Categories
프로그래밍

Vue 3, Options API vs Composition API

Options API 는 기존 Vue.js의 전통적인 방식으로

<script>
export default {
  data() {
    return {
      count: 0
    }
  },
  methods: {
    increment() {
      this.count++
    }
  }
}
</script>

<template>
  <button @click="increment">숫자 세기: {{ count }}</button>
</template>

이런 식으로 data, methods, computed, watch 등의 정해진 구조 안에 작성하는 방식이다.

하지만 Vue 3 부터는 Composition API 라고 해서

<script setup>
import { ref } from 'vue'

const count = ref(0)
</script>

<template>
  <!-- 이 버튼이 작동하도록 만들어 봅시다 -->
  <button>숫자 세기: {{ count }}</button>
</template>

이런 식으로 함수를 import 하고 JavaScript 와 비슷하게 작성된다.

Composition API 의 장점은 정해진 틀 안에 작성하는게 아니라 유연하고 상태와 로직이 분리되지 않고 한 덩어리로 있어서 보기 편하다.

Vue 3 에서도 Options API 를 계속해서 지원하지만 본인은 Composition API 를 주로 사용 할 예정이다.

Categories
프로그래밍

Docker & GitLab 설치

로컬 컴퓨터에서 GitLab을 사용하고 싶은데 설치를 하려면 docker 가 필요했다.

윈도우 WSL Ubuntu 환경에서

sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce
sudo docker --version

이렇게 하면 docker 가 설치된다.

이후에

docker pull gitlab/gitlab-ce:latest

gitlab 최신 버전을 받아주고

docker run --detach \
  --hostname your-gitlab-domain.com \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume /docker/gitlab/config:/etc/gitlab \
  --volume /docker/gitlab/logs:/var/log/gitlab \
  --volume /docker/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

이렇게 입력을 하면 실행이 된다.

잘 실행이 되어서 작업하던 개인 프로젝트를 모두 올려놨다.

Categories
프로그래밍

비밀번호 암호화 및 dotenv 사용

기존 소스에서는 회원가입을 할 때

프론트엔드에서 salt 생성 및 해시화를 한 이후 백엔드로 넘겨주었는데

이렇게 하면 프론트엔드에서 탈취를 할 가능성이 있다고 한다.

그래서

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
app.post(‘/register’, (req, res) => {
    const { email, username, password } = req.body;
 
    const salt = crypto.randomBytes(16).toString(‘hex’);
    const hash = crypto.createHash(‘sha256’).update(password + salt).digest(‘hex’);
 
    const query = ‘INSERT INTO users (email, username, password, salt) VALUES (?, ?, ?, ?)’;
 
    db.query(query, [email, username, hash, salt], (err, results) => {
        console.log(results);
        if (err) {
            return res.status(500).json({ message: ‘회원가입 실패’ });
        }
        return res.status(201).json({ message: ‘회원가입 성공’ });
    });
});
 
cs

백엔드에서 처리를 하게 바꾸었고

하드코딩 되어있던 MySQL 등 환경 변수들을 dotenv 를 이용하여

.env 파일로 관리하게 바꾸었다.

Categories
미분류

SHA-1 & SHA-256

SHA 이란?

Secure Hash Algorithm 의 줄인 말

1. SHA-1

160비트(20바이트)

충돌 공격 매우 희박한 확률로 다른 값이 같은 해시를 가질 수 있다.

안전하지 않아서 현재 SHA-256으로 대부분 전환되었다.

    2. SHA-256

    256비트(32바이트)

    SHA-2의 한 종류

    Categories
    미분류

    Visual Studio Code 에서 npm 실행이 안될 때

    npm : 이 시스템에서 스크립트를 실행할 수 없으므로 C:\Program Files\nodejs\npm.ps1 파일을 로드할 수 없습니다. 자세한 내용은 about_Execution_Policies(https://go.microsoft.com/fwlink/?LinkID=135170)를 참조하십시오.
    위치 줄:1 문자:1
    + npm
    + ~~~
        + CategoryInfo          : 보안 오류: (:) [], PSSecurityException
        + FullyQualifiedErrorId : UnauthorizedAccess
    

    이런 오류가 뜨면 VS Code를 관리자 권한으로 실행해서

    Set-ExecutionPolicy RemoteSigned

    입력한다.

    Categories
    미분류

    사고싶은거 모음

    스탠리 해머드릴 고장나서 신형 721