CS

CS/OOP

[오브젝트 스터디] 2장 - 상속과 다형성

객체와 객체 지향 진정한 객체지향 패러다임으로의 전환은 클래스가 아닌 객체에 초점을 맞출 때에만 얻을 수 있다. 첫째, 클래스 이전에 어떤 객체들이 필요한지 고민하라. 클래스의 윤곽을 잡기 위해선 어떤 객체들이 어떤 상태와 행동을 가지는지 먼저 결정해야 한다. 둘째, 객체를 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 일원으로 봐야 한다. …이것은 설계를 유연하고 확장 가능하게 만든다. 프로그램이 사용되는 분야를 도메인이라고 부른다. 객체지향 패러다임이 강력한 이유는 요구사항 분석 단계부터 프로그램 구현 단계까지 객체라는 동일한 추상화 기법을 사용할 수 있기 때문이다. 인터페이스와 구현의 분리 클래스의 내부와 외부를 구분해야 하는 이유는 무엇일까? 경계의 명확성이 객체의 자율성을 보장하..

CS/OOP

[오브젝트 스터디] 1장 - 응집도는 높게 결합도는 낮게

‘오브젝트: 코드로 이해하는 객체지향 설계’를 읽고 공부한 내용입니다. 공부하며 작성한 내용이기 때문에 오류 사항이 있을 수 있습니다. 잘못된 부분은 피드백 부탁드립니다. 1장 내용 의존성 : 다른 객체 내부를 알면 알수록 변경에 취약해진다 초기의 코드는 Theater (극장) 객체에서 관객, 관객의 가방, 초대장, 티켓, 티켓 판매원, 티켓 판매소를 알고 있는 상태입니다. 그리고 티켓 구매 로직까지 모두 책임지고 있습니다. 전형적인 절차지향적 프로그래밍이라고 할 수 있습니다. public class Theater { private TicketSeller ticketSeller; public Theater(TicketSeller ticketSeller) { this.ticketSeller = ticket..

CS/운영체제

[OS] 스터디 3주차 : CPU 스케줄링

기아 상태가 무엇인가요? : 스레드가 스케줄링 과정에서 선택되지 못한 채 오랫동안 준비 리스트에 있는 상황 우선순위를 기반으로 하는 시스템에선 높은 우선순위의 스레드가 계속 준비 리스트에 들어오면서 발생하며 실행 시간이 짧은 스레드를 우선 실행시키는 알고리즘이 사용되는 경우엔 계속 더 짧은 스레드가 준비리스트에 들어오면서 발생한다. 기아 상태를 어떻게 해결할 수 있나요? : 에이징(aging) 기법으로 해결할 수 있습니다. 에이징이란 스레드가 준비 리스트에 머무르는 시간에 비례하여 우선순위를 높여주는 기법입니다. CPU 스케줄링에 대해 설명해주세요. : 준비(Ready) 상태에 있는 스레드들 중 하나를 선택하여 CPU를 할당하는 과정입니다. CPU 스케줄링의 기본 목표는 CPU 활용률 (CPU Utili..

CS/DB

[DB] MySQL EXPLAIN 쿼리 실행 계획 분석 방법

💡발단 프로젝트의 필수 구현이 마무리되고, 리팩토링을 하면서 쿼리를 최적화할 일이 생겼습니다. 경험적으로, 감으로 하기보다는 체계적으로 최적화할 방법을 고민하던중에 EXPLAIN(쿼리 실행 계획 분석)을 알게 되었습니다. 그 과정에서 EXPLAIN을 공부하게 된 내용을 서술합니다. EXPLAIN 🤔 그게 뭔데? MySQL에서는 최적의 쿼리를 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장되어 있는지를 참조하고, 해당 데이터를 기반으로 최적의 실행 계획을 수립해주는 쿼리 옵티마이저가 내부적으로 동작한다. EXPLAIN이란 여기서 MySQL 옵티마이저가 생성하는 실행 계획을 테이블(엑셀에 가까운) 형태로 볼 수 있게 하는 명령이다. 사용 방법 간단하다. SQL 앞에 EXPLAIN을 명령을 넣고 실행하면..

CS/운영체제

[OS] 스터디 2주차 : 프로세스와 스레드

프로세스에 대해 설명해주세요. : 운영체제로부터 메모리 공간을 할당 받아 실행중인 프로그램을 의미합니다. 프로세스의 특징 프로세스들은 서로 독립된 메모리 공간을 가지므로, 프로세스끼리는 임의로 서로의 영역에 접근할 수 없습니다. IPC(inter process communication)를 통해 프로세스간에 통신할 수 있다. 프로세스는 운영체제 커널에 의해 관리됩니다. 커널은 프로세스를 위해 사용자 공간에 메모리를 할당하고, 프로세스 ID를 부여하며, 프로세스 테이블을 이용하여 생성된 모든 프로세스의 정보를 관리합니다. 프로그램에 대해 설명해주세요. : 하드 디스크나 USB 등 저장장치에 저장된 실행 가능한 파일입니다. 프로세스의 메모리 공간에 대해 설명해주세요. : 프로세스는 4개의 메모리 영역으로 구성..

CS/운영체제

[OS] 스터디 1주차 : 운영체제와 커널, 다중 프로그래밍

운영체제 면접 질문에 답변하기 위해 공부한 내용들을 기록합니다. 여러가지 개념에 대해 면접식 흐름으로 서술했습니다. 붉은색 글씨의 내용은 핵심 답변이고 밑의 내용은 꼬리 질문에 대한 답변입니다. 모의면접을 진행하면서 부족한 점들은 보충할 예정입니다. 질문 출처는 jscode이며 답변 출처는 하단에 정리해놓았습니다. 공부한 내용들 운영체제는 무엇이고 어떤 역할을 수행하는지 설명해주세요. 운영체제란? : 컴퓨터 사용자와 컴퓨터 하드웨어 사이의 중개자(intermediary) 역할을 하는 시스템 소프트웨어 (시스템 소프트웨어 : 응용 프로그램과 하드웨어 장치 사이에 존재하는 소프트웨어를 통칭하는 용어로, 운영체제와 컴파일러 등이 있음.) 운영체제의 구성요소 : 커널(운영체제의 핵심 코드), UI 및 도구 프로..

CS/DB

[DB 기초] 조인(JOIN)

JOIN이란? : 원하는 데이터가 둘 이상의 릴레이션에 흩어져 있는 경우, 관련 튜플들을 조합하여 하나의 릴레이션(테이블)을 구성하도록 하는 검색(SELECT) 방법. 조인은 릴레이션들의 공통 속성을 기준으로 하므로 테이블들간에 최소한 하나의 속성을 공유하고 있어야 한다. 여러가지 조인 조건에 따라 검색 결과를 다르게 할 수 있다. 아래는 뒤에서 예시로 들 과목, 수강 테이블. 과목번호 과목명 강의 교수 001 컴퓨터구조 장성태 002 정보보호개론 양수미 003 디지털논리설계 장성태 004 네트워크보안 양수미 학번 과목번호 학점 180 001 B 181 002 B+ 180 003 A+ 181 004 A 크로스 조인(CROSS JOIN) 테이블 행들 사이의 모든 조합을 행으로 갖는 하나의 통합 테이블을 만..

CS/DB

[DB 기초] 정규화(normalization)

데이터 이상과 정규화를 공부하는 과정을 정리합니다. "누가 DB 설계를 저렇게 해~?" 라고 생각하기도 했지만, 관계형 데이터베이스에서 중복성과 무결성을 강조하는 이유를 이해햐기 좋은 계기가 되었습니다. 💡 데이터 이상(data anomaly) 데이터 이상은 잘못된 DB 설계 과정에서 불필요한 데이터 중복으로 인해 발생하는 부작용을 말한다. 먼저 아무 생각 없이 릴레이션을 짰을 때 무슨 문제가 생기는지 알아보자. 여기 Student 릴레이션이 있다. 학번(PK) 이름 학과 위치 나이 170 원석 컴퓨터 304호 27 180 영두 컴퓨터 304호 24 얼핏 보면 별 문제 없어보이고 검색(SELECT)까지만 해도 전혀 문제가 없다. 그러나 삽입, 갱신, 삭제시에 치명적인 문제가 발생한다. 삽입 이상 : 불필..

CS/자료구조 & 알고리즘

[Algorithm] DP

DP 란? DP는 특정한 알고리즘이라기보다 문제해결 패러다임으로 볼 수 있다. 큰 문제를 잘게 나눠서 결과를 저장해가며 그 답을 저장해두고 재활용한다. DP는 사실… 이론적으로는 별거 없다. 결국 풀이 경험이 중요하다…! 왜 쓸까? 피보나치 수열로 배워보자 일반적인 재귀를 사용할 때, 하나의 큰 문제를 풀기 위해 작은 문제들을 여러번 반복하기 때문에 비효율적일 때가 많다. 아래는 재귀호출 버전 피보나치의 호출 과정인데, 반복되는 호출이 꽤 많다. O(2^n)으로, n이 커질수록 기하급수적으로 커진다. def fibo(x): if x == 1 or x == 2: return 1 return fibo(x - 1) + fibo(x - 2) Top Down 방식 : 위의 항부터 큰 항부터 쪼개서 작은 문제로 나..

CS/네트워크

[CS 네트워크] JWT와 클라이언트-서버 통신 흐름

❓ 왜 필요한데? 보안 문제그래서 유저를 식별할 수 있는 중요한 데이터를 토큰화시켜 주고받게 된다. 만약 서버와 클라이언트가 서로 유저 정보를 순수 JSON으로 보내게 되면, 이게 유효한 정보인지 확인할 방법이 없다. 만약 악의를 가진 공격자가 유저 ID를 바꿔서 요청을 했을 경우, 서버에선 무슨 일이 일어난 건지 알 방법이 없다. HTTP의 특징매번 사용자가 로그인을 하기는 너무 불편하고, 그렇다고 브라우저 스토리지에 아이디와 비밀번호 (인증 정보)를 넣자니 너무 위험하기 때문에, ‘인증 되었음’을 나타내기 위한 정보인 세션과 토큰이 등장했다. 기본적으로 HTTP 통신은 무상태(Stateless)이다. ❓ 세션에 비해 장점이 뭐지? : 세션 방식의 경우, 서버의 메모리에 저장된다는 것이 단점의 주 원인..