4주간의 기업 인턴쉽을 통해 배우고 얻게 된 내용들을 스프린트 별로 나누어 정리해보았다. 그리고 해당 기업에서 사용하는 언어와 스킬들이 선택된 이유에 대해 언어의 특징들을 살펴보며 생각해보았다.
Sprint1 : TypeScript & PostgreSQL
👉 TypeScript
- TypeScript는 2012년에 발표된 오픈 소스 프로그래밍 언어로, 대규모 JavaScript 애플리케이션 개발을 목적으로 Microsoft에 의해 개발
- TypeScript는 웹브라우저에서 바로 해석될 수 없고 JavaScript로 변환되어야 웹 브라우저가 해석할 수 있다 → TS를 transpiler라고 부르고 이러한 언어를 Meta Language라고 부른다
- 장점
- 정적 타입을 지원 → 컴파일 단계에서 오류를 포착할 수 있다 → 코드의 가독성을 높이고 디버깅을 용이하게 한다.
- ES6 / ES NEXT 지원 - 호환성을 위해 babel을 사용할 필요없고 ES6/ES NEXT문법을 사용해도 tsconfig.js에 지정된 자바스크립트 버전으로 자동으로 변환해주기 때문에 최신 JS기능들을 호환 걱정없이 사용할 수 있다.
- 객체지향 프로그래밍 지원 - ES NEXT부터 class,interface, abstract class등 객체지향언어의 문법들이 추가 되었다.
- 강력한 생태계 - 대부분의 라이브러리들이 ts를 지원하며 각종 에디터가 다양한 플러그인을 지원한다
- 단점
- 상대적으로 낮은 가독성과 코드 작성에 많은 시간 소요 - 하나하나 타입을 모두 설정해주어야하므로 시간이 오래걸리고 코드가 길어지면서 가독성도 떨어지게된다.
- 컴파일 언어 - TS는 JS로 컴파일 되는 언어이므로 브라우저나 대중적으로 사용되는 런타임에서는 바로 사용할 수 없다
- 복잡한 초기 설정 - tsconfig.json파일을 통해 여러가지 설정을 해야한다.
Why TypeScript?
- 해당 기업은 다른 서비스들에 비해 특히 클라이언트 각각의 input에 따른 output을 나타내기에 그만큼 error를 발생시킬 경우의 수도 많다. 하지만 타입스크립트를 사용함으로 컴파일 과정에서 에러를 확인할 수 있게되어 개발단계에서 인지하지 못한 실수나 예상밖에 상황으로부터 오는 에러들 또한 미연에 방지할 수 있게 된다. 따라서 기업은 사용자가 겪는 불편을 줄이고 프로그램의 높은 안정성을 가져올 수 있을 것이다.
👉 PostgreSQL
- 오픈소스로 무료로 사용 가능 → 비용 절감
- ORDMBS(개체 관계형 데이터베이스) → 개체 및 테이블 상속을 등을 정의할 수 있음
- 빠르고 유연한 개발 → 강력한 오픈소스 커뮤니티로 인해 발전 속도가 빠르다
- 다양한 데이터 유형을 지원한다 → 숫자, 문자열, 날짜와 시간 타입 이외에 기하학적인 도형, 네트워크 주소, JSON 항목등
- 복잡한 대량의 데이터 작업을 수행하는데 적합, 단순히 읽기 전용 작업이 아닌 복잡한 읽기-쓰기 작업을 수행하는데 적합, OLTP / OLAP에 적합
- OLTP (Online Transaction Processing)
- 네트워크 상의 온라인 사용자들의 Database에 대한 일괄 트랜잭션 처리를 의미
- Transaction 의 과정에서 INSERT/UPDATE 를 중점적으로 수행
- OLAP (Online Analytical Processing)
- 시스템과 연관되어 Data 를 분석하고 의미있는 정보로 치환하거나, 복잡한 모델링을 가능하게끔 하는 분석 방법
- SELECT Query 를 통한 데이터 스캔 Operation)
- OLTP (Online Transaction Processing)
용어정리
💡 정적타입언어( TypeScript, Java, C++)
- 자바스크립트(동적타입언어)의 모든 기능을 포함하면서 정적타입을 지원
- 정적 타입 언어(JS,Python,PHP)는 변수의 타입이 컴파일 타임에 결정된다!(동적 타입 언어는 런타임에 결정된다)
Why PostgreSQL?
- 해당 기업에서는 이메일과 웹페이지를 만들어주는 mobile builder의 역할 뿐만 아니라 관리자들에게 그 데이터들을 분석하여 각각의 서비스들에 대한 통계 또한 제공해야한다. 또한 이 기업의 서비스는 Online Transaction Processing(OLTP)이 매우 중요하기에 PostgreSQL을 사용함으로 그 이점을 사용할 수 있을 것이다.(무엇보다도 오픈소스이기에 무료로 사용가능하다는 점이 아주 매력적!)
Sprint2 : DB정리 & 전체 조회 API
👉 DB 정리
problem
- 데이터와 테이블이 많고 정리된 내용이 없어서 어떤 데이터를 어떤 테이블로부터 가져다 써야하는지 알 수 없었다
- DB안에 테이블과 데이터가 정리없이 여러명에 의해 만들어져있다보니 비슷한 이름의 테이블과 컬럼들이 아주 많았다
solve
- 새로운 계정을 만들어 플랜과 여러정보들을 변경해보며 상황에 따라 어떤 데이터들이 어떻게 바뀌는지 일일이 확인하며 문서화를 통해 DB정리를 하였다
👉 전체 조회 API
- 전체 회원에 대한 데이터를 보여주는 API 작성
Problem
- 날짜를 저장하는 데이터에 우리가 아는 형식이 아닌 유닉스시간으로 저장되어있었다.(유닉스 숫자로된 시간이란 것을 처음에는 알지 못했다)
Solve
- 유닉스시간을(문자형으로 지정되 날짜 데이터)를 날짜형 데이터로 변환해준다 → 변환된 날짜형 데이터를 문자형으로 바꿔준다(사용자가 지정한 형식으로)
- TO_CHAR() : 날짜형 또는 숫자형 데이터를 문자형으로 변환한다.
- TO_TIMESTAMP(timestamp, format) : 문자형 데이터 값(문자형으로 지정된 날짜 데이터)을 사용자가 지정한 TIMESTAMP(시간 표기) 데이터형을 따르는 타입 값으로 변환한다.
TO_CHAR(TO_TIMESTAMP(created_at / 1000), 'YYYY-MM-DD HH24:MI')
Sprint3 : 상세 페이지 API
- 정리된 DB를 바탕으로 API를 작성
- 전체 user에 대한 정보를 보내주는 API & 선택된 user에 관련 상세한 정보를 보내주는 API
👉 상세 페이지 API
Problem
- 주 서비스가 email 과 webpage로 나뉘어져있음. 기본적으로 무료제공되는 양이 있지만 더 많은 양을 사용하기 위해서는 요금을 선결제해야한다. 한번 결제를 하면 한달주기로 자동갱신이 되기에 다음달에 결제될 예정 금액이 DB에 저장되는데, 이때 서비스별로 (email, webpage) 구분되지않고 하나에 테이블에 같이 저장이 되게 되어있어서 데이터를 보내줄때 따로 구분해서 어떻게 보내줘야할지 감이 잡히지 않았다.
Solve
→ Email, Webpage를 각각 따로 나눠서 email관련된 정보를 하나의 객체에 담고 webpage정보도 다른객체에 따로 담아서 보내기로 했음
💡 지금 생각해보니 sub-query를 사용했다면 두개를 만들지 않고 하나의 query문으로도 해결할 수 있었을 것 같다
'프로젝트' 카테고리의 다른 글
[인턴쉽] 회고 - 협업 (0) | 2023.02.27 |
---|---|
[2차 프로젝트] 회고 - 4L (0) | 2023.02.27 |
[2차 프로젝트]회고 - 기능 (0) | 2023.02.27 |
[2차 프로젝트]회고 - 협업 (0) | 2023.02.27 |
[1차 프로젝트] 회고 - KPT (0) | 2023.02.27 |