쿠키란? 세션을 알기 위해선 먼저 쿠키(Cookie) 가 뭔지 알아야 한다. 쿠키는 크게 두가지 용도로 사용된다. 웹 서버가 사용자의 브라우저에 저장하여 서버에 요청할 때 전달하는 텍스트 파일 방문 기록등 브라우저에서 사용했던 정보들이 저장된 텍스트 파일 이 포스팅에서 주로 설명할 내용은 1번에 관한 내용이다. 서버에서 요청에 대한 응답 값으로 쿠키를 함께 보내줄 수 있다. 이 쿠키는 사용자의 브라우저에 저장된다. 그리고 이후 서버에 요청을 보낼 때 마다 이 쿠키를 함께 실어서 보낸다. 그러면 서버에서는 쿠키에 담긴 정보를 통해 여러가지 비즈니스 로직을 수행할 수 있다. 쿠키가 가장 많이 사용되는 예시는 로그인 이다. 사용자가 로그인에 성공하면 서버에서는 로그인에 성공했다는 의미로 쿠키 를 만들어 사용자..
Optional이란 Optional은 자바에서 제공하는 Wrapper 클래스이다. public final class Optional { private final T value; ... } 이렇게 T타입의 참조변수를 가지고 있다. 제네릭을 사용하여 null을 포함한 모든 종류의 객체를 저장할 수 있다. 이 객체가 필요한 이유는 다음과 같다. null을 직접 다루는 것을 위험하다. (NullPointerException 발생) 간접적으로 null을 다뤄 예외 위험을 피할 수 있다. null체크를 직접하려면 예외처리 관련 코드를 작성해야 한다. Object result = null; if (result != null) { System.out.println(result.toString()); } 이런식으로 사용..
스트림이란 스트림이란 다양한 데이터 소스를 표준화 된 방법으로 다루기 위한 방법이다. 자바에는 다양한 Collection Framework가 존재한다. 예를들어 List, Set, Map과 같은 것들이 이에 해당한다. 하지만 이 인터페이스 모두가 각각 성격이 달라 사용방법이 달랐기에 자바8부터 스트림이 등장하였고 이를 통해 표준화된 방법을 제공하고 있다. List, Set, Map과 같은 데이터 소스로 부터 스트림을 만들 수 있다. 스트림을 만들고 나면 그 이후부터는 표준화된 방식으로 작업을 처리하게 된다. 작업은 N번의 중간연산 과 한번의 최종연산 으로 이루어진다. 즉, 중간작업을 여러번 거쳐 우리가 원하는 데이터(스트림)로 바꾼다음 최종연산을 통해 우리가 원하는 데이터를 얻을 수 있다. 스트림으로 변..
스레드 풀을 사용하는 이유 병렬처리 작업이 많아지면 스레드의 개수가 증가할 수 있다. 스레드가 매우 많아지게 되면 스레드를 생성하는 작업과 스케쥴링 작업으로 인해 CPU와 메모리 사용량이 늘어나게 되며 결국 애플리케이션 성능이 급격히 저하될 수 있다. 만약 자바로 웹서버를 구성했고 하나의 요청마다 스레드를 생성하는 상황이라고 가정을 했을 때, 만약 수백 수천개의 요청이 들어온다면 스레드도 수백 수천개가 만들어질 것이다. 이렇게되면 요청이 많이 들어올 때 스레드수가많아지므로 애플리케이션 성능이 저하될 수 있다. 따라서 스레드 풀 을 통해 작업 처리에 사용되는 스레드를 제한된 개수만큼만 미리 생성할 수 있다. 최대 스레드의 개수를 정해놓고 작업큐에 들어오는 작업들을 스레드가 하나씩 맡아서 처리하게 된다. 즉..
스레드 우선 순위 동시성과 병렬성은 다르다. 동시성이란 하나의 코어에서 여러개의 스레드가 번갈아가며 실행하는 성질을 의미하며, 병렬성이란 멀티 코어에서 개별 스레드를 동시에 실행하는 것이다. 결과만 보았을 때는 동시성과 병렬성 모두 동시에 실행되는 것 처럼 보이지만 동시성 은 실제로는 하나의 코어에서 하나의 스레드만 실행하고 있고, 번갈아가면서 실행을 하고 있기에 동시에 실행하는 것 처럼 보이는 것 뿐이다. 만약 코어가 매우 많다면 모든 스레드를 멀티 코어에서 돌리면 가장 이상적인 멀티스레드 환경이 될 것이다. 하지만 실제로 코어의 갯수는 정해져 있고 스레드의 개수가 코어의 수보다 많을 경우 스레드 스케쥴링 을 통해 스레드를 어떤 순서로 동시성으로 실행할 것인지 결정하는 것이 필요하다. 스레드 스케쥴링에..
프로그램을 개발하다보면 main스레드 외에 추가적인 스레드가 필요할 때가 있다. 예를들어, 어떠한 데이터를 받아오면서 화면에 출력하는 작업을 동시에 하고자 할 때 하나의 스레드만 사용하게 된다면 모든 데이터를 받아오기 전까지는 화면에 출력하는 작업을 진행하지 못하게 된다. 이때, 데이터를 받아오는 스레드와 화면에 출력하는 스레드를 서로 분리한다면 위 작업을 동시에 실행할 수 있게된다. 이처럼 프로그램을 개발하다보면 멀티스레드 환경이 요구되는 상황이 발생할 수 있다. 자바에서 스레드를 생성하는 방법에는 크게 두가지가 있다. 첫번째는, Thread 클래스로부터 집적 생성하는 방법이며 두번째는, Thread 하위 클래스로부터 생성하는 것이다. Thread 클래스로부터 집적 생성 Runnable 인터페이스를 구..
객체복제란 원본 객체와 동일한 값을 가지는 새로운 객체를 생성하는 것을 말한다. 객체를 복제하는 이유에는 여러가지가 있을 수 있지만 가장 큰 이유는 원본 객체를 안전하게 보호하기 위함이다. 원본객체가 변경되어서는 안되는 작업일 경우 객체를 복제하여 복제된 객체를 가지고 작업을 수행한다면 원본객체는 아무런 영향을 받지 않기에 안전하게 데이터를 보호할 수 있다. 객체를 복제하는 방법에는 크게 얕은 복제 와 깊은 복제 두가지 방법이 존재한다. 두가지 방법 모두 자바의 Object 클래스에 존재하는 clone() 메소드를 이용한다. 우리가 어떠한 클래스를 만들 때 extends로 다른 클래스를 상속하지 않으면 이 클래스는 암시적으로 java.lang.Object 클래스를 상속하게 된다. 따라서, 자바의 모든 클..
자바 예외와 예외 클래스 에러와 예외는 다르다. 에러(ERROR)는 JVM실행에 문제가 생겼다는 것으로 JVM 위에서 실행되는 프로그램을 아무리 잘 만들어도 결국 실행이 불가능하다. 이것은 개발자가 대처 가능한 문제가 아니다. 반면에 예외는 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류를 말한다. 예외가 발생되면 프로그램이 곧바로 중단되는 점에서는 에러와 동일하지만 예외는 예외처리(Exception Handling) 을 통해 프로그램을 종료하지 않고 실행상태를 유지시킬 수 있다. 예외에는 일반예외와 실행예외가 존재한다. 일반예외는 컴파일러 체크 예외라고도 한다. 자바소스를 컴파일 하는 과정에서 예외처리 코드가 필요한지 검사한다. 만약 예외처리 코드가 없다면 컴파일 오류가..
- Total
- Today
- Yesterday
- java
- typeORM
- nodeJS
- 투포인터
- 스레드
- boj
- 중앙대학교
- 자바스크립트
- 백트래킹
- 구현
- 알고리즘
- 컴퓨터 통신
- 백준
- 자바
- 컴퓨터 구조
- 세그먼트 트리
- nestjs
- Computer Architecture
- 벨만포드
- nest.js
- 예외처리
- 시뮬레이션
- 재귀
- BFS
- 그래프
- node.js
- 그리디
- ReactNative
- 동적계획법
- dfs
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |