일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 가상면접사례로배우는대규모시스템설계기초
- 카카오
- @Component
- TypeORM
- git
- spring boot
- 프로그래머스
- Nodejs
- AWS
- 코딩테스트
- python
- 스프링
- @Autowired
- 시스템호출
- OpenCV
- 알고리즘
- nestjs typeorm
- thymeleaf
- 해시
- 코테
- Spring
- 카카오 알고리즘
- 구조체배열
- 파이썬
- nestjs auth
- C언어
- 카카오 코테
- C++
- 컴포넌트스캔
- nestJS
- Today
- Total
목록# Tech Studies (126)
공부 기록장 💻
우아한테크코스 프리코스 2주차 코수타를 참여하며 기억에 담아두고 싶은 내용들을 기록하고 정리해보자. 어쩜 현재의 나에게 꼭 필요한 조언들이 많았어서 의미있게 들을 수 있는 값진 시간이었다. 1,2주차를 진행하며 느껴 왔던 부분들을 다른 많은 지원자들도 비슷하게 느끼고 있었나 보다. 개발 경험이 많지 않은 사람 중 하나로, 미션들을 진행하며 겪는 어려운 난관들 속에서 또 한 많은 위로를 받을 수 있었던 코수타 시간이었다 :) 미션을 진행하며 자괴감이 든다면..? 공동의 목표를 달려가다 보면, 자괴감이 들 때가 많을 수 밖에 없다. 경쟁 환경에서 학습할 때에는 당연히 다른 사람들과 비교하게 되고, 그 속에서 자존감이 떨어지는 것은 당연한 일이다. 이럴 수록 본인의 속도대로 달려가는 것이 매우 중요하다. 다른..
2주 차 미션의 목표는 1. 기능별로 메서드를 분리하는 것 2. 각 메서드별로 테스트를 작성하는 것 이었다. 지난주는 IntelliJ 환경에서 Git을 통해 Commit Convention을 지켜가며, 작성한 기능 구현 목록에 따라 기능을 완성하고 commit을 진행하며 오랜만에 Java 언어에 익숙해지는 온보딩 과정의 1주차였다면, 이번주는 처음으로 테스트 도구를 통해 프로그램을 작성하며 동시에 작성한 메서드의 동작 방식과 입력에 대한 결과를 미리 예측하여 테스트 도구를 통해 완성도 있는 프로그램을 구현해 나가는 과정을 경험하는 2주차였다. TDD? 테스트가 무엇? 현업자분들의 개발 강의를 찾아 볼때마다, 자주 등장하는 용어 중 하나는 TDD 였다. TDD를 적극적으로 도입하여 개발하는 사람을 찾고 있..
책 "가상 면접 사례로 배우는 대규모 시스템 설계 기초" 2장 정리 학습 목표 구글의 Senior Fellow인 Jeff Dean에 따르면, "개략적인 규모 추정(back-of-the-envelope estimation)은 보편적으로 통용되는 성능 수치상에서 사고 실험(thought experiments)을 행하여 추정치를 계산하는 행위로서, 어떤 설계가 요구사항에 부합할 것인지 보기 위한 것"이다. 개략적 규모 추정을 효과적으로 해 내려면 규모 확장성을 표현하는 데 필요한 기본기에 능숙해야 한다. 2의 제곱수나 응답지연 값, 그리고 가용성에 관계된 수치들을 잘 이해하고 있어야 한다. 어떤 설계가 요구사항에 부합하는지 고민하기 위해, 시스템 용량이나 성능 요구사항을 개략적으로 추정해보자. 이를 위해 규모..
프리코스의 1주차 미션이 화요일 자정에 마감이 되고 2주차 미션이 시작되는 다음날 수요일 오후, 실시간으로 [코수타] (코치진과 수다하는 타임) 가 진행되었다. 1주차 미션에서는 총 7개의 문제가 출제되었는데, 이는 기존 프리코스 코테에서 4시간동안 풀어야 하는 일곱 문제가 출제된 것이고, 이번 프리코스에서는 7문제를 일주일간 해결하는 방식이었다. 모든 문제들은 어떠한 특정 알고리즘을 알아야 풀 수 있는 문제가 아닌 것들로 내기 위해 노력했다고 하셨고, 문제의 요구 사항이 명확하지 않은 것도, 빈틈이 있는 것도 제출자의 의도였다고 한다. 사실 문제들을 풀면서 고민을 많이 하긴 했지만, 슬랙 커뮤니티에서 활성화된 여러 토론의 장을 보았을 때 훨씬 더 많이 알고, 더 깊게 고민하고, 다양한 방식으로 접근하는..
책 "가상 면접 사례로 배우는 대규모 시스템 설계 기초" 1장 정리 학습 목표 한 명의 사용자를 지원하는 시스템에서 시작하여, 최종적으로 수백만 사용자를 지원하는 시스템을 설계해보자. 규모 확장성에 대한 이해를 높여 보자. 단일 서버 단일 서버 시스템이란, 모든 컴포넌트가 단 한 대의 서버에서 실행되는 간단한 시스템으로, 웹 앱, 데이터베이스, 캐시 등이 전부 서버 한 대에서 실행되는 구조를 말한다. 아래 예시를 참고하며, 사용자가 api.mysite.com 이라는 도메인 주소를 입력하여 사이트에 접근하고자 할 때 어떻게 웹 서버가 동작하는지 이해해보자. (즉, 사용자의 요청이 처리되는 흐름을 이해해보자.) 1. 사용자는 도메인 이름(api.mysite.com) 을 이용해 웹사이트에 접속한다. DNS(D..
책 : 가상 면접 사례로 배우는 대규모 시스템 설계 (System Design Interview) 지은이의 글 (요약 및 정리) - 이 책은, 시스템 디자인 면접 기법을 배울 수 있는 책이며 시스템 디자인 면접에 나오는 까다로운 기술 면접 문제들을 준비하는데 도움을 줄 수 있는 책이다. - 기술 면접 질문으로는 뉴스 피드, 구글 검색 시스템, 채팅 시스템을 비롯한 대규모 소프트웨어 시스템의 아키텍처 설계에 대한 질문을 받을 수 있게 되는데, 면접에서 확인하고자 하는 것은 소프트웨어 엔지니어로서 갖춰야 할 의사소통 및 문제 해결 능력이다. "소프트웨어 시스템 설계"라는 모호한 문제를 어떻게 분석하고 단계적으로 해결하는지를 살펴보기 위한 것이기도 하다. 면접 질문자는 지원자가 문제 해결 아이디어를 어떻게 설..
Java 백엔드 온보딩 미션 (https://github.com/woowacourse-precourse/java-onboarding) 참고 진행 방식 - 미션은 다음과 같이 3가지로 구성되어 있다. 기능 요구 사항 프로그래밍 요구 사항 과제 진행 요구 사항 - 위 3가지의 요구 사항을 만족하기 위해 노력해야 하며, 특히 기능을 구현하기 전에 기능 목록을 만들고, 기능 단위로 커밋 하는 방식으로 진행하라. - 기능 요구 사항에 기재되지 않은 내용은 스스로 판단하여 구현하라. 미션 제출 방법 - 미션 구현을 완료한 후 Github을 통해 제출해야 한다. (프리코스 과제 제출 문서를 참고) - Pull Request 완료 후, 지원 플랫폼에 과제를 최종 제출해야 한다. 과제 제출 전 체크 리스트 - 기능 구현..
- 공식문서 ( https://typeorm.io/select-query-builder) 를 정리하며, Query Builder을 이해해보자. QueryBuilder란?- TypeORM의 강력한 기능들 중 하나인데, 명쾌하고 편리한 구문을 이용해 SQL 쿼리들문을 작성하여, 자동적으로 실행하고 변형된 엔티티들을 자동적으로 얻을 수 있도록 하는 기능이다. 예를 들어보자면, SQL문으로 user의 id가 1번인 user의 id, firstName, lastName을 출력하는 SQL문은 다음과 같다.SELECT user.id as userId, user.firstName as userFirstName, user.lastName as userLastName FROM users user WHERE user.id ..
- 공식문서 ( https://typeorm.io/data-source) 를 정리하며, Data Source를 이해해보자 DataSource란? - 개발 환경 내에서 데이터베이스와 상호작용 하기 위해서는, Datasource를 먼저 설정해야 한다. TypeORM의 DataSource는 DB connection 설정을 유지하고, 사용하고 있는 RDBMS에 의지하여 connection pool 또는 초기 db 연결 상태를 초기 db connection을 구축한다. - 초기 connection 또는 connection pool을 구축하기 위해서는, DataSrouce 객체의 initialize 메서드를 호출해야 한다. - 연결 해제는 destroy 메서드로 실행한다. - 일반적으로, 어플리케이션 부트스트랩에서..
웹 상에서의 채팅 프로그램을 구현하는 프로젝트를 진행하기 전, 여러 문서들을 참고하여 웹 소켓의 개념을 정리하며 이해해보자. 이후에는 Node.js 서버 상의 웹소켓을 구현해보고자 한다. 웹 소켓(Web Socket)이란? 컴퓨터 네트워크용 통신 규약의 하나이다. 인터넷의 표준화 단체인 W3C(World Wide Web Consortium)과 IETF(Internet Engineering Task Forkce)가 Web server와 Web browser간의 통신을 위한 규정을 정의한 쌍방향통신(Duplex)용 기술 규약이다. API는 W3C가 책정을 맡고 있고, WebSocket 프로토콜은 IETF가 책정을 맡고 있다. 웹 소켓은 TCP 연결에 완전한 이중 통신 채널을 제공하는 컴퓨터 프로토콜이며, 서..
Branch strategy Branch Name 설명 main 초기 세팅 develop 로컬 develop merge 브랜치 개발자1-dev 개발자1 로컬 develop 브랜치 개발자2-dev 개발자2 로컬 devleop 브랜치 local-develop_feature/#issue 각자 기능 추가하는 브랜치 (#issue - 몇번째 PR인지) Git workflow local - feature에서 각자 기능 작업 작업 완료 후 local - develop에 PR 후 merge 이후 remote - develop으로 PR 서로의 코드 리뷰 후 Confirm 받고 Merge remote - develop에 Merge 될 때 마다 모든 팀원 remote - devleop pull 받 Branch 명령어 정리 ..
Github에 수정한 repository를 push하는 경우 다음과 같은 오류가 발생하는 경우가 있다. 파일의 끝에 개행문자('\n') EOF 가 포함되어 있지 않아 No newline at the end fof file 에러가 뜬 것이다. EOF 문제가 왜 발생하는가? 문제가 왜 발생하는지 찾아보니, 옛날 IEEE가 책정한 POSIX 규칙이기 때문이라고 한다. POSIX (Portable Operating System Interface) 란 UNIX 운영체제에 기반한 OS 인터페이스를 말하는데, 서로 다른 유닉스 OS의 API를 정리하여 이식성이 높은 유닉스 응용 프로그램을 가발하기 위한 목적으로 IEEE (Institute of Electrical and Electronics Engineers) 에서..
이전에 JWT에 대해 공부를 해보았다. NestJS 프레임워크 내에서 로그인 과정에서 JWT 토큰을 발급하고, JWT 토큰을 이용한 인증 기능을 구현해보도록 하자. 먼저 다음 명령어를 터미널에 입력하여 nestjs에서 제공하는 jwt 패키지를 설치하자. $ npm i --save @nestjs/jwt JWT 모듈 등록 auth.module.ts 에 다음과 같이 JwtModule 을 등록하자. imports 부분에 다음과 같이 추가를 해주도록 한다. secret 키를 SECRET 으로 지정해주고, signOptions로는 토큰 만료 시간을 300초로 지정해준다. import { JwtModule } from '@nestjs/jwt'; @Module({ imports: [ TypeOrmExModule.for..
이전 글에서 Nest JS 프레임워크 상에서 email(primary column)과 password(column) 두 필드를 이용해 user DTO를 생성하고, 회원가입 기능을 구현해 보았다. 이번에는 로그인 기능을 구현해보도록 하자. Auth Service auth.service.ts 에 다음과 같이 validateUser 함수를 추가로 작성하여 로그인하는 서비스를 등록하자. 먼저 userService의 findByFields 메소드가 email을 기준으로 데이터를 탐색하게 된다. 요청된 email과 동일한 email을 가진 데이터가 없거나, 탐색한 email을 가지느 유저의 password가 요청으로 들어온 password와 다른 경우 UnauthroizedException() 예외 처리를 하게 된..
아래는 https://typeorm.io/ 을 바탕으로, 공부하고 개발하는데 필요하다고 생각하는 일부분을 번역해보았다. TypeORM이란? TypeORM은 NodeJS, Browser, React Native, NativeScript 등의 플랫폼에서 실행되며, TypeScript와 JavaScript (ES5~ES8) 언어로 사용될 수 있는 ORM이다. ORM (Object-relational mapping) 이란, 객체지향 언어 (OOP) 의 객체 모델과 데이터베이스의 데이터 타입(테이블-칼럼)의 관계를 정의하고 매핑해주는 프로그래밍 기술을 의미한다. TypeORM의 목적은 최신 버전의 Javascript를 지원하며, 적은 개수의 테이블을 포함하는 작은 앱부터 다수의 데이터베으스들을 포함하는 대규모 기..
NodeJS 프레임워크인 NestJS에서 User Authentication 중 회원가입 기능 구현을 해보도록 하자. 우선 다음과 같이 nest를 위한 typeorm 모듈을 설치하도록 하자. $ npm i --save @nestjs/typeorm typeorm TypeORM에 대한 자세한 설명은 https://dream-and-develop.tistory.com/198 https://www.npmjs.com/package/@nestjs/typeorm (공식문서) 를 참고하자. 다음으로, auth 모듈, 컨트롤러, 서비스를 생성해준다. $ nest g module auth $ nest g controller auth $ nest g service auth User Entity 이후, auth 폴더 내에 e..
어떠한 사이트에 한 번 로그인을 하고 나면 사이트 내 여러 페이지들을 접속할 때 로그인이 유지되거나 혹은 ID, PW를 저장해두어 며칠 뒤 재 접속을 하더라도 다시 입력하지 않고 자동 로그인 되는 경우가 있다. 반대로 몇 분 정도 해당 사이트를 이용하지 않았는데 세션이 만료되었다는 페이지가 뜨며 로그인을 다시 해야하는 경우가 발생하기도 한다. 이는 사용자의 브라우저에 사용자의 정보를 저장하는 인증 방식인 세션, 쿠키의 개념과 관련이 되어 있다. 먼저 HTTP의 특성을 되짚어본 후에 세션과 쿠키가 무엇인지 살펴보자. HTTP의 특성 HTTP는 인터넷 상에서 데이터를 주고 받기 위한 서버-클라이언트 모델을 따르는 프로토콜이다. 클라이언트가 서버에게 요청(request)을 보내면 서버는 응답(response)..
보호되어 있는 글입니다.
** 목표: 세션 방식의 기존 인증 방법과 토큰 인증 방법의 차이를 이해하고, 토큰 인증 방법의 하나인 JWT의 개념과 동작 원리, 장점에 대해 공부한 후, NestJS 프레임워크에서 JWT 인증 기능을 구현해보자 ! JWT의 기본 개념 - JWT란, Json Web Token의 약자로, 모바일이나 웹의 사용자 인증을 위해 사용되는 전자 서명된 URL-safe (URL로 이용할 수 있으며 문자로만 구성된) 암호화된 토큰을 의미한다. - 정보를 json 형태로 주고받기 위해 표준 규약에 따라 생성한 암호화된 토큰으로, 복잡하고 읽기 어려운 string 형태로 저장되어 있다. - 일반적으로 클라이언트와 서버 사이에서 통신할 때 권한(인증)을 위해 사용하는 토큰이며, JWT 정보를 request에 담아 권한이..
XML의 정의 Extensible Markup Language W3C 권고 확장성 있는 마크업 언어 (W3C, World Wide Web Consortium - 회원기구, 정직원, 공공기관이 협력하여 웹 표준을 개발하는 국제 컨소시엄) W3C가 인간과 응용 프로그램 간, 혹은 응용 프로그램 간에 정보를 쉽게 교환하기 위해 만든 데이터 교환 포맷 XML과 HTML의 차이 XML은 data를 전달하는데에 포커스를 맞춘 언어 HTML은 data를 표현하는데 포커스를 맞춘 언어 XML은 HTML과 달리 tag가 미리 정의되어 있지 않음 XML 언어의 특징 표준성: W3C에서 표준화를 주도하여, SGML과 HTML 의 한계를 극복하기 위해 만든 표준 인터넷 언어 (SGML, Standard Generalized ..