전체 글 115

[Network] Get vs Post

사용자가 서버에 요청을 보내는 방법인 HTTP Method에는 GET방식과 POST 방식이 있습니다. GET과 POST? 처음 들었을 땐 역시나 이게 뭐선소린고?싶었는데,,. 웹 개발자라면 당연히 알아야 하는 사항이라 포스팅해 봅니다. GET 방식 특정 정보를 가져와서 조회하기 위해서 사용되는 방식입니다. 즉, 데이터를 요청할때만 사용됩니다. 특징 요청 URL에 key와 value 쌍으로 변수와 값을 포함시켜 요청한다. 데이터를 헤더에 포함하여 전송한다. URL에 데이터가 노출되어 보안에 취약할 수 있다. 캐싱이 가능하다. 브라우저 히스토리에 남는다. GET방식으로 요청할 때는 요청 URL에 파라미터를 포함하여 보냅니다. 요청 URL은 무한정 길 수 없으므로 요청하는 데이터 양에 한계가 있습니다. 길이 ..

Network 2021.06.03

[Java] 컴파일러 vs 인터프리터 vs JIT compiler

자바를 공부하다보면 JIT compiler 에 대해 들어보셨을거에요. 그냥 컴파일은 뭐고 인터프리터는 뭘까요? 이것들이 무엇인지! 그리고 JIT 와는 어떻게 다른지 알아보겠습니다. 개발자가 작성하는 코드는 고레벨 언어라고 합니다. 컴퓨터는 이해하지 못하고 사람은 쉽게 이해할 수 있는 언어이죠. 이를 컴퓨터가 이해하기 위해서는 저레벨 언어인 기계어로 변환이 되어야 합니다. 이를 위한 방법에는 대표적으로 두 가지가 있는데 하나는 컴파일 방식, 다른 하나는 인터프리터 방식입니다. 컴파일 방식 먼저 컴파일이란 특정 프로그래밍 언어로 된 원래 소스 파일(원시코드)을 다른 프로그래밍 언어(목적코드)로 옮기는 언어 번역 프로그램입니다. 원시코드에서 목적코드로 옮기는 과정을 컴파일 한다고 말합니다. 작성된 소스코드를 ..

Java 2021.05.31

프레임워크 vs 라이브러리

Framework 프레임워크는 뼈대나 기반구조를 뜻합니다. 제어의 역전 개념이 적용된 대표적인 기술입니다. 소프트웨어에서의 프레임워크는 '소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합' 이라 할 수 있습니다 통합성, 일관성의 부족이 발생되는 문제를 해결할 방법중 하나라고 할 수 있습니다. 프로그래밍을 진행할 때 기본 구조를 제공해주기 때문에 프레임워크를 사용하는 프로그래머는 이 프레임워크의 뼈대 위에서 코드를 작성하여 프로그램을 개발하면됩니다. 프레임워크는 완성된 제품이 아닌 완성된 제품을 만들기 위해서 개발자를 도와주는 또는 기반이 되는 역할을 합니다. 프레임워크는 뼈대나 기반구조를 뜻하는데, Application 개발 시 필수적인 코드, 알고리즘, 데이터베이스 연동..

Spring 2021.05.29

RDB vs NoSQL

RDBMS(Relational Database Management System) 관계형 데이터베이스를 생성하고 수정, 삭제 관리할 수 있는 소프트웨어 RDB 관계형 데이터 모델에 기초를 둔 데이터베이스 외래 키를 사용하여 테이블들 간의 관계를 나타내고 외래키를 이용하여 join을 할 수 있습니다. 관계형 데이터 모델 데이터를 구성하는데 필요한 방법 중 하나로 모든 데이터를 2차원 테이블 형태로 표현합니다. NoSQL(Not Only SQL) RDB 형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술을 의미하고 있습니다. 테이블 간 관계를 정의하지 않습니다. 데이터 테이블은 단지 하나의 테이블이며 테이블 간의 관계를 정의하지 않아 일반적으로 테이블 간 join이 불가능합니다. NoSQL의 등장..

SQL 2021.05.25

[Java] JVM 구조와 원리

JVM은 Java Virtual MAchine의 약자 입니다. OS와 자바 프로그램 사이에서 프로그램이 실행되는데 필수적인 환경을 제공해 줍니다. JVM은 크게 Garbage collector, Execution Engine, Class Loader, Runtime Data Area 4개의 영역으로 구성되어 있습니다. 또 Runtime Data는 Method Area, Heap Area, Stack Area, PC Register, Native Method Stack으로 구성되어 있습니다. JVM의 대표적 기능은 다음과 같습니다. 1. 운영체제에 상관없이 어디서든 자바 코드가 실행될 수 있게 한다. 2. GC(Garbage Collectoin) 기능을 제공한다. JVM 구조 Java Compiler Ja..

Java 2021.05.23

[Java] Static 변수, static 메소드

static(정적)은 '고정된'이라는 의미를 가지고 있습니다. 변수나 메소드 앞에 static 키워드를 붙여서 static 변수나 static 메소드를 만들 수 있습니다. 이 둘을 정적 멤버 또는 클래스 멤버라고도 합니다. 정적 멤버는 객체에 속한 것이 아니고 클래스에 속합니다. 따라서 객체 간에 정적 멤버를 공유할 수 있습니다. 메모리 사용을 최대한 늦추기 위해 클래스가 처음으로 사용될 때 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재합니다. 처음으로 사용될 때라는 것은 다음 세 가지 중 하나입니다. 클래스의 정적 속성(정적 변수, static{} 블록)을 사용할 때 클래스의 정적 메서드를 사용할 때 클래스의 인스턴스를 최초로 만들 때 이 때, 클래스별로 정적 멤버가 관리됩니다. 따라서 클..

Java 2021.05.23

[Java] String, StringBuffer, StringBuilder

자바에는 문자열을 저장하고 관리하는 클래스 중에 String, StringBuffer, StringBuilder가 있습니다. 이 클래스들의 차이점을 알아보겠습니다. String (immutable) vs StringBuffer (mutable), StringBuilder (mutable) String 객체는 한 번 생성되면 그 인스턴스의 메모리 공간은 절대 변하지 않아요(immutable) 반대로 StringBuffer와 StringBuilder는 가변성을 가집니다. String str = "I love" str += "you" str 변수가 가르키는 "I love" 문자열에 "you" 문자열이 더해진 것이라고 생각 할 수 있지만 str 변수는 "I love you"라는 새로운 메모리 영역을 가리키게 변..

Java 2021.04.22

[Algorithm] 시간복잡도 Big-O 표기법

시간복잡도(time complexity) 시간복잡도(time complexity)란 가장 널리 사용되는 알고리즘의 수행 시간 기준입니다. 알고리즘이 실행되는 동안 수행하는 기본적인 연산의 수를 입력의 크기에 대한 함수로 표현한 것입니다. 기본적인 연산이란 더 이상 쪼갤 수 없는 최소 크기의 연산이라고 생각하시면 됩니다. 예를 들어 다음은 기본적인 연산이라고 볼 수 있습니다. 두 부호 있는 32비트 정수의 사칙연산 한 변수에 다른 변수 대입하기 가장 깊이 중첩된 반복문의 내부에 있는 기본적 연산들은 더 쪼갤 수 없기 때문에 이것이 시간 복잡도의 대략적인 기준이 됩니다. 시간복잡도가 높다 입력의 크기가 증가할 때 알고리즘 수행 시간이 더 빠르게 증가한다는 의미입니다. 시간복잡도가 낮다고 언제나 더 빠른것은 ..

Algorithm 뽀개기 2021.04.15

[Python] 순열, 조합

파이썬에서 만들어준 표준 라이브러리 itertools를 사용할 수 있다. 조합 combinations(iterable 객체, r) 조합을 구할 때 사용되는 메소드로 iterable 객체에서 r개를 뽑아 조합을 만든다. 한 리스트에서 중복을 허용하지 않는 모든 조합의 경우의 수를 구한다. from itertools import combinations mylist=[1,2,3,4] combi = list(combinations(mylist,2)) print(combi) # 결과 # [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)] 순열 permutations(iterable 객체, r) iterable 객체에서 중복을 허용하여 r개를 뽑아 모든 경우의 수를 구한다. fr..

python 2021.04.06

[Python] zip 함수

ZIP zip 함수는 여러개의 순회 가능한 객체를 인자로 받고 각 객체가 담고 있는 원소를 튜플 형태로 차례로 접근할 수 있는 반복자(iterator)를 반환합니다. 간단한 예제입니다. numbers = [10, 20, 30] letters = ["A", "B", "C"] for pair in zip(numbers, letters): print(pair) 실행결과 (10, 'A') (20, 'B') (30, 'C') 위 코드를 보면 numbers 리스트와 letters 리스트를 zip()함수에 넘겨서 호출 후에 for 문으로 zip()함수의 반환값을 대상으로 루프를 돌면서 튜플을 출력하고 있습니다.

python 2021.04.01