본문 바로가기

분류 전체보기

(177)
[기술면접 스터디] [230222] DI와 DB 인덱스 Q1. DI(Dependency Injection)에 대한 설명과 해당 기술의 장점에 대해 설명해주세요. DI는 의존관계를 외부에서 결정하고 주입하는 것을 의미합니다. 예를 들어, 쉐프의 버거 레시피를 쉐프가 직접 선택하고 의존하는 것이 아닌, 버거 가게 사장이 결정하고 주입하는 것을 의미합니다. DI를 이용해 의존 관계를 분리하고 주입을 받는 방법의 구현은 여러가지 장점을 갖습니다. 먼저 DI로 구현했을때, 의존성이 줄어듭니다. 주입받는 대상이 변하더라도 클래스의 구현 자체를 수정할 일이 없거나 줄어듭니다. 둘째로 재사용성이 높은 코드가 됩니다. 쉐프 클래스 안에서만 사용하던 버거 레시피를 별도로 구분하여 구현하면, 다른 클래스에서 재사용할 수 있습니다. 셋째로 테스트하기 좋은 코드가 됩니다. 버거 레..
[230221] 배열과 집합 연습문제 (1장 자료구조가 중요한 까닭) 1. 원소 100개를 포함하는 배열이 있을 때, 다음 연산에 걸리는 단계 수를 계산하기 읽기 : 1단계, O(1), 메모리 주소를 가지고 한번에 찾음 배열에 들어 있지 않은 값 검색 : 100단계, O(n), 없는 값을 임을 확인해야 하므로, 인덱스 0부터 99까지 모두 탐색 배열 맨 앞에 삽입 : 101단계, O(n), 100개의 원소를 모두 한칸씩 밀고, 인덱스 0에 삽입 배열 맨 뒤에 삽입 : 1단계, O(1), 인덱스 100에 삽입 배열 맨 앞에서 삭제 : 100단계, O(n), 인덱스 0을 삭제하고, 남은 99개 원소를 모두 한칸씩 이동 배열 맨 뒤에서 삭제 : 1단계, O(1), 인덱스 99 원소를 삭제 2. 원소 100개를 포함하는 배열 기반 집합이 있을 때, 다음 연산에 걸리는 단계 수를 ..
[기술면접 스터디][230221] OOP와 REST API Q1. 객체지향 프로그래밍(OOP)에 대해 설명해주세요. 알고있는 원칙이나 키워드를 언급해주세요 객체지향 프로그래밍은 프로그램의 상호 작용을 객체 집합으로 표현하며, 객체 내부에 선언된 메서드를 활용하는 프로그래밍 방식을 말합니다. 다른 프로그래밍 패러다임에 비해 처리 속도가 느리고, 설계에 많은 시간이 소요됩니다. 객체지향 프로그래밍의 특징으로는 추상화, 캡슐화, 상속성, 다형성이 있습니다. 또, 설계 원칙으로는 단일책임원칙, 개방-폐쇄 원칙, 리스코프 치환 원칙, 인터페이스 분리 원칙, 의존 역전 원칙의 SOLID 원칙이 있습니다. OOP는 객체들의 집합으로 프로그램의 상호 작용을 표현하며 데이터를 객체로 취급하여 객체 내부에 선언된 메서드를 활용하는 방식 설계에 많은 시간이 소요 처리 속도가 다른 ..
[14주차] [230215] 인텔리픽 모의 면접 후기 오늘은 실전 프로젝트가 끝나고 주말동안 작성한 이력서를 토대로 모의 면접을 진행했다. 사실, 실전 프로젝트가 끝나고 마음이 많이 상해서 뭘 하지 못했다. 이력서 공개 피드백을 받은 다른 사람들의 이력서에는 프로젝트 개선 사항에 대해 화려하게 적혀 있었는데, 나는 6주동안 남들보다 잠도 못자며 시간을 말 그대로 갈아 넣어서 프로젝트를 겨우 완성시켰는데, 개선사항으로 적을 게 하나도 없어서... 너무 허무했다. 그래서, 한 3일을 침대에 파묻혀 지낸 것 같다. 어쨌든.. 그래도 주말에 신청했던 모의 면접 시간이 기어이 다가왔고, 준비를 하나도 하지 않았으니 당연히 기술 질문에 답을 할 수 없었다. 우선 모의 면접 질문은 항해에서 준비해준 50문항 템플릿을 그대로 따라 진행해 주셨다. 준비를 하지 않았던 터라..
[9주차] [WIL] 2023.1.6 ~ 1.12 실전프로젝트 2주차 회고 깃허브 projectd에서 전체 개발 프로세스 이슈 만들기를 했다. 이슈를 늘어놓고 보니, 스케쥴 가늠해보기와 일의 우선순위 정하기가 수월해졌다. 한 주동안, nestjs에서 typeorm을 사용하여 레포지토리르 주입하는 방식을 사용할 수 있도록 작업을 진행했다. 이 과정에서 게임 방을 생성하고, 입장하고 퇴장하는 과정에 필요한 데이터를 설계하였다. socket 코드를 gateway에서 service 레이어를 사용하여 레포지토리에 접근할 수 있도록 리팩토링 작업을 진행했다. 익숙한 express가 아니고, 타입을 맞춰서 작업해야 하기때문에 개발 속도가 무지하게 느려졌다. 그렇지만, express에 비해 좀 더 구조적이고, 코드를 쓰면서 에러를 확인할 수 있다는 장점이 있다. 좀 더 분발해서 개발 속도를 ..
[8주차] [20220103] nest.js 맛보기 실전 프로젝트에서 typescript를 사용하기로 했기때문에, 우리는 오늘 nest.js를 사용해보고 결정하기로 했다. 마침, 노마드 코더에 nest.js REST API 만들기 강의가 무료로 열려 있어서 각자 강의를 통해 간단히 nest.js의 맛을 보고 모여서 프론트와 백이 함께 간단한 CRUD 미니 프로젝트를 진행했다. AWS EC2로 서버를 열었는데, pm2를 이용해 nest start 명령어를 사용할 수 없었다. 인터넷을 찾아보니, package.json scripts에 정의 되어 있는 명령어 중 start:prod를 사용하면 되었다. pm2 "npm start:prod" start:prod는 start dist/main.js로 정의 되어 있다. 따라서, dist 폴더에 main.js가 이미 최..
[8주차] [20230102] 실전 프로젝트 적용 기술 스택 조사 오늘은 프로젝트 진행에 있고 백과 프론트에서 공통으로 사용할 기술 스택에 대해 조사를 진행했다. 우리는 socket 통신을 기반으로 실시간 비디오 / 채팅이 가능한 게임을 구현하기로 했기 때문에, 통신에 필요한 기술을 검색하고 어떤 것이 우리 프로젝트에 어울릴 지에 대해 논의했다. TCP 통신 Node.js 내장 모듈인 http vs https 모듈 비교 The difference between HTTP and HTTPS is if you need to communicate with the servers over SSL, encrypting the communication using a certificate, you should use HTTPS, otherwise you should use HTTP. ..
[WIL 7주차] 2022.12.23 ~ 2022.12.29 회고 (feat. 노션 클론코딩 완료 후기) 7주차에는 1주일간 클론 코딩을 진행했다. 우리 팀에서는 socket.io를 이용해 노션을 클론코딩 하기로 했다. 페이지 내에 접속하는 모든 유저가 공동으로 문서를 실시간 편집하도록 해야 했기 때문에, 우리는 UDP통신을 가능하게 해주는 socket.io 라이브러리를 사용하게 되었다. 사실, 백엔드에서는 통신에 필요한 코드가 전혀 어렵지 않았다. 실시간 문서 공동 편집을 위한 대부분의 기술적 처리는 프론트에서 이루어졌고, 백엔드에서는 랜던 닉네임, queue 자료구조를 이용한 페이지 저장 등의 비즈니스 로직을 구현하는데 힘을 쏟았다. 이 프로젝트를 하면서 가장 좋았던 점은, 내가 해보고 싶었던 기술을 사용해 보았다는 것, 그리고 redis라는 새로운 in memory cache db를 다뤄보았다는 점이다..