SW Academy

[CNU SW Academy] 27일차(23.01.06)

narlo 2023. 1. 6. 17:30

양희철교수님 - 데이터분석

K-nearest neighbor classification

새로운 데이터와 가장 가까운 K개만 보고, 클래스를 결정하는 방법

K 값에 따라 분류 결과가 달라질 수 있다.

 

Clustering

데이터는 존재하지만 데이터의 label이나 category가 주어지지 않은 경우 clustering을 통해 데이터를 설명할 수 있다.

K-means clustering

=> w를 학습한다.

 

Gaussian mixture clustering

데이터가 k개의 Gaussian으로 구성되어 있다고 할 때, 가장 데이터를 잘 설명하는 k개의 평균과 cov를 찾는 알고리즘

 

Nerual network

신경망

 

Activation function

 

MLP(Multilayer Perceptron)

input - hidden - output

 

output의 activation function은 조금 다르다.

2개의 클래스를 분류하는 문제 => sigmoid

여러 개의 클래스를 분류하는 문제 => softmax

regression 문제 => linear한출력을 내보내도록 지정

 

Loss function

Regression에서는 MSE를 최소화하는 방향으로

분류 문제에서는 cross entropy를 최소화하는 방향으로


프로그래머스 - 프론트엔드 미니 데브코스

React

JSX의 반복문 map

props

 

UseRef

- DOM에 직접 접근할 때 사용한다.

- 지역변수로 사용할 때 사용한다.

(useState는 값이 변경될 때 다시 렌더링한다. useRef는 값이 변경되더라도 다시 렌더링 하지 않는다.)

 

페이지네이션

컴포넌트 스타일

- 상태에 따라 스타일이 바뀐다면 inline style을 이용하는 것이 좋다.

 

emotion 라이브러리 추천

https://emotion.sh/docs/introduction

 

Emotion – Introduction

(Edit code to see changes)

emotion.sh

css style을 javascript를 이용해 만들수 있는 

create-react-app에서는 babelrc를 만들어도 적용이 안되는 문제

/** @jsxImportSource @emotion/react */

를 작성하여 해결할 수 있다.

프래그마 - 컴파일러에게 이 파일을 어떻게 처리할지 알려주는 것

매번 작성하기 귀찮음 => 자동으로 처리되도록 설정 가능

 

npm add -D @craco/craco

설정을 override하여 사용할 수 있다.

craco : creact-react-app-config-override

 

css 적용 방법

1. 

2. 

emotion을 이용하여 따로 css를 만들지 않고도 클래스를 적용할 수 있다.

=> 컴포넌트 내에서 모든 것을 관리하면 되니 좀 더 개발자 친화적이다.

 

3. 

 

useMemo : 최적화를 위해 필요한 hook

함수 컴포넌트는 특별해보이지만 사실 jsx를 반환하는 함수에 불과

컴포넌트가 렌더링된다는 것은 누군가가 이 함수 컴포넌트를 호출해서 실행된다는 것을 의미

따라서 이 함수가 실행될 때마다 내부에 선언되어있던 변수, 함수 등이 매번 다시 선언되거나 다시 실행된다.

 

1. 함수 컴포넌트는 자신의 상태가 변경될 때 리렌더링된다.

2. 부모 컴포넌트로부터 받는 props가 변경될 때 리렌더링된다.

3. 부모 컴포넌트의 상태가 변경되면 리렌더링된다.

연산의 속도가 느린 컴포넌트라면? => 다시 연산되지 않게 하도록 위해 useMemo를 사용

 

성능이 오래 걸리는 작업을 하게 되는 경우

=> useMemo를 사용


하석재강사님 - VLDB 6강

트랜잭션(원자성)

- All or Nothing

 

락(Lock) : 여러 트랜잭션이 공유자원에 동시에 접근을 시도할 때

- global lock

  - 특정한 명령이 수행되면 다른 모든 명령어가 수행이 정지되는 형태의 락

- table lock

  - 특정 트랜잭션이 해당 테이블을 수행하고 있으면 다른 트랜잭션은 해당 테이블을 접근하지 못함

  - 다른 테이블은 접근 허용

- record lock

  - 특정 트랜잭션이 해당 레코드를 수행하고 있으면 다른 트랜잭션은 해당 레코드를 접근하지 못함

  - 동일 테이블의 다른 레코드는 접근허용

 

트랜잭션을 구현할 때 주로 Undo Log를 기반으로 구현한다.

 

트랜잭션의 격리성(Isolation)

여러 개의 트랜잭션이 동시에 동일한 테이블/레코드에 접근할 때 적용하는 규칙

데이터베이스 별로 격리수준이 다르다.

 

Isolation Level

- Read Uncommitted (거의 안씀)

  - commit되지 않은 데이터 접근 가능

  - 가장 낮은 데이터 안정성 / 가장 높은 성능

  - Dirty Read 현상발생 가능  

- Read Committed (일반적으로 가장 많이 사용)

  - commit된 데이터만 접근 가능

  - Non-Repeatable Read 현상 발생

- Repeatable Read

  - 동일한 트랜잭션에서는 한 쿼리의 값은 항상 일정함

  - Phantom Read현상 발생

    - 데이터 변경은 불가능하지만 추가 / 삭제는 가능 

  - 긴 시간 동안 동작하는 트랜잭션에서 안정적인 실행보장이 필요할 경우 사용 (백업, 복제)

- Serializable

  - 두 개의 트랜잭션이 동시에 수행되지 않음

  - 가장 높은 데이터 안정성 / 가장 낮은 성능

 

오라클 : Read Committed

MySQL : Repeatable Read, 백업 / 복제의 안정성 때문

 

MVCC(Multi-Version Concurrency Control)

- 락 없이 읽기 성능을 증가시키는 기술

- 동시성 제어를 여러 버전으로 하겠다. 

- 격리 수준이 다른 경우 락이 걸리지 않고 동시에 읽는 것이가능

- 동일한 격리수준이라고 하더라도 undo log를 동시에 여러 개 복제해서 읽기 락이 발생될 확률을 낮춤


코딩테스트 - 개미탈출 3

t = int(input())
for i in range(t):
    n, m = map(int, input().split(" "))
    s = input()
    start = s.find('@')
    end = s.find('O')
    start, end = min(start, end), max(start, end)
    count1 = 0
    for j in range(start+1, end):
        if s[j] == '#':
            count1 += 1
    start = s.find('@')
    end = s.find('G')
    start, end = min(start, end), max(start, end)
    count2 = 0
    for j in range(start+1, end):
        if s[j] == '#':
            count2 += 1
    count = min(count1, count2)
    if count <= m:
        print('HAHA!')
    else:
        print('HELP!')

'SW Academy' 카테고리의 다른 글

[CNU SW Academy] 28일차(23.01.09)  (0) 2023.01.09
[CNU SW Academy] 12.14 보강  (0) 2023.01.08
[CNU SW Academy] 26일차(23.01.05)  (0) 2023.01.05
[CNU SW Academy] 25일차(23.01.04)  (0) 2023.01.04
[CNU SW Academy] 24일차(23.01.03)  (0) 2023.01.03