IT 시사 및 CS 지식 56

[CS스터디]220704 자료구조 - 1

시간 복잡도란? 반복문을 몇 번 사용했는지 등을 통해 알고리즘이 문제를 해결하기 위한 시간(연산)의 횟수. 즉, 우리는 입력값과 연산 수행 시간의 상관관계를 나타내는 척도를 시간 복잡도라고 한다. 배열과 링크드 리스트의 차이를 설명해주세요. LinkedList와 ArrayList는 모두 Java에서 제공하는 List 인터페이스를 구현한 Collection 구현체. ArrayList 내부적으로 데이터를 배열로 관리하고 데이터 추가/삭제 시 임시 배열을 생성해 데이터를 복사함 데이터별 인덱스가 있어 검색에는 유리O(1) 임시 배열을 사용하기 때문에 데이터 추가/삭제의 경우에는 불리O(n) LinkedList 내부적으로 노드 단위로 데이터를 관리합니다. 자신의 앞 뒤 노드만 인지하는 상태임. 인덱스가 따로 없..

[CS스터디]220624 네트워크 - 3

RESTful이란 무엇이며, 이것에 대해서 아는대로 설명해보세요. RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이다. ‘REST API’(REST 기반으로 서비스 API를 구현한 것)를 제공하는 웹 서비스를 ‘RESTful’하다고 할 수 있다. RESTful은 REST를 REST답게 쓰기 위한 방법으로, 누군가가 공식적으로 발표한 것이 아니다. 즉, REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭된다. CORS란 무엇이며 이것에 대해서 설명해보세요. CORS는 Cross-Origin Resource Sharing임. 브라우저에서는 보안적인 이유로 cross-origin HTTP 요청들을 제한함. 그래서 cross-origin 요청을 하려..

[CS스터디]220623 네트워크 - 2

HTTP와 HTTPS의 차이점에 대해서 설명해보세요. HTTP(Hypertext Transfer Protocol) 네트워크를 통해서 데이터를 전송하는데에 사용하는 protocol이다. 인터넷의 거의 대부분의 정보(웹 컨텐츠나 API 등)들은 이 HTTP를 사용한다. HTTP messages 에는 2 종류가 있다 -> request(요청)과 response(응답) HTTP requests all go to either an origin server or a proxy caching server, and that server will generate an HTTP response. HTTP responses are answers to HTTP requests. HTTP는 layer 7 protocol이다! ..

[CS스터디]220621 네트워크 - 1

웹 통신의 큰 흐름: https://www.google.com/ 을 접속할 때 일어나는 일 사용자가 웹 브라우저에서 www.google.com을 주소창에 입력하면 웹 브라우저에서는 www.google.com 도메인에 대한 실제 IP 주소를 DNS에 조회 실제 IP 주소를 이용해서 서버의 80 포트를 통해 서비스를 제공하는 웹 서버에 해당 도메인에 대한 웹 컨텐츠를 요청 웹 서버는 웹 브라우저를 위한 별도의 포트에 소켓을 개설 4번의 소켓은 웹 브라우저와 연결 웹 서버는 요청 받은 컨텐츠를 웹 브라우저로 보냄 TCP와 UDP의 차이점에 대해서 설명해보세요. TCP(Transmission Control Protocol) 전송을 제어하는 프로토콜 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 ..

[CS스터디]220617 데이터베이스 - 2

정규화에 대해서 설명해주세요. 기본적으로 데이터의 무결성(Integrity)를 유지하기 위한 행위이다. (여기서 무결성이란 정확성과 일관성을 유지하는 것이다!) 그러기 위해서 테이블 간의 중복된 데이터를 허용하지 않는다. 제 1 정규화 테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 태이블을 분해하는 것 제 2 정규화 완전 함수 종속을 만족하도록 테이블을 분해하는 것 기본키의 부분집합이 결정자가 되어선 안됨. 제 3 정규화 이행적 종속을 없애도록 테이블을 분해하는 것 BCNF 정규화(Boyce-Codd Normal Form) 모든 결정자가 후보키가 되도록 테이블을 분해하는 것 https://www.youtube.com/watch?v=pMcv0Zhh3J0 자격증 딸 때 참고했던 영상 ..

[CS스터디]220616 데이터베이스 - 1

데이터베이스에서 인덱스를 사용하는 이유 및 장단점에 대해 설명해주세요. 인덱스(INDEX)란? 테이블에 대한 동작의 속도를 높여주는 자료 구조 인덱스는 테이블 내의 1개 혹은 여러 개의 컬럼을 이용하여 생성 고속의 검색 동작 뿐만 아니라 레코드 접근과 효율적인 순서 매김 동작에 대한 기초를 제공 검색이 잦은 컬럼에 인덱스를 생성하는게 보통이다. 장점 빠르게 검색가능 단점 검색(R)만 빠름, 나머지 CUD는 느려질 수 있음 추가 저장 공간 필요 인덱스를 생성하고 주기적으로 관리할 인력과 시간이 들어감 트랜잭션에 대해서 설명해주세요. 데이터베이스의 상태를 변경시키기 위해 수행하는 작업의 단위 트랜잭션의 특징으로 ACID가 있다. ACID에 대해서 설명해주세요. 원자성(Atomicity) 트랜잭션이 데이터베이..

[CS스터디]220615 스프링의 장점

스프링의 장점 경량 프레임 워크 스프링은 여러 개의 모듈로 구성되어 있으며, 각 모듈은 하나 이상의 JAR 파일로 구성됨. 몇 개의 JAR 파일만 있으면 개발과 실행이 가능하다. POJO 기반의 구성 스프링 프레임워크가 POJO(Plain Old Java Object) 형태의 객체를 관리함 개발자가 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않음을 의미한다. Java 코드를 이용해서 객체를 구성하는 방식 그대로 스프링에서 사용할 수 있다. 덕분에 자유롭게 객체지향적 설계를 구현할 수 있다. 개발자는 가장 일반적인 형태로 코드를 작성하고 실행할 수 있다. 때문에 높은 생산성과 유연한 테스트를 할 수 있다는 장점을 가지게 된다. Java의 객체지향적인 특징을 살려 비즈니스 로직에 충실한 개발이 가능하도..

[CS스터디]220613 컴파일러, 패턴, Web

스크립트 언어와 컴파일 언어를 나열하고 차이점을 설명해주세요. 스크립트 언어 Python, Javascript 등의 언어는 별도의 파일 생성없이 소스 코드가 작성될 때마다 인터프리터가 해당 코드를 기계어로 번역하고 실행함! 얘네를 인터프리터 언어 또는 스크립트 언어라고 부름 실행 전 소스코드를 컴파일하여 기계어로 변환 후 해당 파일을 실행 이미 기계어로 변환된 것을 실행하므로 비교적 빠름 컴파일을 하지 않고 바로 실행한다는 특징이 있지만, 소스 코드를 읽으며 실행하기 때문에 프로그램의 실행 시간은 느림 문법적 제약이 일반적으로 많음 운영체제에 따라 다르게 작업해야 함 컴파일 언어 C, C++, Java 등의 언어는 코드를 작성한 후 컴파일을 하면 컴파일러에 의해 기계어로 변환된 파일이 생성되고 컴퓨터는 ..

[CS스터디]220610 Java - 4

강한 결합과 느슨한 결합이 무엇인지 설명해주세요. 강한 결합 말 그대로 한 객체가 다른 객체와 강하게 의존 관계가 형성되어 있을 경우 그 결합을 강한 결합이라고 함. public class B { private A a; public B() { this.a = new A(); } public void doB() { a.doA(); } } public class A { public void doA() { System.out.println("doA()"); } } 예를 들어 이렇게 A 클래스가 없으면 B 클래스를 정의할 수 없는 상황인 경우 B 클래스는 A 클래스에 의존한다고 표현함. 그리고 이 때 A 클래스를 다른 클래스로 바꾸면 B 클래스의 코드도 바꿔줘야 함! 간단한 코드라 망정이지 복잡한 코드면 유지 ..

[CS스터디]220609 Java - 3

SOLID(객체지향 5대원칙)에 대해서 설명해주세요. SRP(Single Responsibility Principle) : 단일 책임 원칙클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유이어야 함. OCP(Open-Closed Principle) : 개방-폐쇄 원칙확장에는 열려 있어야 하고 변경에는 닫혀 있어야 함. LSP(Liskov Substitution Principle) : 리스코프 치환 원칙상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 함. ISP(Interface Segregation Principle) : 인터페이스 분리 원칙인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 함. DIP(De..

[CS스터디]220607 Java - 2

인터페이스와 추상 클래스 공통점 상속 받는 클래스 혹은 구현하는 인터페이스 안에 있는 추상 메서드를 구현하도록 강제한다. 차이점 추상클래스 인터페이스 추상클래스 인터페이스 extends implements 하나 이상의 메서드가 추상 메서드이면 모든 메서드가 추상 메서드 추상 메서드 1개 이상, 일반 변수, 일반 메서드 가능 추상 메서드, 상수만 선언 가능 생성자, 일반 변수 가질 수 있음 생성자, 일반 변수를 가질 수 없음 존재 목적이 추상 클래스를 상속받아서 기능을 이용하고, 확장시키는데 있음 함수의 껍데기만 있음. 그 이유는 그 함수의 구현을 강제하기 위해서임. 구현을 강제하므로써 구현 객체의 같은 동작을 보장할 수 있음! 상속은 슈퍼 클래스의 기능을 이용하거나 확장하기 위해서 사용되고, 다중 상속의..

[CS스터디]220607 Java - 1

JVM의 구조와 Java의 실행 방식 JVM이란? 자바 가상 머신(Java Virtual Machine) 자바 바이트 코드를 실행할 수 있게 해줌(.java 파일을 .class 파일(바이트 코드)로 변환해서 실행할 수 있게 해줌) JVM의 구조 프로그램이 실행되면 OS로부터 프로그램이 필요로 하는 메모리를 먼저 할당 받습니다. 그리고 자바 컴파일러를 통해 개발자가 작성한 코드(.java)를 바이트 코드(.class)로 변환합니다. 다음 Class Loader에서 바이트 코드를 JVM에 로딩 시킵니다. 로딩 된 바이트 코드를 execution engine을 통해 기계어로 해석됩니다. 해석된 바이트 코드들은 runtime data areas에 배치되어 실질적인 수행이 이루어집니다. Java의 실행 방식 WO..

[CS스터디]220607 Spring - 3

Servlet Filter와 Spring Interceptor의 차이는 무엇인가요? Servlet Filter Servlet Filter는 디스패처 서블릿에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다! 이 그림에서 처럼 필터는 스프링의 범위 밖에서 처리가 되는 것임!! 그니까 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너에 의해 관리가 되는 것임! (스프링 빈으로 등록은 됨) 필터를 추가하기 위해서는 javax.servlet의 Filter 인터페이스를 구현해야 함 init(), doFilter(), destroy() 메서드가 존재함 쓰이는 용도 공통된 보안 및 인증/인가 관련 작업 모든 요청에 대한 로깅 또는 감사 이미지/데이터 압축 및 문..

[CS스터디]220602 Spring - 2

DI의 종류는 어떤 것이 있고, 이들의 차이는 무엇인가요? DI의 종류에는 Constructor Injection(생성자 주입)과 Field Injection(필드 주입), Setter Injection(수정자 주입)이 있음 1. 생성자 주입 1 2 3 4 5 6 7 8 9 10 11 12 13 14 @Component public class ABean { private BBean b; public ABean(BBean b) { this.b=b; } public void bMethod() { b.print(); } } cs 생성자를 위한 빈 주입은 위와 같이 생성자의 매개변수로 의존 주입할 빈을 매개변수로 넣어준다. 스프링 4.3 버전 이후로는 생성자 의존주입에 @Autowired를 넣을 필요는 없다. ..

[CS스터디]220601 Spring - 1

Spring DI/IoC는 어떻게 동작하나요? 어떻게 동작하는지 알기 전에 얘네가 무엇인지를 먼저 알아야 하는데 DI(Dependency Injection)/IoC(Inversion of Control)란? DI는 말 그대로 '의존성 주입'이고, IoC는 '제어의 역전'이다. Spring 프레임 워크를 사용하기 전에 쌩 자바로 코딩을 하면 무언가(메서드나 객체)를 가져다 쓸 때 그 무언가가 있는 라이브러리 등을 가져다 쓴다고 미리 알려주고 써야된다. 예를 들면 자바 프로그램은 main() 에서부터 시작을 하는데 그 안에 있는 애들을 어디서 가지고 와서 사용하는지 명시해줘야 한다. IoC는 이렇게 메서드나 호출 작업을 개발자가 결정하는 것이 아니라 외부에서 결정되는 것을 의미한다! - 객체 지향 언어에서 ..

Web Server vs WAS (Web Application Server)

Web Server란? 웹 서버는 클라이언트로부터 HTTP 요청을 받아 HTML 문서나 각종 리소스(Resource)를 전달하는 컴퓨터 클라이언트는 주문을 하는 고객이라고 생각하고, 웹 서버는 주문을 받는 직원이라고 생각하시면 편함. 직원인 서버는 고객이 주문하기를 기다리는 것처럼 클라이언트의 요청을 기다리고, 고객이 HTTP 요청을 보냄. 요청을 보내면, 직원은 고객의 주문에 대한 상품을 만들어서 주는 것처럼 서버는 클라이언트의 요청에 대한 데이터를 만들어서 응답하는 것이라고 보면 됨. 예를 들어서, 네이버 페이지 같은 경우에는 html, css, 이미지 같은 걸로 되어있을 텐데, 얘네들을 정적인 데이터라고 하고, 웹서버는 클라이언트에게 정적인 데이터만 넘겨줄 수 있음. 이미 만들어져 있는 정적인 데이..