일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- OpenCV
- 카카오 알고리즘
- git
- Nodejs
- 파이썬
- AWS
- thymeleaf
- 카카오 코테
- @Component
- 구조체배열
- nestjs typeorm
- python
- 가상면접사례로배우는대규모시스템설계기초
- 해시
- 스프링
- 컴포넌트스캔
- TypeORM
- spring boot
- 프로그래머스
- Spring
- 코테
- C언어
- @Autowired
- 시스템호출
- nestjs auth
- 코딩테스트
- 알고리즘
- nestJS
- 카카오
- C++
- Today
- Total
목록전체 (333)
공부 기록장 💻
우아한테크코스 프리코스의 3주차 미션은 다음과 같다. 1) 클래스를 분리하고, 2) 도메인 로직에 대한 단위 테스트를 작성하는 연습을 하는 것 그리고 프로그래밍 요구 사항들을 세부적으로 살펴 보면, 핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 분리하여 구현해야 하며, 도메인 로직에 단위 테스트를 구현해야 한다고 명시되어 있다. 그래서 도메인 로직이 무엇일까? 도메인 로직(비즈니스 로직)에 대해 조사를 해보니, 이는 소프트웨어 설계 과정에서 프로그래밍을 할 때 차용하게 되는 패턴 중 하나로, 도메인이란, MVC 패턴에서 Model에 해당하는 것을 말한다. 우선적으로 MVC 패턴을 이해하며, 핵심 로직 부분과 UI를 담당하는 로직을 분리해 구현하여 프로그램을 설게하고, 도메인 로직에 대한 단위 테스트..
이전에 원티드 채용 플랫폼을 분석해보면서, 채용 사이트의 Database 모델링을 위한 준비 단계를 거쳐보았다. (https://dream-and-develop.tistory.com/263) 본격적으로 DB 모델링을 시작하기 전, 이전에 설계했던 모델링의 결함을 고쳐 수정해 보고, 이전부터 써보고 싶었던 typeorm-model-generator이라는 reverse engineer 도구를 사용해보고자 한다. 결함이 있었던 요구사항 분석 과정 이전에 채용 사이트의 간단한 API를 만드는 과제를 진행하였다. 데이터베이스 스키마를 설계한 후, NestJS 프레임워크에서 Entities 생성 후, TypeORM을 이용해 MySQL 데이터베이스에 객체 매핑을 진행하였다. 사용자가 채용 공고에 지원하는 API를 설..
우아한테크코스 프리코스 2주차 코수타를 참여하며 기억에 담아두고 싶은 내용들을 기록하고 정리해보자. 어쩜 현재의 나에게 꼭 필요한 조언들이 많았어서 의미있게 들을 수 있는 값진 시간이었다. 1,2주차를 진행하며 느껴 왔던 부분들을 다른 많은 지원자들도 비슷하게 느끼고 있었나 보다. 개발 경험이 많지 않은 사람 중 하나로, 미션들을 진행하며 겪는 어려운 난관들 속에서 또 한 많은 위로를 받을 수 있었던 코수타 시간이었다 :) 미션을 진행하며 자괴감이 든다면..? 공동의 목표를 달려가다 보면, 자괴감이 들 때가 많을 수 밖에 없다. 경쟁 환경에서 학습할 때에는 당연히 다른 사람들과 비교하게 되고, 그 속에서 자존감이 떨어지는 것은 당연한 일이다. 이럴 수록 본인의 속도대로 달려가는 것이 매우 중요하다. 다른..
2주 차 미션의 목표는 1. 기능별로 메서드를 분리하는 것 2. 각 메서드별로 테스트를 작성하는 것 이었다. 지난주는 IntelliJ 환경에서 Git을 통해 Commit Convention을 지켜가며, 작성한 기능 구현 목록에 따라 기능을 완성하고 commit을 진행하며 오랜만에 Java 언어에 익숙해지는 온보딩 과정의 1주차였다면, 이번주는 처음으로 테스트 도구를 통해 프로그램을 작성하며 동시에 작성한 메서드의 동작 방식과 입력에 대한 결과를 미리 예측하여 테스트 도구를 통해 완성도 있는 프로그램을 구현해 나가는 과정을 경험하는 2주차였다. TDD? 테스트가 무엇? 현업자분들의 개발 강의를 찾아 볼때마다, 자주 등장하는 용어 중 하나는 TDD 였다. TDD를 적극적으로 도입하여 개발하는 사람을 찾고 있..
우아한테크코스 프리코스 2주차 미션으로 각 기능의 작동을 테스트하는 코드를 작성하는 것이 프로그래밍 요구사항 중 하나로 추가되었다. JUnit 5 와 AssertJ를 이용하여 기능 목록이 정상 동작함을 테스트 코드로 확인하여야 한다. 따라서 테스트코드가 무엇인지 알아보고 이를 적용해보자. 우테코 프리코스 2주차 숫자 야구게임에서 제공된 학습용 테스트 코드 stduy 폴더에 간단한 테스트 코드가 추가되어 있는데, 이를 통해 테스트 코드가 어떤 역할을 하며, 어떤 방식으로 작성되어야 하는지 간단히 학습해보고 테스팅에 대한 자세한 내용은 따로 추가적으로 공부해보자. 우선 study 폴더 내 StringTest 클래스 파일을 보면 다음과 같이 org.junit.jupiter.api.Test와 org.assert..
책 "가상 면접 사례로 배우는 대규모 시스템 설계 기초" 2장 정리 학습 목표 구글의 Senior Fellow인 Jeff Dean에 따르면, "개략적인 규모 추정(back-of-the-envelope estimation)은 보편적으로 통용되는 성능 수치상에서 사고 실험(thought experiments)을 행하여 추정치를 계산하는 행위로서, 어떤 설계가 요구사항에 부합할 것인지 보기 위한 것"이다. 개략적 규모 추정을 효과적으로 해 내려면 규모 확장성을 표현하는 데 필요한 기본기에 능숙해야 한다. 2의 제곱수나 응답지연 값, 그리고 가용성에 관계된 수치들을 잘 이해하고 있어야 한다. 어떤 설계가 요구사항에 부합하는지 고민하기 위해, 시스템 용량이나 성능 요구사항을 개략적으로 추정해보자. 이를 위해 규모..
프리코스의 1주차 미션이 화요일 자정에 마감이 되고 2주차 미션이 시작되는 다음날 수요일 오후, 실시간으로 [코수타] (코치진과 수다하는 타임) 가 진행되었다. 1주차 미션에서는 총 7개의 문제가 출제되었는데, 이는 기존 프리코스 코테에서 4시간동안 풀어야 하는 일곱 문제가 출제된 것이고, 이번 프리코스에서는 7문제를 일주일간 해결하는 방식이었다. 모든 문제들은 어떠한 특정 알고리즘을 알아야 풀 수 있는 문제가 아닌 것들로 내기 위해 노력했다고 하셨고, 문제의 요구 사항이 명확하지 않은 것도, 빈틈이 있는 것도 제출자의 의도였다고 한다. 사실 문제들을 풀면서 고민을 많이 하긴 했지만, 슬랙 커뮤니티에서 활성화된 여러 토론의 장을 보았을 때 훨씬 더 많이 알고, 더 깊게 고민하고, 다양한 방식으로 접근하는..
Python for Data Analysis CH6. 데이터 로딩과 저장, 파일 형식 정리 이전 글(https://dream-and-develop.tistory.com/272) 에 이어 Python을 이용한 웹 문서 파싱, 이진 데이터 형식 다루기, 웹 API를 통한 스크래핑, SQLite3 DB 연결 후 데이터 저장하는 법에 대해 알아보자. 웹 데이터 다루기: HTML, XTML HTML 스크래핑 파이썬에서는 lxml, BeautifulSoup , html5lib 과 같은 HTML과 XML 형식의 웹 데이터를 읽고 쓸 수 있는 라이브러리가 많다. 그중에서도 lxml은 가장 빠르게 동작하고 깨진 HTML과 XML 파일도 잘 처리해줌 내장 함수 read_html() : lxml이나 BeautifulSoup..
책 "가상 면접 사례로 배우는 대규모 시스템 설계 기초" 1장 정리 학습 목표 한 명의 사용자를 지원하는 시스템에서 시작하여, 최종적으로 수백만 사용자를 지원하는 시스템을 설계해보자. 규모 확장성에 대한 이해를 높여 보자. 단일 서버 단일 서버 시스템이란, 모든 컴포넌트가 단 한 대의 서버에서 실행되는 간단한 시스템으로, 웹 앱, 데이터베이스, 캐시 등이 전부 서버 한 대에서 실행되는 구조를 말한다. 아래 예시를 참고하며, 사용자가 api.mysite.com 이라는 도메인 주소를 입력하여 사이트에 접근하고자 할 때 어떻게 웹 서버가 동작하는지 이해해보자. (즉, 사용자의 요청이 처리되는 흐름을 이해해보자.) 1. 사용자는 도메인 이름(api.mysite.com) 을 이용해 웹사이트에 접속한다. DNS(D..
책 : 가상 면접 사례로 배우는 대규모 시스템 설계 (System Design Interview) 지은이의 글 (요약 및 정리) - 이 책은, 시스템 디자인 면접 기법을 배울 수 있는 책이며 시스템 디자인 면접에 나오는 까다로운 기술 면접 문제들을 준비하는데 도움을 줄 수 있는 책이다. - 기술 면접 질문으로는 뉴스 피드, 구글 검색 시스템, 채팅 시스템을 비롯한 대규모 소프트웨어 시스템의 아키텍처 설계에 대한 질문을 받을 수 있게 되는데, 면접에서 확인하고자 하는 것은 소프트웨어 엔지니어로서 갖춰야 할 의사소통 및 문제 해결 능력이다. "소프트웨어 시스템 설계"라는 모호한 문제를 어떻게 분석하고 단계적으로 해결하는지를 살펴보기 위한 것이기도 하다. 면접 질문자는 지원자가 문제 해결 아이디어를 어떻게 설..
Python for Data Analysis CH 6. 데이터 로딩과 저장, 파일 형식 1. 텍스트 파일에서 데이터를 읽고 쓰는 법 pandas에서 표 형식의 텍스트 데이터를 DataFrame 객체로 읽어오는 몇 가지 기능 **옵션** 색인 : 반환하는 DataFrame에서 하나 이상의 컬럼을 색인으로 지정. 파일이나 사용자로부터 컬럼 이름을 받거나 아무것도 받지 않을 수 있다. 자료형 추론과 데이터 변환 : 사용자 정의 값 변환과 비어있는 값을 위한 사용자 리스트를 포함 날짜 분석 : 여러 컬럼에 걸쳐 있는 날짜와 시간 정보를 하나의 컬럼에 조합해서 결과 반영 반복: 여러 파일에 걸쳐 있는 자료를 반복적으로 읽어옴 정제되지 않은 데이터 처리: 로우나 꼬리말, 주석 건너뛰기 또는 천 단위마다 쉼표로 구분..
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 메서드로 실행한다. - 일반적으로, 어플리케이션 부트스트랩에서..
Python for Data Analysis CH5. Panadas 데이터 분석을 위한 파이썬 판다스 라이브러리 Pandas 자료구조 파이썬에서 쉽고 빠르게 데이터를 분석하고 다루기 위한 자료구조와 도구들을 포함함 기존 python 라이브러리와 가장 큰 차이는, for문을 사용하지 않고 데이터를 처리하거나 배열 기반의 함수를 제공하는 등 NumPy 배열 기반 계산 스타일을 많이 차용하여, 테이블 기반 및 이종의 데이터를 쉽게 다룰 수 있게 된다는 점 NumPy와 다른 점은, pandas는 표 형식의 데이터나 다양한 형태의 데이터를 다루는데 초점을 맞춰 설계했다는 점 (Numpy는 단일 산술 배열 데이터를 다루는데 특화되어 있음) 다른 산술 계산 도구인 Numpy 와 SciPy , 분석 라이브러리인 sta..
Python for Data Analysis CH4. Numpy 데이터 분석을 위한 파이썬 CH4. Numpy NumPy 배열이란? Numpy : Numerical Python, 파이썬에서 산술 계산을 위한 가장 중요한 필수 패키지 중 하나 특징 ndarray : 배열 중심의 빠른 산술 연산을 지원하는 다차원 배열, 브로드캐스팅 기능 지원 (행렬 연산) 반복되는 루프를 가지지 않고, 전체 배열에서의 빠른 연산을 지원 디스크에 배열 데이터를 읽고 쓰기 위한 도구와 메모리에 적재된 파일을 다루는 도구 지원 선형 대수, random number 생성, 푸리에 변환 등 고급 수학 연산 지원 C, C++ 로 작성된 라이브러리를 C API를 사용해 NumPy 와 연동 데이터 분석을 위한 NumPy 벡터 배열 상에서..
Python for Data Analysis (데이터 분석을 위한 파이썬) 3장. 내장 자료구조, 함수, 파일 정리 CH3. 내장 자료구조, 함수, 파일 자료구조와 순차 자료형 1. 튜플 1차원의 고정된 크기를 가지는 변경 불가능한 순차 자료형 tup = tuple(['foo', [1,2,], True]) tup[1].append(3) nested_tup = (1,2,3), (4,5,6) print(tuple('string')) # ('s', 't', 'r', 'i', 'n', 'g') print(tup[0]) # 인덱스로 접근 가능 튜플에서 값 분리하기 (대입 연산자 사용) tup = (4..
최근 원티드에서 취업/이직을 목적으로 하는 구직자들을 대상으로 주최한 프리온보딩 백엔드 코스에 참여하게 되었다. 지원하기 이전에, 사전 과제로 CRUD를 이용한 간단한 채용 시스템 API를 개발하였다. ( https://github.com/YebinLeee/recruitment-api-server ) 선발을 위한 가벼운 사전 과제였기 때문에 과제의 요구사항은 로그인, 회원가입을 비롯한 인증 부분을 생략해도 되었고, 많은 모델을 필요로 하지 않았으며(회사, 유저, 채용공고, 지원서 총 4개의 모델), DB 모델링이나 API 구현에 있어서 상세한 요구사항이 제시되지는 않았다. 따라서 과제를 진행하며 실제 채용 시스템의 프로세스를 이해하고 구현하는데 여러 아쉬움이 남았다. 목표와 이유: 왜 원티드 채용 플랫폼..
웹 상에서의 채팅 프로그램을 구현하는 프로젝트를 진행하기 전, 여러 문서들을 참고하여 웹 소켓의 개념을 정리하며 이해해보자. 이후에는 Node.js 서버 상의 웹소켓을 구현해보고자 한다. 웹 소켓(Web Socket)이란? 컴퓨터 네트워크용 통신 규약의 하나이다. 인터넷의 표준화 단체인 W3C(World Wide Web Consortium)과 IETF(Internet Engineering Task Forkce)가 Web server와 Web browser간의 통신을 위한 규정을 정의한 쌍방향통신(Duplex)용 기술 규약이다. API는 W3C가 책정을 맡고 있고, WebSocket 프로토콜은 IETF가 책정을 맡고 있다. 웹 소켓은 TCP 연결에 완전한 이중 통신 채널을 제공하는 컴퓨터 프로토콜이며, 서..
코딩테스트 연습 - [3차] 압축 압축 신입사원 어피치는 카카오톡으로 전송되는 메시지를 압축하여 전송 효율을 높이는 업무를 맡게 되었다. 메시지를 압축하더라도 전달되는 정보가 바뀌어서는 안 되므로, 압축 전의 정보를 완벽하게 복원 가능한 무손실 압축 알고리즘을 구현하기로 했다. 어피치는 여러 압축 알고리즘 중에서 성능이 좋고 구현이 간단한 LZW(Lempel–Ziv–Welch) 압축을 구현하기로 했다. LZW 압축은 1983년 발표된 알고리즘으로, 이미지 파일 포맷인 GIF 등 다양한 응용에서 사용되었다. LZW 압축은 다음 과정을 거친다. 길이가 1인 모든 단어를 포함하도록 사전을 초기화한다. 사전에서 현재 입력과 일치하는 가장 긴 문자열 w를 찾는다. w에 해당하는 사전의 색인 번호를 출력하고, 입력..