파이썬 알고리즘 : 삼각 달팽이

2023년 10월 13일 알고리즘 문제풀이 문제 1 삼각달팽이 문제 링크 1차 시도 나의 생각 처음에는 각 삼각형의 높이마다 배열을 만들어주고 해당 높이에 append로 추가해주면 되겠다 생각했다. 하지만 정답을 출력할 때 순서대로 출력해야하다보니 각 배열 안에서의 순서가 지켜지지 않게 되는 것을 깨달았다. 따라서 각 행의 길이를 직접 정해주었다. i번째 행은 길이가 i가 되도록 배열을 만들었다. 삼각형 한 바퀴를 도는 것을 기준으로 함수를 만들었다. 함수의 인수 cnt는 넣을 숫자, l은 이번에 돌 삼각형의 한 변의 길이, idx는 출발이 몇번째 행인지를 나타내고, depth는 함수가 실행된 횟수이자 지금 도는 삼각형이 내부에서 얼마나 깊이 있는지를 의미한다. ...

2023년 10월 13일 · 2 분 · 배준수

JWT와 코드 분석

코드는 공개하지 않았습니다! JWT 정의 JSON Web Token의 약자로, 정보를 JSON 개체로 안전하게 전송하기 위한 간결하고 독립적인 방법을 정의한 개방형 표준이다. 상대적으로 크기가 작은 덕분에 URL, POST, 혹은 HTTP 헤더로 빠르게 전송될 수 있다. JWT는 Authorization(권한 허가)에 주로 사용되어, 로그인한 사용자는 이후 Request의 header에 JWT를 포함시켜 보냄으로서 루트, 서비스, 리소스에 대한 접근이 허용된다. 물론 주로 쓰이는 방법일 뿐, JWT가 반드시 Single-Sign-On을 위해 만들어진 기술은 아니다. 등장 배경 기존 authorization은 XML을 기반으로한 SAML(Security Assertion Markup Language) 형식을 이용하였다. 하지만 너무 크고(verbose) 느리다는 단점이 있었다. 따라서 크기가 작아 가볍고 전송이 빠른 JWT를 사용하게 되었다. ...

2023년 10월 12일 · 4 분 · 배준수

MysQL에서 정렬

책너두 6기 28일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.287 ~ p.298 내용정리 09 옵티마이저와 힌트 9.2.2 병럴 처리 병렬 처리는 하나의 쿼리를 여러 스레드가 작업을 나누어 동시에 처리하는 것을 의미한다. innodb_parallel_read_threads라는 시스템 변수로 스레드 갯수를 설정할 수 있다. where 조건 없이 단순히 테이블의 전체 건수를 가져오는 쿼리만 병렬로 처리할 수있다. CPU 갯수를 넘어서면 오히려 성능이 떨어질 수 있다. 9.2.3 ORDER BY 처리(Using filesort) 인덱스 이용 장점 : insert, update, delete 쿼리가 실행될 때 이미 인덱스가 정렬돼 있어서 빠르다 단점 : insert, update, delete 작업 시 부가적인 인덱스 추가/삭제 작업이 필요해 느리다. 디스크 공간이 더 필요하다. FIlesort 이용 ...

2023년 10월 12일 · 2 분 · 배준수

파이썬 알고리즘 : 주차 요금 계산

2023년 10월 12일 알고리즘 문제풀이 문제 1 주차 요금 계산 문제 링크 1차 시도 나의 생각 차를 배열에 넣고 관리하려고 했는데, 그러기 위해선 index를 알고 있어야 했다. 그렇지 않으면 매번 차량 번호로 검색을 해야해서 너무 비효율적인 알고리즘이 될 것 같았다. 나는 생각을 바꿔서 차량 번호는 4자리 숫자기 때문에 1만개 짜리 배열을 만들어서 차량 번호를 index로 해주었다. 각 값은 길이가 2인 배열이였는데 입차 시간과 총 주차 시간을 넣어주었다. 총 주차 시간은 해당 차량이 여러번 나오고 들어올 수 있기 떄문에 설정했다. ...

2023년 10월 12일 · 2 분 · 배준수

NestJS에 대하여

Devcamp 1일차 NestJS Nest는 테스트가 수월하고 확장성이 좋으며 유지보수가 편리한 Node.js 프레임워크 중 하나이다. Typescript Nest는 Typescript를 지원하는 것이 가장 큰 특징이다. 따라서 Interface를 사용할 수 있으며 Static/strong typing을 지원하기 때문에 type에 관해서, 혹은 property나 이름 오류도 코드 작성 단계에서 감지된다. 서버를 매번 실행하는 번거로움 없이 오타나 Type 설정, 디버깅을 할 수 있다는 것은 개발에 들어가는 시간과 노력을 줄여주는 큰 장점이다. 성질 객체지향 프로그래밍, 자료 처리를 수학적 함수의 계산으로 취급하는 FP(Functional Programming), 그리고 비동기적 데이터 흐름의 요소를 갖추고 있다. 기본적으로 Express hTTP 프레임워크를 사용하지만, Fastify를 포함하여 다양한 Node HTTP 프레임워크도 사용할 수 있고, Express에서 지원되는 것들은 Nest에서도 사용할 수 있어서 사용이 편리하다. ...

2023년 10월 11일 · 8 분 · 배준수

옵티마이저

책너두 6기 27일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.277 ~ p.286 내용정리 08 인덱스 8.9 유니크 인덱스 유니크는 인덱스라기보다는 제약 조건에 가깝다고 볼 수 있다. 테이블이나 인덱스에 같은 값이 2개 이상 저장될 수 없다는 의미이다. MySQL에서는 인덱스 없이 유니크 제약만 설정할 방법이 없다. NULL은 특정 값이 아니므로 2개 이상 저장될 수 있다. 8.9.1 유니크 인덱스와 일반 세컨더리 인덱스의 비교 유니크 인덱스와 유니크하지 않은 일반 세컨더리 인덱스는 사실 인덱스의 구조상 아무 차이가 없다 ...

2023년 10월 11일 · 3 분 · 배준수

파이썬 알고리즘 : 프로세스

2023년 10월 11일 알고리즘 문제풀이 문제 1 프로세스 문제 링크 1차 시도 나의 생각 프로세스가 담긴 배열에서 첫번째가 우리가 알고싶은 프로세스 인지 아닌지, 또 가장 높은 우선순위를 지녀 실행될 차례인지, 아닌지로 구분하였다. location은 현재 우리가 알고싶은 프로세스의 index이고, answer는 몇번째로 실행되었는지를 의미한다. 알고 싶은 프로세스 관심 없는 프로세스 최우선순위 answer 출력 popleft() 한다. 실행되었기 떄문에 answer 1 증가 차우선순위 popleft()하여 맨 뒤로 보낸다. location도 맨 뒤로 설정한다. popleft()후 맨 뒤로 보낸다. locaion 1 감소 결과 정답 ...

2023년 10월 11일 · 1 분 · 배준수

App Configuration

Testing Dotenv 터미널에서 npm install @nestjs/config dotenv 는 .env 파일과 일반적인 환경 변수파일을 참조하여 개체를 생성(겹칠시 환경변수 파일 우선)한다. .env 파일은 배포에 포함되선 안된다. (git 에선 gitignore로 commit되지 않도록 해야) 우리는 개발용(배포용) .env 파일과 테스트용 .env 파일 두 개를 만들것이다. root 디렉토리에 .env.tset 와 .env.development 파일 두개를 만들자. 1 2 // .env.development DB_NAME=db.sqlite 1 2 // .env.test DB_NAME=test.sqlite AppModule에 아래와 같이 설정해준다. ...

2023년 10월 10일 · 4 분 · 배준수

Association

Report 다루기 Report는 자동차를 판 사람이 자기가 판매한 가격과 정보를 보고하는 것. 이것을 바탕으로 자신의 중고차 가치를 추정받는 시스템의 정확도를 높일 수 있다. 리포트 Entity 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 // reports.entity.ts import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class Report { @PrimaryGeneratedColumn() id: number; @Column() price: number; @Column() make: string; @Column() model: string; @Column() year: number; @Column() // 판매지역 나타내는 경도 lng: number; @Column() // 판매지역 나타내는 위도 lat: number; @Column() mileage: number; } DTO 생성 컨트롤러를 수정하자 ...

2023년 10월 10일 · 7 분 · 배준수

end to end testing

Testing End to End test 유닛 테스트보다 넓은 범위를 테스트 전체 서비스의 복사본이나 인스턴스 생성 package.json 의 script를 보면 "test:e2e"가 있음. src 폴더 내의 파일 실행 X 서버를 끄고 터미널에서 npm run test:e2e를 입력해보자. 새로운 E2E 테스트 만들기 test 폴더에 auth.e2e-spec.ts 파일을 만들고 app.e2e-spec.ts의 내용을 복사 붙여넣자. 이 후 조금의 수정을 가한다. 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 // auth.e2e-spec.ts import { Test, TestingModule } from '@nestjs/testing'; import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from './../src/app.module'; describe('Authentication System', () => { let app: INestApplication; beforeEach(async () => { const moduleFixture: TestingModule = await Test.createTestingModule({ imports: [AppModule], }).compile(); app = moduleFixture.createNestApplication(); await app.init(); }); it('handles a signup request', () => { // 알아보기 쉬운 주석 return request(app.getHttpServer()) .post('/auth/signup') // signup 경로 .send({ email: 'asgkege@akl.com', password: 'qownstn' }) // 무작위 body .expect(201) .then((res) => { // response id, email로 올 것 const { id, email } = res.body; expect(id).toBeDefined(); expect(email).toEqual(email); }); }); }); 터미널에서 npm run test:e2e를 실행하면 문제가 발생한다. 이유를 알아보자. ...

2023년 10월 10일 · 3 분 · 배준수