오히려 좋아..

상황이 나쁘게만 흘러가는 것 같을 때 외쳐보자.. .

궁금한 마음으로 포트폴리오 보기

분류 전체보기 245

추상클래스와 인터페이스 차이

매번 사용하면서도 모르는 추상클래스와 인터페이스의 차이에 대해 설명하려고 한다. 구글에 검색해봐도 사실 어려운 이야기만 잔뜩 있어서 이게 뭐지 라는 생각만 든다. 나는 이 둘의 차이를 용도의 차이 측면에서 보려고 한다. 결론부터 말하면 추상클래스는 확장해서 사용하기 위함이고 인터페이스는 설계를 위함이다. 아직 무슨 말인지 감이 오지 않을 것이다. 먼저 추상 클래스의 예시를 보자! 1. 추상 클래스 예를 들어 Company 라는 추상 클래스가 있고 이 클래스는 아래와 같다. 추상클래스는 자식 클래스들의 공통된 구현을 추상 클래스 내에 정의된 상수나 구현을 이용해 중복을 없애고 추상 메서드를 이용해 자식들의 구현을 강제한다. abstract class Company { private name: string;..

Paradigm/OOP 2022.08.21

우리가 간절히 바랄 수 있는 것

행복인 불행이 없는 것 이라는 주장에 꽤 동감하고 있다. 삶에서 우리가 간절히 바랄 수 있는 건 불행이 우리를 발견하지 않게 몸을 낮추고 기도하는 일 뿐이다. 이런 맥락에서 해리포터의 죽음의 성물의 삼 형제 이야기가 훌륭한 통찰을 담았다고 생각한다. 셋째가 투명망토를 둘러 수명이 다하기 직전까지 죽음이 그를 찾지 못하게 한 것 처럼 인간의 유한함을 인지하고 나에게는 투명 망토는 없으니 죽음이 예정보다 빨리 오지 않기를 바랄 뿐이다. 죽음은 기본적으로 폭력적이다. 자연사는 존재하지 않는다. 즉 수명이 다해 숨이 자연스럽게 멎어지는 개념 자체는 존재하지 않는다. 호흡 곤란이나 심장마비가 우리에게 주어진 선택지이고 우리는 죽음 앞에서 어떤 선택도 할 수 없다. 죽음이 이렇게 끔찍한 걸 아무도 나에게 말해주지 ..

글/일상 2022.08.21

[Typescript] Object key 타입 정의

자주 사용하지만 항상 까먹어서 정리해둔다. 1) Union String인 경우 type fruit = "orange" | "strawberry" | "melon" // Optional인 경우 {[key in fruit]: number} const fruitPrices: {[key in fruit]: number} = { orange:10, strawberry: 20, melon: 30 } const fruitPrices2: Record = { orange:10, strawberry: 20, melon: 30 } 2) Enum인 경우도 동일하지만 위 예제와 동일하게 사용시 value 값을 사용하게 된다. enum Fruit { Orange="orange", Strawberry="strawberry", Me..

[Python] WSGI란?

오늘은 늘 보지만 어색한 WSGI에 대해 알아보겠습니다. WSGI란? 먼저 WSGI를 한마디로 정리해보면 웹서버(Web Server)와 서버 어플리케이션 사이를 연결해주는 부분입니다. 물론 후려친 정의이지만 일단 이렇게 알아둡시다. 아직 웹서버와 웹 어플리케이션 차이를 모르신다면 아래 페이지를 통해 알아보세요! https://cocook.tistory.com/87 [Web] WAS와 Web Server 차이 3줄 정리 1. 웹서버는 정적페이지, WAS는 동적페이지 응답 2. 둘다 함께 배포하는 이유는 각자 잘하는 걸 하기 위함 3. 장고는 꼭 Webserver와 배포하자 장고 배포와 관련된 글을 보면 WS(Web Server, 웹 cocook.tistory.com 이를 조금 어렵게 말해보자면 웹서버와 웹..

Language/Python 2022.08.16

아침에는 죽음을 생각하는 게 좋다

오늘은 에어컨 청소 아저씨가 오셔서 출근을 늦게 하게 되었다. 시간이 남아 이런저런 생각을 한다. 송해 선생님이 자택에서 별세 하셨다고 한다. 우연히 들어간 커뮤니티 인기글 순위에 있는 두 개의 글 폐암 4기 판정 받았습니다. 아들의 첫 생애 소풍!!! 삶과 죽음은 맞닿아 있다는 생각을 한다. 달려있는 많은 응원의 댓글 응원으로 병이 낫는다면 얼마나 좋을까 중간중간 대체의학이나 종교를 권유하는 글도 보인다. 무슨 생각들이신건지. 다들 자신만의 진실로 세상을 살아간다.

글/일상 2022.06.08

MBTI가 미친 영향

나와 전혀 다르게 생각하는 인간의 존재를 받아드리게 된 것. 서로의 기질에 대해 터놓고 이야기 할 수 있는 장을 열어준 것 떨어지는 사회성이 타고난 성향일 수 있다는 것. 가령 사회성이 높은 친구들 모임에 있는 그들보다 사회성이 조금 낮은 친구는 자기 자신의 사회성 결여가 문제라고 생각할 수 있음. 주변 친구들도 자신과 다른 친구의 행동을 이해하기 어려움 하지만 MBTI라는 아주 무딘 칼을 통해 인간 유형을 준객관적으로 나눠주어 친구의 행동을 이해할 수 있는 수단이 생김 MBTI는 이전부터 존재하던 것. 하지만 놀이화를 통해 파급력을 키워갔다. MBTI 이전에 인간을 나누던 수단인 혈액형과는 어떤식으로 다른 것인가? 단순히 혈액형은 비과학 MBTI는 과학 이런식으로 나눌 수는 없을 듯 다양한 인간상을 4..

글/일상 2022.05.28

주니어 개발자에게 필요한 경험

이제 어느덧 지금회사 다닌지도 9개월 정도 되었다. 일년전으로 돌아간다면 아래 것들을 준비했을 것 같다. * git 형상관리 * OOP 관련 개념 * 클린 아키텍쳐(layered architecture로 구성된 프레임워크, nestjs, spring) * 문서화(문서 자동화) * 테스트 코드 작성, 코드 리뷰 구현 방법은 일단 코드 리뷰는 혼자 할 수 있는 부분이 아니기 때문에 제외하고 적어보면 nestJS와 reactJS로 블로그 프로젝트를 만든다. 가장 간단한 형태의 리스팅기능과 글 작성 기능만 있는 형태이다. 기능별로 브랜치를 만들어 작업한다. 블로그에 글을 작성하면서 기능을 하나씩 추가한다. 사용하면서 불편했던 점을 개선할 기능들을 직접 추가한다. 이때도 역시 브랜치를 따로 파서 작업한다. 이걸 ..

글/🐕🐾 일기 2022.05.25

NestJS를 사용 후기

NestJS는 마치 설계도 없는 레고블럭을 산 느낌이다. NestJS를 보다가 잠깐 우리 Django를 보면 이렇게 완제품으로 잘나오다니... 이런생각이 종종 든다. 음.. Nest가 직접 재료를 사다 음식을 만든다고 하면 Django는 밀키트 느낌이다. 어쨌든 Nest는 뭔가 모듈화 로직 + typescript의 type을 이용해 동적 타입언어에서 마치 스프링을 쓰는 느낌을 제공해준다. 상대적으로 러닝커브도 낮고. 난 장고가 짱인 줄 알았지만 NestJS를 계층화 시켜서 사용해보면 아 이게 의존성 주입이구나 아 이게 OOP구나 아 이게 clean architecture구나 라고 생각하게 된다. 만약 내가 개발 학원을 차린다면 무적권 장고로 개발 맛만 보여준뒤 NestJS를 배우게 하고 싶을 정도로 편하..

글/🐕🐾 일기 2022.05.21

[NestJS] Mongoose Cache 적용

nestjs는 기본적으로 모듈화를 지향한다. 클라이언트(프론트 엔드 아님) 에서 사용할 부분만 보여주고 나머지 로직은 보여주지 않는 캡슐화를 지향하는 것이다. 그래서 기존에 작성되어 있는 NodeJS 패키지들을 NestJS에서 사용하기 위해 패키지를 다시 작성하거나 캡슐화를 하지않고 사용해야한다. 하지만 캡슐화를 하지 않고 사용하자니 도메인 로직 코드에 패키지에 대한 의존성이 끊임없이 전파되는 것을 보면 참을 수가 없는분노가 치밀어 오른다. 그렇다고 패키지를 모듈화 해서 다시 작성하자니 부담스러운게 사실이다. 오늘은 모듈화 하지않고 적당한 캡슐화를 할 수 있는 방법을 cachegoose 패키지를 통해 설명하려고 한다. 1. Mongoose Cache cachegoose는 mongodb로 날라가는 쿼리를 ..

[typescript] class-transformer, Object를 클래스로 클래스를 Object로! [1]

종종 개발을 하다보면 외부에서 들어온 JSON 응답을 내부 로직에 사용하거나 내부에 있는 데이터를 외부로 보내줘야할 때가 있다. 그럴때마다 들어온 JSON을 그대로 사용하거나 plain Object를 만들어 반환해줄 때가 있다. 하지만 이런 방식은 돌아가지만 좋은 방식은 아니다. 왜냐하면 외부의 세부 사항이 그대로 들어나 내부로직을 더럽히는 경우가 발생하기 때문이다. 즉 캡슐화가 제대로 되지 않는다는 의미이다. 예를 들어 클라이언트에서 서버응답을 받아 그대로 Object로 만들어 사용하는 경우를 생각해보자. 이 경우에는 서버의 필드 값이 변경되었을 때 해당 API를 사용하는 모든 컴포넌트에 변경이 필요하다. 그 뿐만 아니라 클래스로 변환하면서 해당 클래스에 관련된 로직을 구현할 수 있어서 오히려 코드에 ..