본문 바로가기

전체 글

(138)
Laravel Dependency Injection Container - 1 라라벨의 제어의 역전(Inversion of Control), 의존성 주입(Dependency Injection) 컨테이너에 대해 작성한다. 컨테이너 접근 라라벨의 컨테이너 인스턴스에 접근하는 방법 $container = app(); 라라벨의 공식 문서는 $this->app을 사용한다. 외부에서 Illuminate\Container 사용 1. https://packagist.org/packages/illuminate/container 설치 2. 아래와 같이 사용 use Illuminate\Container\Container; $container = Container::getInstance(); 기본 사용법 의존성 주입을 원하는 클래스에 생성자에 타입 힌트 사용 class MyClass { /** * @v..
TypeScript 정적 타이핑 1. 타입 선언 TypeScript는 아래와 같이 변수명 뒤에 타입을 명시하는 것으로 타입을 선언할 수 있다. // 변수 hello는 string 타입이다. let hello: string = 'hello'; 선언한 타입에 맞지 않는 값을 할당하면 컴파일 시점에 에러가 발생한다. let num1: number = true; // error TS2322: Type 'true' is not assignable to type 'number'. 타입 선언은 개발자가 코드를 예측할 수 있도록 돕는다. 타입 선언은 강력한 타입 체크를 가능하게 하여 문법 에러나 타입과 일치하지 않는 값의 할당 등 기본적인 오류를 런타임 이전에 검출한다. 함수의 매개변수와 반환값에 대한 타입 선언 방법은 아래와 같다. 일반 변수와 마..
TypeScript 환경구축 TypeScript 또한 자바스크립트 대체 언어의 하나로써 자바스크립트(ES5)의 Superset(상위확장)이다. C#의 창시자인 덴마크 출신 소프트웨어 엔지니어 Anders Hejlsberg(아네르스 하일스베르)가 개발을 주도한 TypeScript는 Microsoft에서 2012년 발표한 오픈소스로, 정적 타이핑을 지원하며 ES6(ECMAScript 2015)의 클래스, 모듈 등과 ES7의 Decorator 등을 지원한다. TypeScript는 ES5의 Superset이므로 기존의 자바스크립트(ES5) 문법을 그대로 사용할 수 있다. 또한, ES6의 새로운 기능들을 사용하기 위해 Babel과 같은 별도 트랜스파일러(Transpiler)를 사용하지 않아도 ES6의 새로운 기능을 기존의 자바스크립트 엔진(..
Laravel 6 Auth Login 기존 DB Table 을 활용하여 로그인 기능 구현 1. login 오버라이드 public function login(Request $request) { $id = $request->id; $pwd = md5($request->pwd); // 기존 데이터 md5 // Laravel Auth attempt if(Auth::attempt(['id' => $id, 'pwd' => $pwd])) { // add login passed process return "로그인 성공"; } else { // add login failed process return "로그인 실패"; } } 2. Eloquent Model 구현
SOLID - 개방 폐쇄 원칙 (Open-Closed Principle) 개방 폐쇄 원칙 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계가 되어야 한다. 주문내역이나 주문정보에 제품의 정보를 출력하는 기능을 생각해보자. 다음 그림은 New Feature 클래스에서 이 기능을 사용하는 경우를 모델링한 것이다. 만약 주문내역이나 주문정보가 아닌 다른 곳에 제품의 정보를 출력하는 기능의 개발이 필요한 경우 New Feature 클래스가 해당 매체의 기능을 이용하도록 구성할 수 있으나 이 방식은 OCP를 위반한다. OCP를 위반하지 않은 설계를 하기 위해서는 변해야 할 것은 쉽게 변할 수 있게 하고, 변하지 말아야 할 것은 변하는 것에 영향을 받지 않도록 해야 한다. OCP를 만족하기 위해서는 New Feature 클래스가 개별 기능을 처리하도록 하지 않고 인터페이스를..
ORM(Object Relational Mapping) ORM(Object Relational Mapping) 에 대해 작성한다. ORM이란 객체와 관계형 데이터베이스의 데이터를 자동으로 연결해주는 것을 말한다. 오브젝트Relational Database 객체지향 프로그래밍은 클래스를 사용하고 관계형 데이터베이스는 테이블을 사용하기 때문에 객체 모델과 관계형 모델 간에 불일치와 이질성이 존재한다. ORM을 이용하여 객체의 형태로 데이터베이스에 SQL을 자동으로 생성하여 객체를 삽입하고 수정 등이 가능하다. ORM에서 말하는 객체의 의미는 OOP의 객체를 의미한다. 관계는 관계형 데이터베이스를 의미한다. 객체를 통해 간접적으로 데이터베이스 데이터를 다룬다. Persistant API라고도 할 수 있다.(JPA, Hibernate) ORM을 사용하면 객체 지향적..
세마포어(Semaphore), 뮤텍스(Mutex) 세마포어와 뮤텍스에 대해 작성한다. 여러 쓰레드들은 자원을 공유하고 프로세스간 메시지를 전송하면서 간혹 문제가 발생하기도 한다. 공유된 자원에 여러 프로세스, 쓰레드가 동시에 접근하면서 문제가 발생한다. 공유된 자원 속 하나의 데이터는 한번에 하나의 프로세스만 접근할 수 있도록 제한해두어야 할 필요가 있다. (접근제어) 이를 위해 고안된 것이 세마포어(Semaphore) 이다. 세마포어(Semaphore) 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 막는 것을 의미한다. 세마포어는 리소스의 상태를 나타내는 간단한 카운터이며 일반적으로 비교적 긴 사용시간을 확보하고자 하는 리소스에 대해 이용하게 된다. 유닉스 시스템의 프로그래밍에서 세마포어는 운영체제의 리소스를 경쟁적으로 사용하는 다중 프로세스의..
Deployment Generation Traditional Deployment (전통적인 배포 시대) : 초기 조직은 애플리케이션을 물리 서버에서 실행했었는데 한 물리서버에서 여러 애플리케이션의 리소스 한계를 정의할 방법이 없었기에 리소스 할당의 문제가 발생했다. 예를 들어 물리 서버 하나에서 여러 애플리케이션을 실행한다면 리소스 전부를 차지하는 애플리케이션 인스턴스가 있을 수 있고 결과적으로 다른 애플리케이션의 성능이 저하될 수 있었다. 이에 대한 해결책으로 서로 다른 여러 물리 서버에서 각 애플리케이션을 실행하는 방법이 있으나 이는 리소스가 충분히 활용되지 않는다는 점에서 확장 가능하지 않기에 물리 서버를 유지하기 위한 많은 비용이 들었다. Virtualized Deployment (가상화된 배포 시대) : 전통적인 배포 시대의 문제점에..

반응형