두 달 전에 본 팀원 모집글입니다. 이 글을 본 이후의 두 달 동안의 경험을 기록, 공유하고자 글을 씁니다. 저는 Spring 프로젝트를 로컬에서 작업한 경험만 있었습니다. 배포 및 운영, 그리고 그 이후는 한 번도 해본 적이 없어서 프로젝트에 참여하고 싶었고 멘토님께 DM을 드렸습니다. 그리고 당연히 반려당했습니다. node.js를 1도 몰라서 자격조건 1번부터 걸렸기 때문에.. 그래서 처음에는 해당 서비스를 Spring으로 클론코딩하는 팀으로 시작해서, 상용 준비중인 Visitor 팀에 합류했고, 또 새로운 프로젝트를 시작해 참여했습니다. 이렇게 멘토님 아래에서 다수 팀이 운영되고 있었고 매주 주간회의에서 각 팀의 작업에 대한 피드백이 진행되었습니다. 돌이켜보면 두 달 동안 배운 지점은 크게 세 부분..
VPC (Virtual Private Cloud) 독립된 가상의 클라우드 네트워크 서브넷 VPC 네트워크는 여러개로 분리될 수 있음. 서브넷 = VPC 내의 부분적인 네트워크 IGW (인터넷 게이트웨이) VPC와 외부 인터넷 사이에서 통신할 수 있게 해줌 라우터 각기 독립된 네트워크를 연결시켜주는 장비. 네트워크 간 데이터 전송을 위한 경로설정 및 통신 VPC 내의 각각의 서브넷은 서로 다른 네트워크를 갖고 있기 때문에, 서브넷 간 통신을 위해서 라우팅 필요 라우팅 테이블 목적지와, 목적지로 가려면 어디로 가야 하는지 정의한 규칙 테이블 VPC 내부의 네트워크 범위에 대한 요청은 로컬에서 가능하다. VPC 내부 통신을 위한 로컬 라우팅 규칙은 라우팅 목적지 라우팅 타겟 VPC의 IPv4 local pub..
URL Shortener란? URL Shortener(단축 URL)은 길이가 긴 URL을 짧은 형태로 줄여서, 유저가 짧은 링크를 누르면 원본 URL로 리다이렉트되는 서비스다. SMS을 전송하거나 SNS을 이용할 때 글자 수 제한에 걸리지 않고, 링크 공유가 쉽다는 장점이 있다. 중복 허용 vs 비허용 단축 URL을 설계할 때 제일 먼저 결정해야 했던 문제가 "동일한 원본 URL에 대해 동일한 단축 URL을 제공할 것인지"였다. 원본 URL의 중복을 허용하는 대표적인 서비스는 bit.ly 에서 비로그인 시 제공하는 서비스다. 아래 그림처럼 동일한 URL을 여러 번 입력할 때마다 다른 단축 URL을 제공한다. 반면에 bit.ly에서 로그인을 한 유저는 하나의 URL에 대해 하나의 단축 URL만 가질 수 있..
시작하며 node.js로 개발되어 있는 42서울 체크인 시스템을 spring으로 클론코딩하는 과제를 진행하게 되었다. 멘토님은 DB(Database) 설계부터 배포까지 한 사이클을 모두 경험하는 게 중요하다고 하셨다. 첫 과제는 DB 스키마 설계였다. 직접 체크인 시스템이 어떻게 돌아가는지 파악해서 DB를 설계한 후, 피드백받았던 과정을 남긴다. 현재 42서울 체크인 시스템 42서울의 각 클러스터(개포, 서초)의 입장 인원 수를 파악하기 위해 개발된 서비스 - 42OAuth를 통한 로그인 - 실물카드를 받아 카드번호를 입력해서 체크인 - 해당 클러스터 아이피로만 체크인 가능 (외부에서 조작 불가) - 이미 사용중인 카드로는 체크인 불가능 - 체크아웃 후 실물카드 제출 - 개포, 서초 클러스터 인원수 각각..
체크인 사이트에서 로그인을 할 때 42 인트라 아이디와 비밀번호를 사용한다. 제일 처음에는 접속하려는 아이디가 인트라에 등록된 아이디인지 판단해야 한다. 비밀번호가 일치해야 한다. 라는 요구사항을 만족하려면 1. 42 API에서 회원정보를 전부 받아와서 내 db에 저장을 해서 로그인 요청마다 db에서 find를 한다. 라고 생각을 했었다. 그래서 user 테이블을 따로 만들어 ID, PW 등을 저장하는 방식으로 그림을 그렸다. 하지만 그 후, 2. 비밀번호는 나한테 없는데 어떻게 확인을 하지 ...? 2번에서 막혀서 생각이 진전되지 않아 실제 체크인사이트에서 로그인이 실행되는 과정을 살펴보았다. 인트라에 접속하지 않았을 경우 체크인사이트에서 로그인 페이지로 넘어가고, 인트라에 접속이 되어 있는 경우 로그..
출처 C++의 멤버함수 중 클래스 안에서 직접 선언하지 않으면 컴파일러가 자동으로 선언해주는 함수들 : 기본형 생성자 / 복사생성자 / 복사대입연산자 /소멸자 Class Empty{}; //위와 아래는 서로 같다 Class Empty { public: Empty() {} // 생성자 Empty(const Empty& ) {} // 복사생성자 ~Empty() {} // 소멸자 Empty& operator=(const Empty&) {} // 복사대입연산자 } 생성자 Empty() {} 출처 멤버 변수의 초기화 메모리에 생성된 객체는 모든 멤버 변수를 초기화하기 전에는 사용할 수 없다. 특히 객체의 멤버 중 private 멤버에는 직접 접근할 수 없기 때문에 일반적인 초기화 방식으로 초기화가 불가능하다. 따..
참조자(Reference) 할당된 하나의 메모리 공간에 다른 이름을 붙이는 것, 자신이 참조하는 변수를 대신할 수 있는 또 하나의 이름 (=별명) 포인터와의 차이 - 이미 선언되어 있는 변수에 대해서만 참조자 선언이 가능 = 참조자 선언과 동시에 누군가를 참조해야 한다. = NULL값이 없다 - 한번 지정한 객체를 변경할 수 없다. int main(void) { string str = "hello world"; string* ptr = &str; string& ref = str; // str = *ptr = ref } 위처럼 변수와 참조자를 동시에 선언하여 사용하는 상황보다는, 참조자가 함수에 활용되는 경우가 많다. 함수에 인수를 전달하는 3가지 방법 출처 값으로 전달 = 기본 자료형의 값을 전달할 때 ..
메모리의 구조 출처 프로그램이 실행되면 운영체제가 메모리(RAM)에 공간을 할당한다. 프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간엔 4가지가 있다. 1. 코드(code) 영역 함수, 제어문, 상수 등이 저장된다. 우리가 작성한 소스코드가 들어가는 부분. 텍스트영역이라고도 부른다. 2. 데이터(data) 영역 전역변수와 static 변수가 저장된다. 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다. 3. 스택(stack) 영역 지역 변수와 매개변수가 저장된다. 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다. 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다. 컴파일 시에 크기가 결정된다. 4. 힙(heap) 영역 사용자가 직접 관리하는 영역. 사용자에 의해 메모..