[프로그래밍]
1) JVM
Java를 돌아가게하는 머신. Java 클래스 파일을 로드하고 바이트 코드를 해석하고, 메모리 등의 자원을 할당하고 관리하며 정보를 처리하는 작업 프로그램
2) 가비지 컬렉션
JVM에서 메모리를 관리해주는 모듈. heap메모리를 재활용하기 위해서 더이상 참조되지 않는 객체들을 메모리에서 제거하는 모듈
장점> 개발자가 직접 메모리를 정리하지 않아서 개발 속도 향상
단점 > 참조되지 않는 객체를 찾는 과정 (mark and sweep) 에서 스레드 잠시 중단되어서 성능이 떨어짐
3) 객체지향 프로그래밍(OOP)란 ?
사물같은 객체를 만들고, 그 객체로 부터 개발하고자하는 특징과 기능을 뽑아 프로그래밍
-> 재사용성과 변형가능성 높일수 있음
-> 절차지향 언어보다 실행속도 느림
4) 추상 클래스 vs 인터페이스
추상 클래스는 abstract로 지시자로 정의되며 추상메소드가 하나 이상 포함
인터페이스는 인터페이스 지시자로 정의되며 모든 메소드가 추상메소드
-> 점점 이 경계가 모호해짐..
차이는 목적 ! 추상은 기능 상속을 위한거고, 인터페이스는 함수의 구현을 강제해서 구현한 객체들이 같은 동작을 보장합니다.
5) RestAPI, RESTful
Rest 기반으로 서비스 API를 구현한 것.
= 자원을 URI로 표현하고, 자원에 대한 행위는 http method로 표현한 것
RESTful
=REST의 원리를 잘 따르는 시스템. 행위에 맞는 적절한 http method를 사용한 것
6) HTTP 응답코드
클라이언트가 서버에 응답을 요청해서 온 응답을 메세지를 분석하지 않고 한번에 알 수 있는 코드
100 : 조건부 응답(요청, 처리중)
200 : request 성공
300 : redirection - 사용자 이동
400 : 클라이언트 요청 오류/권한 없음
500 : 서버 오류(서버가 요청을 제대로 수행하지 못함)
HTTPS - SSL 과 TLS 암호화 프로토콜로 HTTP통신을 안전하게 하는 프로토콜
7) 라이브러리 vs 프레임워크
라이브러리와 프레임워크는 실행 흐음에 대한 제어 권한이 어디있는 지에 따라 달라짐
라이브러리 - 사용자가 흐름 제어
프레임워크 - 자체적으로 제어
프레임워크를 사용하면 개발자가 신경써야 할것들을 줄이는 제어역전이 적용됌 (IoC)
8) 동기 vs 비동기
동기 : 요청을 보내고 실행기 끝나면 다음 동작을 처리하는 방식
장>순서에 맞춰 진행되기 때문에 제어하기 쉽다
단>여러가지 요청을 동시에 처리할 수 없어 효율이 떨어짐
비동기 : 요청을 보내고 해당 동작의 처리 여부와 상관없이 다음 요청이 동작하는 방식
장>작업 완료 시간을 기다릴 필요가 없어서 자원을 효율적으로 사용할수 잇음
단>작업이 완료된 결과를 제어하기 어려움
9) NoSQL
NoSQL : not only sql 비관계형 데이터 베이스. 전형적인 테이블 구조 대신 Json문서와 같은 하나의 데이터 구조안에 데이터를 보관함.
확장성이 높아 실시간 웹 어플리케이션이나 빅데이터에 사용됨. 예시로는 MongoDB