두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.
function solution(n, m) {
let arr = [];
// 유클리드 호제법을 통해 최대공약수를 구하는 함수
function gcd (n, m) {
if (m === 0) return n;
return gcd(m, n % m);
}
// 두 수의 곱을 최대공약수로 나누면, 최소공배수를 구할 수 있음
function lcm (n, m) {
return (n * m) / gcd (n, m)
}
// 배열에 추가
arr.push(gcd (n, m));
arr.push(lcm (n, m));
// 배열 리턴
return arr;
}
유클리드 호제법 (gcd 함수):
- 큰 수를 작은 수로 나누고, 나머지를 반복적으로 계산하여 GCD를 찾는 효율적인 알고리즘
1. 두수를 A % B 이렇게 나눠서 나머지(R1) 가 생겼다.
2. 이번에는 B % R1 을 나눠버린다. 그럼 또 나머지(R2) 가 생겼다.
3. 요번에는 R1 % R2 을 나눠버린다. 그럼 또 나머지(R3) 이 생겼다.
4. 여번에는 R2 % R3 을 나눠버렸다. 근데 이번에는 나머지가 0 이다. (즉, 없다.)
그럼 두수 A 와 B 의 최대공약수는 (나머지가 멸종되기전) 마지막 나머지였던 R3 이 된다.
출처: https://devbirdfeet.tistory.com/257 [새발개발자:티스토리]
최대공약수를 이미 구한 상태에서 두 수의 곱을 최대공약수로 나누면 최소공배수를 구할 수 있다.
Nest.js에서 데이터베이스 연동 > TypeORM 사용
ORM(Object-Relational Mapping)이란?
ORM(Object-Relational Mapping)은 객체 지향 프로그래밍(Object-Oriented Programming, OOP) 언어와 관계형 데이터베이스(Relational Database) 간의 데이터 매핑(Data Mapping)을 자동화해주는 기술입니다.
프로그래밍 언어에서 사용하는 객체와 데이터베이스의 테이블 간의 변환을 중개해주는 도구나 프레임워크를 의미합니다.
TypeORM: TypeScript에서 사용하는 ORM(Object-Relational Mapping)으로, 데이터베이스와 쉽게 연결해주는 도구
Node.js에서는 .env를 많이 사용 >. Nest.js에서는 @nestjs/config 사용
엔티티: DB의 특정 테이블을 대표하는 객체, ORM에서 사용
특징:
엔티티는 데이터베이스 테이블의 각 행(row)을 객체로 표현합니다.
엔티티의 속성(property)은 테이블의 컬럼(column)과 매핑됩니다.
ex) User라는 엔티티는 데이터베이스의 users 테이블을 나타내며, name, email 등의 속성을 가질 수 있습니다.
리포지토리 : 엔티티와 DB간 중간계층을 형성하는 객체
프로그래머가 DB와의 통신과정을 직접 알지 못하더라도,
리포지토리의 함수를 사용해 DB에서 원하는 결과를 얻을 수 있다
import { IsNumber, IsString } from 'class-validator';
import {
Column,
CreateDateColumn,
DeleteDateColumn,
Entity,
PrimaryGeneratedColumn,
UpdateDateColumn,
} from 'typeorm';
// @Entity: 클래스가 posts 테이블에 매핑됨을 나타냄
@Entity({
name: 'posts',
})
export class Post {
// @PrimaryGeneratedColumn: 기본 키(PK) 컬럼을 정의
@PrimaryGeneratedColumn()
id: number;
@IsString()
// @Column: 일반 컬럼을 정의
@Column('varchar', { length: 50, nullable: false })
title: string;
@IsString()
@Column('varchar', { length: 1000, nullable: false })
content: string;
@IsNumber()
// select: false로 설정하여 일반 조회에서 비밀번호가 노출 X
@Column('int', { select: false, nullable: false })
password: number;
// 레코드 생성 날짜 자동 기록
@CreateDateColumn()
createdAt: Date;
// 레코드 수정 날짜 자동 기록
@UpdateDateColumn()
updatedAt: Date;
// 레코드 삭제 날짜 자동 기록
@DeleteDateColumn()
deletedAt?: Date;
}
레코드 : DB에서 특정 테이블의 한 행
게시판 프로젝트 인섬티아 테스트 전 유의사항
1.env 파일 구성
DB_HOST="여러분들이 사용하는 데이터베이스 주소"
DB_PORT=3306
DB_USERNAME="데이터베이스 계정"
DB_PASSWORD="데이터베이스 암호"
DB_NAME="board"
DB_SYNC=true
2. GET을 제외한 나머지 API에는 Headers에 Content-Type: application/json을 삽입
3. 서버 실행 전 db에 미리 board 데이터 베이스 생성
mysql> create database board;
4. npm run start로 서버 실행 후 테스트 완
Nest.js에서의 인증
'TIL' 카테고리의 다른 글
내일배움캠프 13주차 금요일 TIL (0) | 2025.01.24 |
---|---|
내일배움캠프 13주차 목요일 TIL (0) | 2025.01.23 |
내일배움캠프 12주차 금요일 TIL (0) | 2025.01.17 |
내일배움캠프 12주차 목요일 TIL (0) | 2025.01.16 |
내일배움캠프 12주차 수요일 TIL (0) | 2025.01.15 |