분류 전체보기
[Kotlin] 확장 함수와 프로퍼티
[Kotlin] 확장 함수와 프로퍼티
2022.03.20코틀린 확장 함수 코틀린은 기존 클래스에 메소드를 추가할 수 있습니다. 이를 확장 함수라고 합니다. 하지만 기존 클래스에 대해 메소드를 확장적으로 선언을 할 수 있을 뿐, 해당 클래스의 구현부를 바꿀 수는 없습니다. 기존 클래스는 그대로 두고 클래스 주변에 새로운 함수를 추가하여 클래스의 크기를 확장한다. 라고 생각하면 좋을 것 같습니다. String 클래스의 메소드인것 처럼 사용할 수 있는 lastChar 메소드를 확장해보겠습니다. 확장 함수의 선언 방법은 아래와 같습니다. fun String.lastChar():Char = this.get(this.length - 1) // this 생략 가능 fun String.lastChar():Char = get(length - 1) // 사용시 println(..
typescript로 배우는 stub, mock, spy의 차이점
typescript로 배우는 stub, mock, spy의 차이점
2022.02.02mock은 stub과 다르다. 저는 테스트 코드를 작성 시 mock과 stub의 차이를 생각하지 않고 써왔습니다. 최근 마틴 파울러의 블로그에서 Mocks Aren't Stubs 라는 글을 발견했습니다. Mocks Aren't Stubs Explaining the difference between Mock Objects and Stubs (together with other forms of Test Double). Also the difference between classical and mockist styles of unit testing. martinfowler.com 원문의 내용은 JAVA로 작성되었지만, 본 포스팅에서는 Typescript + jest로 정리하며 작성하였습니다. Test Doub..
[NestJS] JWT 로그인 구현 예제 (bcrypt, passport, JWT, cookie)
[NestJS] JWT 로그인 구현 예제 (bcrypt, passport, JWT, cookie)
2021.12.29사용자 인증/인가는 모든 웹 애플리케이션에서 가장 중요한 부분입니다. 이전 포스트에서는 Node.js를 이용하여 JWT로그인을 구현했습니다. [node.js] JWT 구현 예제 Intro 웹 / 앱 개발을 하면 로그인 과정에서 반드시 만나게 되는 개념이 쿠키-세션이다. 최근 들어 IT 인프라 구성에는 많은 변화가 생겼다. 웹 기반의 서비스들은 웹과 앱을 함께 서비스하 charming-kyu.tistory.com 이번에는 NPM 라이브러리에서 가장 많이 사용되는 Passport를 이용하여 NestJS 애플리케이션에 로그인을 구현해보겠습니다. 또한 해싱(Hashing)을 통해 사용자를 등록하고 비밀번호를 안전하게 암호화하여 보호하겠습니다. User Entity 인증을 고려할 때 가장 먼저 해야 할 일은 사..
[회고] 2021년 회고
[회고] 2021년 회고
2021.12.23돌아보며 '다이나믹한 경험의 2021년' 이렇게 정리할 수 있겠다. 연초에 세웠던 2021년 목표에 대해 다시 되돌아보고자 한다. 1. 평점 4.5 졸업하기 (실패) 2021년 1학기, 2학기 전부 4.5를 받는다면 전 학기 평점 4.5로 졸업이 가능했다. 1학기는 회사를 다니면서 학업을 병행했기 때문에 4.5를 받았지만, 2학기는 인프랩에 오게되면서 매일매일 출퇴근으로 3.5시간이 길바닥에 버려지고 일이 재미있어 일에 집중을 하다보니 4.1을 받게되었다. ㅠㅠ 그래서 4.5 졸업은 물건너 갔다. 물론 아쉬웠지만 전혀 아쉽지 않았다(?) 살을 내주고 뼈를 취한다는 생각으로 인프랩 합류를 결심한 순간부터 이미 4.5 졸업은 못할 것 같다는 예상을 했다. 2. 전공 관련된 일 하기 (성공) 항상 개발을 하..
[express] Redis 개념 및 nodejs 캐시 구현 예제
[express] Redis 개념 및 nodejs 캐시 구현 예제
2021.12.19들어가며 웹 어플리케이션에서 데이터를 캐시하는 것은 매우 중요하며 고성능을 얻을 수 있습니다.물론 데이터를 관계형 데이터베이스에 저장 후 직접 쿼리하여 사용자에게 제공할 수 있지만 매 요청마다 쿼리를 해야하거나 메인페이지에 사용되는 타 API에 비해 상대적으로 많이 호출되는 데이터들은 캐시하는 것이 유리할 수 있겠습니다. 먼저 간단히 Redis에 대해 알아보고 express로 구현 예제를 작성하겠습니다. Redis란? REDIS(REmote Dictionary Server)는 메모리 기반의 “키-값” 구조 데이터 관리 시스템이며, 모든 데이터를 메모리에 저장하고 조회하기에 빠른 Read, Write 속도를 보장하는 비 관계형 데이터베이스입니다. 대표적으로 5가지의 데이터 형식으로 사용 가능합니다. St..
OAuth 2.0 개념 총 정리
OAuth 2.0 개념 총 정리
2021.12.05들어가며 OAuth 2.0을 실무, 토이프로젝트에서 많이 사용했던 기술이지만 항상 함께 제공해주는 라이브러리로 간단하게 구현을 했었습니다. 하지만 여태 사용해본 라이브러리는 특정 구조를 가진 서버에서만 간편하게 사용할 수 있었고, 서버의 구조가 조금만 바뀌게 된다면 여지없이 직접 구현을 해야 됐습니다. 현재 회사에서 하고있는 프로젝트는 조금 독특한 서버 구조를 가지고 있는 상태에서 OAuth 2.0을 사용하게 되어 직접 구현을 하게 되었습니다. 이번 포스팅은 OAuth 2.0의 개념과 동작 방식을 설명하고 다음 포스팅에서 구현 방법에 대해 설명하겠습니다. OAuth 2.0 OAuth 2.0(Open Authorization 2.0, OAuth2)은 인증을 위한 개방형 표준 프로토콜입니다. 이 프로토콜에서..
[Typescript] 객체지향의 SOLID 원칙
[Typescript] 객체지향의 SOLID 원칙
2021.11.26객체지향에서 대표적인 원칙이라고 할 수 있는 SOLID 원칙에 대해서 알아보고자 합니다. 설계가 올바르게 되었는지를 확인하는 하나의 기준과 가이드라인으로써 신뢰받고 있는 원칙에 대해 학습하여 제가 하고있는 프로젝트의 설계를 점검하고 재설계하는 과정에서 도움이 되기를 기대합니다. SOLID 는 아래의 5가지 원칙으로 만들어진 단어입니다. SRP (Single segregation principle) 단일 책임 원칙 OCP (Open/closed principle) 개방-폐쇄 원칙 LSP (Liskov substitution principle) 리스코프 치환 원칙 ISP (Interface segregation principle) 인터페이스 분리 원칙 DIP (Dependency inversion princ..
[Typescript] 객체지향의 의존관계와 캡슐화
[Typescript] 객체지향의 의존관계와 캡슐화
2021.11.13의존관계 객체지향 프로그래밍에서 한 객체가 다른 객체를 사용한다는 것은, 다른 객체를 생성하거나 다른 객체의 메소드를 호출하는 행위를 말합니다. 이와 같이 한 객체가 다른객체를 생성 또는 메소드를 호출할 때, 그 객체에 의존한다고 표현합니다. abstract class Weapon { public abstract attck(): void; } class Sword implements Weapon { attck(): void { console.log('Sword'); } } class Player { private weapon: Weapon; availWeapon(): void { this.weapon = new Sword(); this.weapon.attck(); // Sword } } 위 예제를 보면 ..
[회고] EO 한달어스, 박지웅 대표님의 이야기
[회고] EO 한달어스, 박지웅 대표님의 이야기
2021.11.07https://youtu.be/yVHn-M5DALk?t=716 과연, 무엇이 사람들을 학습하게 하는가? 박지웅 대표는 사회 경제적 환경이라 답한다. 질 좋은 콘텐츠를 직관적인 방식으로 기획해, 이를 홍보했다, 열심히. 하지만 사람들은 배우려 하지 않았다. 왜일까. 배우고자 하는 니즈가 없기 때문이다. 하지만, 그것이 사회 정치 경제적 흐름과 관련된 것이라면 이야기가 달라진다. 수능 열풍부터 영어, 중국어, 공무원, 코딩 열풍까지. 이런 학습 열풍은 "내적 동기"에서 비롯된 것이 아니다. 사회적 시류라는 "외적 동기"에서 비롯된 것이다. 네카라쿠배 초봉 5,000 열풍으로 코딩을 배우려는 사람들을 보며 박지웅 대표는 결론을 내린 듯하다. 콘텐츠의 양질의 차이로는 대중을 학습하게 만들 수 없다. 학습하려는 ..
육각형 아키텍처로 변화 준비 - Netflix Tech Blog (번역)
육각형 아키텍처로 변화 준비 - Netflix Tech Blog (번역)
2021.11.06본 포스트는 Netflix 기술 블로그에서 발췌한 Ready for changes with Hexagonal Architecture 을 번역한 것입니다. Netflix Originals의 제작이 매년 증가함에 따라 컨텐츠 제작 과정에서 효율성을 증가시키는 앱을 구축해야 할 필요성도 커지고 있습니다. 우리의 Winder Studio Engineering 팀은 컨텐츠 스크립트 획득, 거래 협상 및 공급업체 관리, 제작 절차 간소화 등 컨텐츠의 각본부터 제생에 이르기까지 제작을 돕는 수많은 앱을 구축했습니다. 처음부터 엄청난 통합 약 1년 전, Studio Workflow 팀은 비즈니스의 여러 도메인을 넘나드는 새로운 앱을 개발하기 시작했습니다. 우리는 흥미있는 과제를 가지고 있었습니다. 처음부터 어플리케이션..
[Typescript] 타입 단언, 타입 가드 ,타입 호환
[Typescript] 타입 단언, 타입 가드 ,타입 호환
2021.10.17이 글은 인프런의 TypeScript 입문 - 기초부터 실전까지 강의를 듣고 정리한 글입니다. 타입 단언(Type Assertion) let z: any; z = 20; z = 'z'; let b = z; // b: any let b = z as string; // b: string 네번째 줄 까지만 봤을 때, 결국 z는 마지막에 문자열 타입으로 인식이 되었을 것이라고 추론할 수 있지만, 실제로 프리뷰를 보면 any 타입으로 되어있다. 그래서 b도 any타입을 반환한다. 이렇게, 명확한 typing이 되지 않는 문제를 해결하기 위해서 맨 마지막 줄로 z를 string type으로 단언해준 뒤 그것을 b에 부여하였다. 이 결과 b는 문자열 타입을 갖게 된다. 예시를 보자. 자바스크립트에서 사용하는 대표적인..
[회고] 생에 첫 퇴사 회고
[회고] 생에 첫 퇴사 회고
2021.10.121. 기이한 우연 함께 공부하는 동기가 이력서를 올려놓았는데 어디 회사 대표님께서 직접 연락을 주셨다고 했다. 내용은 같이 일해보지 않겠냐는 일종의 오퍼였다. 하지만 당시 동기는 다른 일을 하고 있었고 node.js 라는 말을 듣고 바로 내가 떠올랐다고 했다. 그래서 소개를 시켜드리겠다고 시작된 것이 대표님과 나의 인연이 시작되었다. 지금 생각해보면 참 기이한 우연이다. 그 후 간단한 면접을 통해 내 생에 첫 IT 회사에 발을 들이게 되었다. 2. 삐그덕 거리는 시작 회사는 문체부, 창업진흥원에서 선정돼 약 1억 정도 받은 회사였고 구성원은 총 4명이라고 하셨다. 그리고 나랑 함께 일할 팀원은 없다고(?) 하셨다. 회사에 개발자는 나랑 같이 들어오신 신입 프론트엔드 개발자, 저녁에만 일하시는 유니티 개발..