분류 전체보기
[Kotlin] coroutine, suspend 함수 정리 및 예제
[Kotlin] coroutine, suspend 함수 정리 및 예제
2022.04.19Coroutine 코루틴이란. 실행의 지연과 재개를 허용함으로서, 비선점 멀티테스킹을 위한 서브루틴을 일반화한 구성요소입니다. 자세히 이해하기 위해 서브루틴과 비선점 멀티테스킹 두가지 개념을 알아야 합니다. 루틴과 서브루틴 루틴은 컴퓨터 프로그램에서 하나의 정리된 일(job)입니다. 프로그램은 보통 크고 작은 여러가지 루틴을 조합시킴으로써 만들어집니다. 루틴은 다시 메인루틴과 서브루틴으로 나뉩니다. 메인루틴은 프로그램 전체의 개괄적인 동작 절차를 표시하도록 만들어 집니다. 서브루틴은 반복되는 특정 기능을 모아 별도로 묶어 이름을 붙여 놓은 것입니다. 그리고 별도의 메모리에 해당 기능을 모아놓고 서브루틴이 호출될 때마다 저장된 메모리로 이동했다가 return 을 통해 원래 호출자의 위치로 돌아오게 됩니다...
[Kotlin] Scope 함수 (let, run, with, apply, also)
[Kotlin] Scope 함수 (let, run, with, apply, also)
2022.03.27Scope 함수 코틀린 표준 라이브러리는 객체의 컨텍스트 내에서 코드 블럭(익명 함수)을 실행하기 위한 목적을 가진 여러가지 함수를 제공합니다. 이런 함수들은 람다식으로 호출 할 수 있고, 이는 임시로 범위(scope)를 형성합니다. 해당 범위 내에서는 객체의 이름이 없어도 객체에 접근할 수 있습니다. 이러한 함수를 Scope funtions라고 합니다. 스코프 함수의 종류는 아래와 같습니다. let run with apply also 기본적으로, 이 함수들은 동일한 역할을 수행합니다. 다른점이 있다면, scope 내에서 객체를 어떤 방식으로 호출하는지, 리턴 값을 어떻게 처리하는지입니다. 아래는 Person class가 있을 때 scope function의 사용법입니다. Person.kt data cl..
서로 다른 도메인 간 통합 인증(SSO) 구현 방법
서로 다른 도메인 간 통합 인증(SSO) 구현 방법
2022.03.26서론 회사 프로젝트 중 SSO 프로젝트에 참여하게 되었습니다. 하지만 고민이 되는 지점이 있었습니다. 바로 서로 다른 도메인간 SSO(Single Sign On)을 구현해야 하는 점입니다. 기본적으로 서버는 브라우저에 저장되어 있는 쿠키 값으로 사용자가 로그인 상태인지 확인합니다. (물론 JWT를 사용한다면, 브라우저 WebStorage에 저장하여 사용자를 구별하는 방법도 있습니다.) 브라우저에서 쿠키가 저장되는 영역은 도메인으로 나뉘기 때문에 Cross domain간 어떻게 로그인을 유지할지 고민이 필요했습니다. 사용자 플로우상 요구 사항은 아래와 같습니다. 로그인 1. A.com 도메인에서 로그인을 수행한다. 2. 로그인을 수행하기 직전 엔드 포인트로 로그인이 완료된 상태로 돌아와진다. 2. B.co..
[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 열풍으로 코딩을 배우려는 사람들을 보며 박지웅 대표는 결론을 내린 듯하다. 콘텐츠의 양질의 차이로는 대중을 학습하게 만들 수 없다. 학습하려는 ..