반응형

프로그래밍 135

[TypeScript] Type + JavaScript - (2) Interface

1. 타입 호환성 (Type Compatibility, Type Equivalence)  타입 호환성은 프로그래밍 언어론(Programming Language Theory)에서 언급되는 내용으로 어떤 맥락에서 타입 A를 가진 객체가 타입 B와 동등한지(취급해도 되는지)를 판단하는 것이다. 만약 A타입을 가진 객체를 B로 취급해도 된다면 A를 B로 할당 가능하다고 하며, 타입 A는 타입 B의 서브타입이라고 한다. 그리고 프로그래밍 언어마다 이러한 타입 호환성의 정의 범위는 다르다.  예컨데 C#이나 자바 등의 언어에서 '사람'이라는 클래스를 확장한 '학생'이라는 클래스가 있을 경우 '학생'클래스는 '사람' 클래스로 취급할 수 있으며 '학생'클래스는 '사람'클래스의 서브타입이다. 하지만 '강아지'라는 클래스..

[TypeScript] Type + JavaScript - (1) 기본 타입

1. 기본 타입 자바스크립트의 원시 타입을 대부분 지원하며 추가적으로 Enum(열거)타입과 기타 여러 유용한 타입을 지원한다. 다만 원시값을 래핑하는 Boolean, Number, String 내장 객체타입도 지원하지만 매우 드물게 사용되므로 웬만해선 소문자로 시작하는 원시 타입을 사용하자. boolean(불리언)true/false값const a : boolean = false;const b : boolean = 1;// Error : Type 'number' is not assignable to type 'boolean'.ts(2322) number(숫자)JavaScript와 같이 TypeScript에서도 모든 숫자는 부동 소수점 값이다. 모든 부동 소수에는 number라는 타입이 붙여진다. TypeS..

[Redis] 인메모리 데이터베이스 Redis - (1) Introduction

1. What is Redis?  Redis(REmote DIctionary Server)는 캐시 서버로 가장 많이 사용되는 key-value기반 인메모리 데이터베이스다. 프로세스에 할당된 메모리에 데이터를 올려놓고 사용하므로 하드디스크와 같은 대용량 저장장치를 사용하는 RDBMS 같은 타 데이터베이스에 비해 굉장히 빠른 속도가 장점이다. 하지만 대용량 저장장치에 비하면 용량이 매우 작으므로 메인 데이터베이스로 사용하기에는 한계가 있다.  또한 메모리는 volatile한 특성(휘발성)을 가지고 있으므로 프로세스가 종료되면 데이터가 유실될 수 있다. 그래서 Redis는 이러한 단점을 AOF, RDB라는 두가지 백업 방식을 이용해 커버한다. Redis의 백업 방식에 대한 자세한 내용은 뒤에 다시 언급하려고 ..

[nginx] (2) nginx.conf

1. nginx의 구조  nginx는 C언어로 개발되었다. 그리고 nginx는 일반적으로 Linux나 Unix계열 OS에 얹어서 사용한다. Win32에서도 사용할 수 있다고 하지만, select()만 사용할 수 있어서 성능적으로 매우 비효율적이며, 앞으로의 확장성도 기대하기 어렵다고 한다.  OS에 따라 다른 설치법을 제공하니 공식문서를 확인하자.  설치를 하고 나면 구성 파일이 기본적으로 세팅되어 있으므로 nginx명령어를 통해 바로 실행시킬 수 있다. sudo nginx  다음과 같이 실행하면 nginx는 구성파일인 nginx.conf를 읽고 구동을 시작한다. 이때 nginx.conf에 없는 필수 정보들은 기본값으로 세팅한다. 실행 후 ps -ef명령어를 통해 프로세스 목록을 확인하면 다음과 같다. ..

[nginx] (1) nginx 그리고 기본 역할

1. What is nginx? nginx(발음: engine-x)는 경량 웹 서버로 이고르 시쇼브(이하 이고르)가 직장에서 사용하던 웹서버인 Apache HTTPd의 문제점을 해결하기 위해 2004년 처음 개발했다. 이 문제는 C10K Problem라는 별명으로 알려져 있는데, 10,000개의 클라이언트의 동시 연결을 단일 서버에서 처리할 시 하드웨어의 성능이 충분함에도 불구하고 당시 Apache HTTPd의 작동 방식으로 인해 성능이 저하되는 문제였다. 물론 C10K라는 이름은 Apache HTTPd에만 한정된 용어가 아니고, 그 시절 세계에서 가장 큰 서버가 처리하는 한계가 1만명 정도였기 때문에 이러한 이름이 붙었다.  상황을 간략하게 설명하면, 초기 Apache HTTPd는 클라이언트로부터 요청..

[Java DB] 2-2. MyBatis - 실제 사용하기 (활용편)

1. Spring-MyBatis  앞선 글에서는 MyBatis를 이해하기 위해 jar파일로 임포트해서 사용하는 기초적인 방법을 사용했지만 실제 프로젝트에서는 대부분 스프링 부트에 얹어서 함께 사용한다. 스프링부트에서는 Mybatis starter를 지원한다. https://start.spring.io 나 IDE에서 스프링부트 프로젝트를 만들 수 있다.  MyBatis가 스프링을 만나면 훨씬 더 강력해진다. 우선 첫번째. DB와 상호작용이 필요할 때 SqlSessionFactory로부터 SqlSession을 만드는 과정을 스프링이 대신해준다. 두번째. SqlSession에서 매핑된 SQL 쿼리를 가져와서 자바 인터페이스로 활용하는 과정도 스프링이 대신해준다. 즉, 자바 인터페이스가 스프링 빈으로 등록되어 ..

[Java DB] 2-1. MyBatis - SQL 쿼리를 재사용하자 (개념편)

1. What is MyBatis  이전 글에서 자바와 DB가 상호작용할 수 있는 밑거름인 JDBC에 대해 알아보았다. JDBC는 DB와 가장 단순하게 연결하는 원시적인 방법이기 때문에 속도적인 측면에서 유리하나 (1) DB 접근이 필요한 코드마다 비슷한 SQL문을 반복해서 적어야 한다는 큰 단점이 존재한다. 또한 (2) SQL문이 자바 코드 안에 포함되기 때문에 유지 보수적인 측면에서도 불리하다. 쉽게 말해 휴먼 에러가 발생할 가능성이 높다. 추가적으로 (3) JDBC에서 SELECT문의 결과는 ResultSet으로 리턴되며 우리가 원하는 객체로 사용하기 위해서는 한번 더 처리가 필요하다는 불편함도 있다.    MyBatis는 이러한 단점들을 커버할 수 있는 강력한 SQL Mapper 라이브러리다. M..

[Java DB] 1. JDBC - Java와 DB 상호작용의 기초

0. 들어가기 전에.. - 웹 어플리케이션 요청 응답 프로세스  자바를 베이스로 한 웹 어플리케이션을 포함한 모든 언어의 웹 어플리케이션의 대략적인 구조는 다음과 같다. 먼저 유저가 웹사이트에 접근해 정보를 요청하면 웹 서버에 탑재된 WAS(Web Application Server)는 응답을 주는데, 이 때 해당 요청이 DB 데이터를 필요로 하거나 데이터를 저장해야 한다면 DB에 접근한다.  자바에 한정해 좀 더 구체화해보자. 예를 들어 Web Application은 Spring, WAS은 Tomcat, DB는 MySQL을 사용한다고 가정해보자.   (1) Tomcat이 열려있는 웹서버 포트에 유저의 요청이 도착하면 (2) Tomcat은 HttpServletRequest와 HttpServletRespon..

[4] 백준 플래티넘 달성

2024년 04월 23일 (화요일) 백준 솔브드 기준 플래티넘 티어를 달성했다. 사실 달성 자체는 4월 2일에 했지만 블로그에 일기도 오랫동안 안 쓴 겸 올려본다. 싸피에 입과해서 약 4개월 정도 지났다. 자바 스프링으로 언어를 바꿔서 다시 도전하면서 알고리즘 문제도 꾸준히 풀었다. 그동안 ADsP도 따고, 정처기 필기도 합격하면서 플래티넘 말고도 다른 성과도 얻었다. 현재는 정처기 실기를 준비하고 있다. 얼마 남지 않았으니 더 열심히 해야지

[Data Structure] NonLinear - (3) Graph - 기본 개념

그래프(Graph) 그래프는 어떤 개념들 간의 연결관계를 표현하기 위해 사용하는 자료구조다. '개념들 간의 연결관계'라는 말이 모호하기 때문에 그 관계의 예를 몇 가지 들면, 사람과 사람 간의 관계, 도시와 도시와 연결된 도로들의 관계, 네트워크에서 A컴퓨터, B컴퓨터, C컴퓨터, ... 들 간의 관계 등이다. 즉, 그래프 자료구조에서 주로 포커싱되는 대상은 관계이며, 현실세계나 추상적인 개념의 문제들을 그래프 구조로 맵핑시키고 난 뒤에는 그 관계들을 이용해 다양한 알고리즘을 적용해 문제들을 해결할 수 있다. 1) 기본 개념 자료구조로서 그래프는, 위의 설명에서 개념에 대응하는 정점(Vertex; 노드(Node) - 컴퓨터 과학에서는 주로 노드를 씀)과 관계에 대응되는 간선(Edge)으로 이루어진다. 개..

반응형