대용량 트래픽 발생시 대응, ORM 사용시 쿼리가 복잡해진다면? 대용량 트래픽 발생 시 어떻게 대응해야 하나요? 먼저 서버는 왜 터질까? 서버 = 외부로부터 들어오는 요청을 받아 처리해주고 응답을 주는 프로그램이 돌아가는 어떤 컴퓨터 서버 또한 처리속도와 한계가 CPU, 메모리, 저장장치에 영향을 받는다는 말 웹 서버라는 프로세스가 있다면, 그 프로세스 안에는 다수의 요청을 시분할 처리하기 위한 스레드들이 있다. 스레드가 아무리 많아도 결국 task를 처리하는건 cpu이기 때문에 처리속도에는 한계가 있다. 또한 모든 task를 동시에 처리할 수 없기떄문에 결국 task를 큐에 넣어 순차적으로 처리하게 되는데, 이 큐는 메모리에 존재한다. 즉, 요청을 들어오는 족족 큐에 넣다보면 메모리 오버플로우가 날 수 있다는 것이다. 웹 서버는 결국 프로그램인데 메모리 오버플로우가.. 2024. 4. 1. RDBMS 정규화, PK & FK RDBMS의 정규화에 대해 설명해주세요. 정규화란 RDBMS를 설계할때, 중복을 최소화하면서 데이터 구조를 짜는 프로세스 이다. 정규화를 하지않으면 *이상현상이 발생하기 때문이다. 이상현상 삽입이상 데이터를 테이블에 저장할때, 불필요한 데이터도 넣어야하는 경우 삭제이상 데이터를 테이블에서 삭제할때, 원하지 않는 데이터도 같이 삭제되는 경우 갱신이상 중복된 데이터 중에서 특정 부분만 수정되어 값이 모순을 일으키는 경우 PK, FK에 대해 설명해주세요. PK(기본키, 식별키): 테이블의 유일한 값을 가지는 필드 FK(참조키, 외래키): 다른 테이블의 PK 필드와 연결 2024. 3. 29. HTTP 메서드 HTTP 메서드에 대해 설명해주세요. HTTP 메서드란 클라이언트와 서버 사이에 이루어지는 요청과 응답 데이터를 전송하는 방식을 말한다. 쉽게 말하면 서버에 주어진 리소스에 수행하길 원하는 행동, 서버가 수행해야 할 동작을 지정하는 것이다. 주요 메서드 GET: 리소스 조회 POST: 요청 데이터 처리, 주로 등록에 사용 PUT: 리소스를 대체(덮어쓰기), 해당 리소스가 없으면 생성 PATCH: 리소스 부분 변경 DELETE: 리소스 삭제 기타 메서드 HEAD: GET과 동일하지만 메시지 부분을 제외하고, 상태 줄과 헤더만 반환한다. OPTIONS: 대상 리소스에 대한 통신 가능 옵션을 설명(주로 CORS에서 사용) CONNECT: 대상 자원으로 식별되는 서버에 대한 터널을 설정 TRACE: 대상 리소스.. 2024. 3. 28. db 선택 요구사항 1. 스키마가 고정되어있나요? - 고정되어있다고 볼수있나? 2. 그렇게 빠른 속도를 요하나요? - 아님 3. 많은변화예상: 팔로우/언팔로우 기능 4. 스크래핑해온 정보들 - 작품(제목, 내용, 작가이름, 별점, 작품에 대한 리뷰, 플랫폼) => 여러곳에서 스크래핑 해오니 어디에는 이런 정보가 있을거고, 어디에는 이런 정보가 없을수도 있음(키워드?) 5. 우리는 분석적/일관성 있는 데이터 저장이 필요한가? 1. 몽고디비 대용량 데이터 처리에 유리 고성능, 고가용성 및 쉬운 확장성 제공 NoSQL, Document 지향 데이터베이스 json 과 binary json 으로 저장함 장점: 스키마리스디자인?/ 희소한 데이터소스 또는 변경되는 데이터 모델을 갖는 곳에서 유리 수평적확장에 뛰어남 단점: 안정.. 2024. 3. 27. 프로세스와 쓰레드 프로세스와 쓰레드에 대해서 설명하고 그 차이에 대해서 설명해주세요. 프로그램: 어떤 작업을 위해 실행할 수 있는 파일 프로세스 - 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 - 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립개체) - 동적인 개념으로는 실행된 프로그램을 의미한다. - 각각의 독립된 메모리영역을 할당받음(code, data, stack, heap) - 기본적으로 프로세스당 최소 1개의 스레드를 가지고 있다. - 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스간의 통신(IPC)을 사용해야한다. ex) 파이프, 파일, 소켓등을 이용 스레드 - 프로세스내에서 실행되는 여러 흐름의 단위 - 프로세스의 특정한 수행 경로 - 프로세스가 할당받은 자원을 이용하는 실행의 단위 -.. 2024. 3. 27. To-DuBu: KPT 회고록 Keep 현재 만족하고 있는 부분 프로젝트 진행하다보니 완성도 있는 코드를 쓸 수 있게 되어서 좋았다 즉각적인 소통, 원활한 소통이 되어서 좋았다. 깃 사용하면서 커밋메시지 잘 날린거같고 체계적으로 깃을 사용해본거같아서 좋았습니다. 어려운 문제있을때 팀원들과 함께 해결이 가능해서 좋았다. 평소보다 복잡한 로직을 체험해볼수있어서 좋았다. Problem 불만인 부분 시간이 짧아서 불가피하게 지피티의 도움을 받았다. 좀 더 주체적으로 짤 수 있었다면 좋겠다. 사전에 계획한 기한을 엄수하지 못함. 코드 컨벤션을 설정해두지 않아 관련한 사소한 트러블이 많았음. 네스트 사용이 익숙치않아 가드나 전략 사용에 있어 어려움이 있었다. Try 해결책, 지금당장 가능한것 지피티보다 공식문서 활용하기. 더 노력한다... 더 .. 2024. 3. 25. TIL #34) Nest로 S3 이용하기 Today I Learned 트렐로 프로젝트 중 생성한 카드에 이미지 업로드 하는 기능이 필요해 다음과 같은 코드를 작성했다. 먼저 AWS계정에 S3버켓을 생성하고, 그 버켓에 접근하기 위한 IAM 계정이 필요하다. 다른 글을 참조해 생성했고 대표적으로 권한 문제가 계속 있었는데;; 구글링을 통해 해결했다. AWS S3 버켓에 올리기 위한 핵심적인 로직은 다음과 같다. @Injectable() export class AwsService { s3Client: S3Client; constructor(private configService: ConfigService) { // AWS S3 클라이언트 초기화. 환경 설정 정보를 사용하여 AWS 리전, Access Key, Secret Key를 설정. this.s.. 2024. 3. 25. TIL #33) 순서 정렬하기 구현하고싶은것) 사용자가 원하는대로 컬럼순서를 바꿀 수 있는 기능 하지만 하나 옮긴다고 전체 데이터베이스를 업데이트 할수는 없기때문에 부동소수점을 이용해 구현해보았다. 사실 부동소수점의 개념은 잘 모르겠으나 단순히 순서가 1, 2, 3 있다면 1.1234 이런식으로 소수를 이용해 1과 2사이에 배치할 수 있다는 아이디어를 사용해보았다. 처음에는 단순하게 1과 2 사이에 순서를 배치하고싶다면 나누기를 사용해서 그 사이수를 구하려 했다. 그래서 순서를 처음부터 1과 2가 아니라 1.1, 2.2 처럼 소수를 이용해 줬다. 이렇게 하면 될 줄 알았는데 나눗셈이 내 마음대로 되는게 아니었다.. ㅋㅋㅋㅋ 나누기가 아니라 1과 2사이의 수를 구하기 위해 2에서 특정 수를 빼지만 1보다는 크게 유지하도록 코드를 구현했.. 2024. 3. 22. TIL #32) Linked List 자료구조 Linked List 링크드 리스트란 노드라는 기본 요소를 사용해 선형적인 데이터 묶음을 추상적으로 표현한 것이다. 노드에는 데이터뿐만 아니라 다음 노드를 가리키는 참조(링크)가 포함되어 있다. 트렐로 프로젝트 중, 카드의 순서를 옮겨야하는 과제가 있었다. 무식하게 옮기려면 할수는있겠지만 만약 카드의 갯수가 100장, 1000장이 넘어간다면? 한 순서를 옮기기위해 다른것도 모조리 수정이 필요할 것이다. 이럴때 사용할 수 있는게 링크드리스트 자료구조이다. Singly Linked List Node: data와 pointer로 이루어진 요소로서 모여서 리스트를 형성 data: 데이터 pointer(link): 다음 Node를 가리키는 참조 head: 가장 앞에 있는 Node tail: 가장 끝에 있는 Nod.. 2024. 3. 20. 트렐로) 팀 프로젝트 기록 👾 트렐로 프로젝트란? 심화 주차에서는 기존 프로젝트 주차에서 보다 더 가치가 있는 프로젝트를 만드는데에 도전해보려고 합니다. 바로 “프로젝트 협업 도구”를 만드는 것입니다. 우리는 이번 심화 주차에서는 Trello를 만들어보려고 합니다. 작업을 생성 및 관리하고 작업 상태를 업데이트하는 등 여러 기능을 개발하며 각각의 기능에 실제로 어떤 기술이 필요하고 어떻게 문제를 해결해야 하는지를 직접 경험해볼 수 있어요! 또한, 프로젝트 주제가 주제다보니 전반적인 개발 프로세스에 대해 좀 더 깊게 생각해보는 시간을 가질 수 있게 되는 시간이 될 것입니다. 이를 통해 여러분들이 다른 개발자들과 원활하게 협업하는 능력이 키워지길 바랍니다! 👾 프로젝트 소개 프로젝트명: To-DuBu 개발일정: 3/18 ~ 3/25 .. 2024. 3. 18. TIL #31) LLM LLM은 무엇인가??? 핫한 ai 챗지피티를 만든 기술 챗지피티가 들어서고... 데이터 라벨링을 하는 회사 등 큰 피해를 불러오기도함 챗지피티가 도입된 첫 달부터 stackOverflow의 트래픽 사용량이 14% 감소하는 일도...초비상!!! 딥러닝: 테스트 set이 있고 준비한 모델로 트레이닝을 시킨 후 테스트를 통과하도록 파이팅하는 과정 채팅으로 대답하는 구조자체가 어케 되는거임? => 생성형 ai를 알기전에 대화를 이해하는 기술의 핵심 자 연 어 처리!!!!!를 알아보자 NLP 자연어: 인간이 일상생활에서 사용하는 언어 NLP를 통해 컴퓨터와 인간언어로 소통하게 되었따 1. 단어를 토큰화 한다(의미있는 단위) 토큰은 보통 단어나 문장을 의미, 컴퓨터는 이 단위를 통해 텍스트를 처리하고 분석한다 2... 2024. 3. 18. TIL #30) MVCC를 알아보자 MVCC를 이해하기 위한 여러가지 정보 격리성레벨 1. read uncommit 가장낮은 격리수준. 한 트랜잭션이 커밋되지 않은 데이터를 읽을 수 있다. => Dirty Read 문제가 발생할수있음 (드릅게 읽힌다) Dirty Read: 다른 트랜잭션이 커밋되지 않은 데이터를 읽을 수 있다. 즉, 다른 트랜잭션이 완료되지 않았는데 변경된 데이터를 읽을 수 있음. 2. read commit 한 트랜젹션은 다른 트랜잭션에서 커밋된 데이터만 읽을 수 있다. => Dirty Read 문제는 해결 되지만 Non-repeatable Read 문제가 발생할 수 있음 => 외부에서 개입할수있기때문에(한번에 두번한다면?!) 데이터가 일치하지않을 가능성. 찝찝함. Non-repeatable Read: 같은 쿼리를 두 번 .. 2024. 3. 15. TIL #29) 0312 오늘 한일 Today I Learned 오늘은 과제를 열심히 했다. 공연예매서비스 중 공연 파트를 대충 끝낸것 같고.. 이것저것 겪는 오류는 참 많은데 이게 알맹이가 있다기 보다는 정말 사소한것에서 오류가 나니 하나하나 적기도 좀 그렇다. ^^; 어제까지만해도 네스트 못하겠다고 기운 없었는데 그래도 좀 만져보니 조금은 알거같다!! 내일까지는 필수구현 끝내고, 커스텀 데코레이터와 가드부분을 파봐야겠다. 오늘 한것 공연 등록 좌석 등록 공연 목록 보기 공연 제목으로 검색하기 공연 상세보기 부족한 부분 어드민만 공연 등록 & 좌석 등록 가능하도록(가드기능을 아직 잘 모르겠다 ㅠㅠ) 공연 등록시 date 타입 고민해보기 필수 구현 내용 다시 읽어보고 부족한거 있으면 다 해서 내는걸 목표로 하자! 선택기능까지 하고싶기는한데.. 2024. 3. 12. TIL #28) 싱글톤 패턴 싱글톤 패턴은 소프트웨어 개발에서 인스턴스가 오직 하나만 생성되어야 하는 경우에 사용되는 디자인 패턴입니다. 이 패턴의 목적은 전역 상태를 관리하고, 여러 컴포넌트 간의 데이터 공유를 용이하게 하며, 메모리 사용을 최적화하는 것입니다. 싱글톤 패턴은 특정 클래스의 인스턴스가 프로그램 전체에서 단 하나만 존재하도록 보장합니다. 이를 통해 동일한 리소스나 서비스에 대한 중복 생성을 방지하고, 전역 접근 지점을 제공합니다. 싱글톤 패턴을 구현하는 방법은 여러 가지가 있지만, 가장 기본적인 구현 방법은 다음과 같습니다: 생성자를 private으로 선언하여 외부에서 인스턴스를 직접 생성할 수 없도록 합니다. 클래스 내부에 정적(private) 변수로 인스턴스를 저장합니다. 인스턴스에 접근할 수 있는 정적 메소드(.. 2024. 3. 12. 프로그래머스 JavaScript - 문자열 내 마음대로 정렬하기 문제 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다. strings는 길이 1 이상, 50이하인 배열입니다. strings의 원소는 소문자 알파벳으로 이루어져 있습니다. strings의 원소는 길이 1 이상, 100이하인 문자열입니다. 모든 strings의 원소의 길이는 n보다 큽니다. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다. strings n return ["sun","bed", "car"] 1 [".. 2024. 3. 8. 이전 1 2 3 4 5 6 7 다음