크래프톤 정글 TIL : 0704

lazyArtisan·2024년 7월 4일
0

정글 TIL

목록 보기
4/147

프로젝트 복기

jinja2를 사용해서 ssr을 했더니 장점 : 서버에서 jinja 템플릿이 미리 jinja 문법을 해석해서 조건에 맞게 HTML 파일을 만들어주기 때문에 클라이언트가 JS로 장난질 치는걸 사전에 방지할 수 있고, 클라이언트 브라우저의 성능을 덜 탄다.

토큰의 장점 : 역시 사용자가 함부로 뜯어서 변조를 할 수 없다.

비밀번호를 그냥 request 폼으로 보내긴 했는데 어차피 탈취되면 해독되는건 똑같으니까 할 필요가 없었나? : 아 오히려 토큰으로 넣으면 보안에 불리하구나

문제를 안 읽고 했더니 개망. ssr인데 csr로 만들어버림. 포팅하느라 작업 과정이 개망. 다음부턴 원하는 스펙을 잘 정의하고 처음부터 그렇게 만들어야할듯,

기획을 조금 더 시간을 잡고 갔으면 좋았을듯

클라이언트에서 JS로 이벤트 할당하거나 setTimeout 쓰면 csr이 되어버리는건가? 경계가 살짝 모호한 것 같음.

ssr과 csr의 장단점

gpt 피드백

보안 관련 피드백

비밀번호 전송:

  • 비밀번호를 request 폼으로 보내는 것은 일반적인 방법이지만, 항상 HTTPS를 사용하여 전송되는 데이터를 암호화하는 것이 중요합니다. 토큰을 사용하면 비밀번호를 직접 보내는 것보다 보안성이 높아질 수 있습니다.
  • 토큰의 경우 서버에서 비밀번호를 처리하고, 성공 시 클라이언트에게 인증 토큰을 발행하는 방식이 일반적입니다. 이렇게 하면 비밀번호가 더 이상 전송되지 않기 때문에 보안이 강화됩니다.

기술적 경계와 혼동 피드백

SSR과 CSR의 경계:

  • SSR(Server-Side Rendering)은 서버에서 HTML을 렌더링하고, CSR(Client-Side Rendering)은 클라이언트에서 자바스크립트를 사용하여 렌더링합니다.
  • 클라이언트 측에서 JS로 이벤트를 할당하거나 setTimeout을 사용하는 것은 CSR로 간주되지는 않습니다. 이는 일반적인 클라이언트 측 스크립트 사용입니다. CSR은 주로 클라이언트 측에서 전체 뷰를 생성하고 조작하는 방식입니다.
  • 두 방식을 혼용하여 사용하는 것도 일반적입니다. 예를 들어, 초기 로드는 SSR로 하되, 이후의 상호작용이나 페이지 전환은 CSR로 처리하는 방식입니다.

SSR과 CSR의 장단점

SSR의 장점:

  • SEO 향상: 서버에서 렌더링된 HTML을 검색 엔진이 쉽게 크롤링할 수 있습니다.
  • 초기 로딩 속도: 초기 페이지 로드가 빠르며, 사용자가 즉시 콘텐츠를 볼 수 있습니다.

SSR의 단점:

  • 서버 부하 증가: 모든 요청에 대해 서버가 렌더링을 처리해야 하므로 서버 부하가 증가할 수 있습니다.
  • 개발 복잡성: 클라이언트와 서버 간의 상태 관리가 복잡해질 수 있습니다.

CSR의 장점:

  • 인터랙티브한 사용자 경험: 클라이언트 측에서 빠르게 업데이트를 적용할 수 있어 더 인터랙티브한 사용자 경험을 제공합니다.
  • 서버 부하 감소: 초기 로드 이후에는 클라이언트 측에서 렌더링을 처리하므로 서버 부하가 줄어듭니다.

CSR의 단점:

  • 초기 로딩 속도 느림: 자바스크립트를 로드하고 실행해야 하므로 초기 로딩 속도가 느릴 수 있습니다.
  • SEO 문제: 검색 엔진이 자바스크립트를 제대로 실행하지 못할 경우 SEO에 불리할 수 있습니다.

알고리즘 짤막 강의

  1. 자료구조
  • 배열, 스택, 큐
  1. 알고리즘을 판단하는데 기준
  • 시간 복잡도, 공간 복잡도
  • 빅오 표기법
  1. 재귀함수
  • 재귀함수보단 반복문이 아주 약간이지만 메모리 더 절약한다. (요즘 컴퓨터는 너무 좋아서 의미 없음.)
  • 이해하기도 힘든데 쓰는 이유는? 조금 더 자연스럽게 표현할 수 있고 변수 사용도 줄일 수 있음.
  • 점화식과 경계조건이 코드로 치환되는 걸로 이해하면 쉽다.
  1. 정렬 알고리즘
  • 삽입 정렬 O(n^2)
  • 합병 정렬 O(nlogn)
  • 힙 정렬 O(nlogn)
  • 퀵 정렬 O(n^2)
  • 최악의 경우를 고려하면 합병이랑 힙 정렬이 빠른데 대부분 퀵 정렬을 사용한다. (이유는 찾아봐라)
  • O(nlogn) 이상 빠른 건 없다고 증명됨

컴퓨터 시스템 : CSAP

1장 목차 훑어보기

1.1 정보는 비트와 컨텍스트로 이루어진다

  • 비트는 이진법 얘기하는 것 같은데 컨텍스트는 추상적인 개념인가?

1.2 프로그램은 다른 프로그램에 의해 다른 형태로 번역된다

  • 그냥 컴파일러 얘기인가?

1.3 컴파일 시스템이 어떻게 동작하는지 이해하는 것은 중요하다

  • 컴퓨터가 알아먹을 수 있게 이진법으로 만든다고 알고 있는데 어떻게 하는건지 얘기하는건가

1.4 프로세서는 메모리에 저장된 인스트럭션을 읽고 해석한다

  • 메모리에 이진법 코드 넣어놓고 읽는다는 건가? 해석을 어떻게 하는지 설명할듯

1.5 캐시가 중요하다

  • 내가 아는 캐시는 브라우저에 남는 캐시밖에 없는데

1.6 저장장치들은 계층구조를 이룬다

  • HDD,SDD랑 휘발성 메모리랑 계층 구조를 이룬다는 건가?

1.7 운영체제는 하드웨어를 관리한다

  • 하드웨어에 이진법 코드나 데이터 이리 옮기고 저리 옮긴다는 건가?

1.8 시스템은 다른 시스템과 네트워크를 사용하여 통신한다

  • 네트워크 자체가 추상적인 개념이라고 볼 수도 있지 않나? 그냥 연결되어 있으면 네트워크 아님?

백준 (파이썬)

틀렸던 것들

  • input()은 항상 문자열을 반환하므로 숫자로 쓰고 싶으면 int(input())
  • s.len이 아니라 len(s)
  • 문자열에는 append가 안됨. += 로 더해야 됨.
  • 변수 초기화 안 하고 쓰면 런타임 오류 남

알게된 것들

  • print(i, N-i) 이렇게 하면 인자들 사이에 자동으로 공백 넣어줌

9020 골드바흐의 추측

슈도 코드
(N / 2) + 1 부터 1씩 더해지는 i
i가 소수인지 판별
만약 맞으면
N - i가 소수인지 판별
만약 맞으면
i, N - i 출력

for i in range(T):
    N = int(input())
    for i in range(2, N//2 + 1):
        if isPrime(i) and isPrime(N-i):
            print(i, N-i)
            break

for문 빼먹었었음, i를 2번 씀,

for i in range(2, N//2 + 1):

이게 아니라

range(N//2, N)

이건데 무지성으로 2부터 시작함

1914 하노이의 탑

정글 가이드 페이지에서 문제 풀어보려고 하다가 30분 지나면 답 보라고 하길래 그냥 답지 봄.

https://shoark7.github.io/programming/algorithm/tower-of-hanoi

N개의 원판을 움직이게 하려면
우선 N-1개의 원판이 2번째 탑에 위치하게 해야 함
(그래야 N번째 원판이 3번째 탑으로 갈 수 있으니까)

그렇게 했으면 이제 N번째 원판은 신경 안 써도 됨

N-1개의 원판이 3번째 탑으로 가려면
N-2개의 원판이 1번째 탑에 위치하게 해야 함
(= 3번째 탑이 아닌 탑에 위치하게 해야 함)

...

2개의 원판이 3번째 탑으로 가려면
1개의 원판이 2번째 탑에 위치하게 해야 함
총 2번 옮기면 됨

1개의 원판이 3번째 탑으로 가려면
1번 옮기면 됨 (= 경계조건)


즉, N개의 원판을 움직이게 하려면
'N-1개의 원판을 두 번 들었다 놨다 + N번째 원판 옮기기'가 필요함

def hanoi(N, start, to, via):
    if N == 1:
        move(start, to)  
    else:
        # 원판 N-1개를 via에 놓는다
        hanoi(N-1, start, via, to)
        # N번째 원판을 to에 놓는다
        move(start, to)
        # 원판 N-1개를 to에 놓는다
        hanoi(N-1, via, to, start)  

0개의 댓글