본문 바로가기

verdantjuly/Today I Learned

TIL 20240127

728x90

이번 주 목표

A Tour of Go 이해하고 변형하기

오늘 목표

A Tour of Go 이해하고 변형하기

오늘 한 것

A Tour of Go 이해하고 변형하기 

오늘 스케줄

6:00 기상, 샤워, 아침 식사

7:00 산책

9:00 공부

12:00 점심 식사

13:00 ~ 16:00 자유

 

Devleveling

16:00 ~ 18:00 개발

18:00 ~ 19:00 저녁 식사 

19:00 ~ 23:00 개발

 

0-0. Nest.js - provider

 Controller 외에 Service, Repository, Factory, Helper 등의 Dependency를

Nest Core가 Register 할 수 있도록 등록하는 곳

 

@Injectable()

이런 Dependency들을 등록하기 위해서 사용하는 데코레이터

 

주요 아이디어 : 종속성으로 주입 될 수 있다는 것

 

객체가 서로 다양한 관계를 생성할 수 있으며

이러한 객체를 "연결"하는 기능이

주로 Nest 런타임 시스템에 위임될 수 있음을 의미

 

// cats.service.ts

import { Injectable } from '@nestjs/common';
import { Cat } from './interfaces/cat.interface';

@Injectable()
export class CatsService {
  private readonly cats: Cat[] = [];

  create(cat: Cat) {
    this.cats.push(cat);
  }

  findAll(): Cat[] {
    return this.cats;
  }
}
// cat.interface.ts

export interface Cat {
  name: string;
  age: number;
  breed: string;
}
// cats.controller.ts

import { Controller, Get, Post, Body } from '@nestjs/common';
import { CreateCatDto } from './dto/create-cat.dto';
import { CatsService } from './cats.service';
import { Cat } from './interfaces/cat.interface';

@Controller('cats')
export class CatsController {
  constructor(private catsService: CatsService) {}

  @Post()
  async create(@Body() createCatDto: CreateCatDto) {
    this.catsService.create(createCatDto);
  }

  @Get()
  async findAll(): Promise<Cat[]> {
    return this.catsService.findAll();
  }
}

 

참고자료 :
https://docs.nestjs.com/providers#custom-providers 
https://medium.com/crocusenergy/nestjs-providers-%EA%B0%9C%EB%85%90-%EB%B0%8F-%EC%8B%A4%EC%8A%B5-e811bccb809a

0-1. https

HTTP 프로토콜의 보안 버전

암호화 프로토콜을 사용하여 통신을 암호화

이전에는 SSL로 불렸으나 TLS로 불림

 

비대칭 공개 키 사용하여 통신을 보호

 

두 개의 서로 다른 키를 사용하여 통신을 암호화

 

개인 키 - 웹사이트 소유자가 관리, 비공개로 유지, 웹 서버에 있으며 공개키로 암호화된 정보를 해독하는 데 사용

 

공개 키 - 안전한 방식으로 서버와 상호 작용하고자 하는 모든 사람이 사용할 수 있다.
공개 키로 암호화된 정보는 개인 키로만 해독할 수 있다. 


HTTPS가 중요한 이유 : 패킷을 탈취하여도 무의미한 문자로만 인식이 된다. 

HTTPS에서 사용하는 포트 : 443

 

0-2. SSL 인증서

포함 정보

  • 인증서가 발급된 대상 도메인 이름
  • 발급받은 사람, 조직, 장치
  • 발급한 인증 기관
  • 인증 기관의 디지털 서명
  • 관련 하위 도메인
  • 인증서 발급 날짜
  • 인증서 만료 날짜
  • 공개 키(개인 키는 비밀로 유지됨)

SSL에 사용되는 공개 키와 개인 키는 기본적으로 데이터를 암호화하고 서명하는 데 사용되는 긴 문자열

 공개 키로 암호화된 데이터는 개인 키로만 해독할 수 있습니다.

 

인증서는 웹사이트의 원본 서버에서 호스팅되며, 웹사이트 로드를 요청하는 모든 장치로 전송됩니다.
대부분의 브라우저에서는 사용자가 SSL 인증서를 볼 수 있습니다.
Chrome의 경우 URL 표시줄 왼쪽에 있는 자물쇠 아이콘을 클릭하면 됩니다.

 

웹 사이트에서 SSL 인증서가 필요한 이유는?

 

웹 사이트에는 SSL 인증서가 있어야만 사용자 데이터를 안전하게 유지하고,

웹 사이트의 소유권을 확인하며,

공격자가 사이트의 가짜 버전을 만드는 것을 방지하고,

사용자의 신뢰를 얻을 수 있습니다.

 

참고 자료 : https://www.cloudflare.com/ko-kr/learning/ssl/what-is-an-ssl-certificate/

1. Go 에서 json 사용하는 방법

json을 명시해 주지 않으면 필드 이름이 대문자로 사용된다.

 

Struct tags such as json:"artist" specify what a field’s name should be when the struct’s contents are serialized into JSON. Without them, the JSON would use the struct’s capitalized field names – a style not as common in JSON.

참고 자료 : https://go.dev/doc/tutorial/web-service-gin

// album represents data about a record album.
type album struct {
    ID     string  `json:"id"`
    Title  string  `json:"title"`
    Artist string  `json:"artist"`
    Price  float64 `json:"price"`
}

2. Hello, 世界 를 Hello, Buddy로 변형

3. 출력되는 시간에 하루 뒤의 날짜 출력하기

time.Day는 없어서 time.Hour에 24를 곱했다.

	var today = time.Now()
	var tommorow = today.Add(time.Hour * 24)

4. math/rand 응용

100의 범위 추출하기 

5.  factored import 문

// 지양

import "fmt"
import "math"


// 지향
// factored import 문

import (
	"fmt"
	"math"
)

 

6. 첫 글자를 대문자로 쓴 것만 export 가능

대문자가 아닌 경우에는 패키지 바깥에서 접근이 안 됨

7. 변수 이름 뒤에 type

다른 언어와 달리 Go에서 뒤에 type을 지정하는 이유 : 가독성 > 코드 작성 효율 증가

참고 자료 : https://go.dev/blog/declaration-syntax

 

8. 같은 type의 매개변수를 사용할 때 타입 선언 한 번만 가능

func add(x, y int) int {
	return x + y
}

 

9. 한 함수는 몇 개의 결과든 반환 가능 (복수개의 결과)

10. naked return : 이름이 주어진 반환 값

return 문은 괄호 안에 정해진 값을 반환

 

! naked return문은 짧은 함수에서만 사용되어야 한다.

긴 함수에서는 가독성이 떨어지기 때문이다. 

 

11. var 변수에 대한 목록을 선언, 마지막은 type

var 변수명, 변수명, 변수명 타입

12. 변수 선언에서 초깃값이 존재한다면 타입 생략 가능


정리 

// 지양

import "fmt"
import "math"


// 지향
// factored import 문

import (
	"fmt"
	"math"
)

 

json을 명시해 주지 않으면 필드 이름이 대문자로 사용된다.

 

time.Day는 없어서 time.Hour에 24를 곱한다.

 

첫 글자를 대문자로 쓴 것만 export 가능

 

// 같은 type의 매개변수를 사용할 때 타입 선언 한 번만 가능

func add(x, y int) int {
	return x + y
}

 

 

var 변수명, 변수명, 변수명 타입

 

변수 선언에서 초깃값이 존재한다면 타입 생략 가능

 

한 함수는 몇 개의 결과든 반환 가능 (복수개의 결과)

 

naked return : 이름이 주어진 반환 값

return 문은 괄호 안에 정해진 값을 반환

! naked return문은 짧은 함수에서만 사용되어야 한다.

긴 함수에서는 가독성이 떨어지기 때문이다. 

 

KPT

Keep

원점으로 돌아가서 공부하려 하는 것

Problem

CS지식을 잘 모르는 것

Try

모르는 게 있으면 짚고 넘어가자

소감

https를 제대로 대답하지 못했을 때 정말 창피했다. 정신 차리고 뭐든 배우자. 

 

 

 

 

 

 

 

 

'verdantjuly > Today I Learned' 카테고리의 다른 글

TIL 20240129  (0) 2024.01.29
TIL 20240128  (0) 2024.01.28
TIL 20240125  (0) 2024.01.25
TIL 20240122  (0) 2024.01.23
TIL 20240118  (0) 2024.01.18