Spring Boot에서 WebSocket, STOMP을 사용해보자. STOMP란? STOMP는 Publish-Subscribe 방법을 지원한다. STOMP를 사용하지 않고도 WebSocket사용은 얼마든지 가능하지만 이 경우 직접 세션을 관리하는 등 추가 작업이 필요할 수 있다. STOMP를 사용하면 이런 작업을 보다 편리하게 이용할 수 있다. STOMP 설정 먼저 의존성을 추가하자. implementation 'org.springframework.boot:spring-boot-starter-websocket' 그 후에 WebSocketMessageBrokerConfigurer 의 구현체를 만들어 웹소켓 설정을 해야 한다. @EnableWebSocketMessageBroker @Configuration..
Github에서는 Issue라는 기능을 제공하고 있다. 이슈란 프로젝트를 진행하면서 생기는 모든 이슈를 말하며 그 종류에는 기능 추가, 버그 발생, PR 등 이 있다. 예를들어 로그인 기능 을 구현해야 한다면 로그인 기능 구현하기 가 하나의 이슈가 될 수 있는 것이다. 이런식으로 하나의 이슈를 생성하고, 그 이슈를 통해 작업이 어떤식으로 진행되는지 한 눈에 볼 수 있다. 이슈 생성하기 먼저 이슈를 생성하려면 이슈를 생성하고자 하는 레포지토리가 있어야 한다. test-repository 라는 레포지토리를 새로 만들었다. 이제 이슈를 생성해보자. 레포지 토리에 있는 Issues 탭에 들어간다. 이곳에서 New Issue 를 통해 이슈를 생성할 수 있다. 이곳에서 이슈의 이름과 내용을 설정할 수 있다. 간단하..
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) 을 통해 프로그램을 종료하지 않고 실행상태를 유지시킬 수 있다. 예외에는 일반예외와 실행예외가 존재한다. 일반예외는 컴파일러 체크 예외라고도 한다. 자바소스를 컴파일 하는 과정에서 예외처리 코드가 필요한지 검사한다. 만약 예외처리 코드가 없다면 컴파일 오류가..
git을 사용하다 폴더명을 변경할 일이 있어 폴더명을 변경하고 push했는데 원격 저장소에 결과가 제대로 반영되지 않았다. 예를들어 Login 이라는 폴더를 login 이라는 이름으로 변경했는데 이 사항이 반영되지 않았다. 내 로컬에서는 분명히 login 이라 되어있지만 코드를 받아본 사람은 이름이 바뀌지 않아서 수많은 에러를 뿜어내고 있었다. 원인 원인은 다음과 같다. Git은 OS단에서 이름바꾸기 를 변경사항으로 인식하지 않기에 생긴 문제였다. 이 문제를 해결하기 위해서는 Git에서 제공하는 명령어를 이용해야 했다. git mv oldName newName 명령어를 사용하면 폴더 이름 변경이 가능하다. 대소문자 변경 하지만 만약 git mv Login login 을 하면 제대로 결과가 반영되지 않는다..
- Total
- Today
- Yesterday
- typeORM
- boj
- nestjs
- 스레드
- dfs
- Computer Architecture
- 구현
- 그래프
- 예외처리
- 컴퓨터 통신
- 알고리즘
- nest.js
- 백준
- 컴퓨터 구조
- ReactNative
- 그리디
- 중앙대학교
- 벨만포드
- 자바
- 동적계획법
- java
- 투포인터
- 자바스크립트
- node.js
- 백트래킹
- 재귀
- BFS
- 세그먼트 트리
- 시뮬레이션
- nodeJS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |