본문 바로가기
반응형

분류 전체보기313

쿠키(Cookie) vs 세션(Session) 학부시절 인터넷 프로그래밍 과목을 수강하면서 쿠키와 세션에 대해 배웠었다. Web에 대해 공부하다 보니 기본적으로 알아야 할 것 같은데 너무 오래된 것 같아서 한번 다뤄보려고 한다. 먼저 쿠키와 세션이 왜 필요한 지부터 알아보자. ​대부분의 인터넷은 HTTP 프로토콜을 통해 통신한다. 그 이유는 HTTP 프로토콜이 비연결지향(Connectionless)적이며 상태가 없는(Stateless) 특징을 가지기 때문이다. ​비연결지향(Connectionless) 클라이언트가 서버에게 Request를 보내면, 서버는 클라이언트에게 Response를 보내고 접속을 끊음 HTTP1.1에서는 Keep-Alive 기능을 통해 한 번의 세션에서 여러 번 통신이 가능함 상태가 업음(Stateless) 주고받은 데이터에 대한.. 2021. 7. 24.
MVC 패턴 요새 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 책을 공부하고 있는데 간단한 웹 애플리케이션을 개발하는데 클래스들을 체계적으로 분리해서 개발을 진행하는 것을 볼 수 있었다. 상당히 낯선 방식이라 궁금해서 찾아봤더니 스프링을 이용한 웹 애플리케이션은 기본적으로 MVC라는 디자인 패턴을 토대로 설계 및 개발한다는 것을 알게 되었다. 책의 내용을 우선 따라 해보는 것도 좋지만 왜 저렇게 나눠서 관리하는지에 대한 의문이 들어서 한번 공부 및 정리해 보려 한다. ​ MVC는 Model-View-Controller의 약자로써 애플리케이션을 3가지 역할로 분리해서 개발하는 방법을 뜻한다. MVC 패턴을 알아보기 전에 왜 역할을 분리해서 개발을 하는 것일까? 이는 많은 이유가 있겠지만 개발 및 유지 보수가 편리하.. 2021. 7. 23.
HTTP 상태 코드 가끔씩 인터넷을 사용하다 보면 이러한 문구를 본 경험이 있을 것이다. 404 Not Found를 대충 이해해 보면 아마 요청한 웹사이트를 찾지 못했다고 알려주는 메시지인 것 같다. 웹에 대해서 공부하다 보니 한번 짚고 넘어가 보려고 한다. ​ 이전에 공부한 HTTP 프로토콜을 떠올려보자. HTTP 프로토콜은 클라이언트-서버 모델을 따르는 프로토콜로 클라이언트에서 서버에게 요청을 보내면 서버는 요청을 처리해서 클라이언트에게 응답을 해주는 방식이라고 하였다. 서버가 클라이언트에게 Response를 보낼 때 HTTP 상태 코드를 함께 보냄으로써 클라이언트 측에서 자신의 Request에 대한 처리가 잘 되었는지를 HTTP 상태 코드를 통해 쉽게 식별할 수 있도록 해주는 것이 바로 HTTP 상태 코드의 역할이다... 2021. 7. 23.
HTTP vs HTTPS 우리가 어떤 웹사이트에 접속하려고 URI를 타이핑하다 보면 항상 앞에 http:// or https://라는 것이 추가되는 것을 확인할 수 있다. 그렇다면 http는 어떤 것을 의미하는 걸까? ​HTTP는 Hypertext Transfer Protocol의 약자로 TCP/IP 위에서 작동하는 인터넷상에서 데이터를 주고받기 위한 서버/클라이언트 모델을 따르는 프로토콜이다. 서버/클라이언트 모델이란 클라이언트에서 서버에게 요청을 보내면 서버는 요청을 처리해서 클라이언트에게 응답을 해주는 방식을 뜻한다. 영어를 그대로 해석하면 하이퍼텍스트를 전송하는 프로토콜이다. 하이퍼텍스트는 노드(Node)와 링크(Link, 하이퍼링크)로 구성된 텍스트로써 링크를 통해 전달하는 텍스트를 의미한다. HTTP로 보낼 수 있는 .. 2021. 7. 23.
[Java] JVM, JRE, JDK Java 프로그래밍 문법을 배우기 전에 JVM, JRE, JDK 등에 대해서 먼저 배우게 된다. 이들의 차이점에 대해서 한 번 알아보도록 하자. ​ JVM(Java Virtual Machine) ​ JVM은 자바 가상 머신(Java Virtual Machine)의 약자로써 Java의 특징인 동일한 프로그램이 다양한 컴퓨터에서 실행이 가능하도록 해주는 친구이다. ​JVM은 자바 소스코드(.java)가 컴파일러에 의해 만들어지는 바이트 코드(.class)를 해석하여 실행할 수 있다. ​또한, JVM은 플랫폼에 의존적이다. 즉, 리눅스의 JVM과 윈도우즈의 JVM은 서로 다르다. ​단, 컴파일된 바이트 코드(.class)는 어떤 JVM에서도 동작할 수 있다. ​ ​JVM은 다음과 같은 역할은 수행한다. 바이트.. 2021. 7. 22.
[Java] 패키지를 import 하면 언제 어떤 메모리 영역에 적재될까? 어떤 언어든지 간에 프로그래밍을 하다 보면 언어 내에서 이미 작성해놓은 패키지(라이브러리)나 외부 패키지(라이브러리)를 활용하는 경우가 상당히 많다. ​당장 알고리즘 문제를 풀 때만 하여도 입출력, 정렬 부분은 직접 구현하지 않고 이미 구현해놓은 기능들을 가져다 쓴다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class Main { public static void main(String[] args) { try (BufferedReader br = new BufferedReader(new InputSt.. 2021. 7. 22.
[Java] 스레드 풀(Thread Pool)(2) 이번 글에서는 스레드 풀이 처리한 작업 결과를 애플리케이션에게 전달하는 작업 완료 통보 받기에 대해 알아보자. ​작업 완료 통보 받기는 블로킹 방식의 작업 완료 통보 받기, 작업 완료 순으로 통보 받기, 콜백 방식의 작업 완료 통보 받기, 3가지의 방법이 존재한다. ​ 먼저 블로킹 방식의 작업 완료 통보 받기이다. ​블로킹 방식은 요청한 결과가 올 때까지 기다리는 방식을 의미한다. 작업을 요청하는 메서드 중 submit() 메서드는 작업 처리 결과를 반환한다고 하였다. 이때 Future라는 객체를 반환한다. Future 객체는 작업 결과가 아니라 지연 완료(pending completion) 객체라고 불리며 작업이 완료될 때까지 기다렸다가 최종 결과를 얻기 위해서 사용된다. ​get() 메서드를 호출하면.. 2021. 7. 22.
[Java] 스레드 풀(Thread Pool)(1) 일반적으로 하나의 프로세스는 하나의 스레드를 가지고 작업을 수행하게 되지만 다수의 작업이 요청되면 CPU는 이를 보다 효율적으로 처리하기 위해서 멀티 스레드 방식이라고 부르는 다수의 스레드를 생성하여 병렬 작업으로 처리하게 된다. 문제는 매번 작업이 요청될 때마다 스레드를 생성하고 작업에 스케줄링하는 것은 CPU가 바빠지며, 메모리 사용량이 늘어나기 때문에 애플리케이션의 성능이 급격히 저하된다는 점이다. ​이러한 문제를 해결하기 위해서 스레드 풀(Thread Pool)이라는 것을 사용한다. ​ 스레드 풀은 스레드를 미리 생성해놓은 공간이라고 생각하면 쉽다. 작업 요청이 있을 때마다 매번 스레드를 생성하지 말고 제한된 개수만큼 스레드를 미리 생성해놓고 작업 큐(Queue)에 들어오는 작업들을 하나씩 스레드.. 2021. 7. 22.
[Java] 싱글톤 패턴(Singleton Pattern) 구현 방법 싱글톤 패턴은 생성(Creational) 패턴 중 하나로써 객체를 오직 하나만 생성하여 생성된 객체를 프로그램 어디에서나 접근하여 사용할 수 있도록 하는 패턴이다. ​간단히 말해서 애플리케이션 전체에서 단 하나의 객체만 생성하고 필요할 때마다 이 객체에 접근하여 사용하겠다는 의미이다. ​이번 글은 싱글톤 패턴을 구현하는 방법을 중점으로 정리할 것이기 때문에 싱글톤 패턴에 대해 좀 더 자세히 알고 싶다면 다음 글을 참고하길 바란다. https://sorjfkrh5078.tistory.com/107 싱글톤 패턴(Singleton Pattern) 싱글톤 패턴은 생성(Creational) 패턴 중 하나로써 객체를 오직 하나만 생성하여 생성된 객체를 프로그램 어디에서나 접근하여 사용할 수 있도록 하는 패턴이다. .. 2021. 7. 21.
반응형