fas

ALL

1. 그리디 현재 상태에서 보는 선택지 중 최선의 선택지가 전체 선택지 중 최선의 선택지라고 가정하는 알고리즘 1. 1.그리디 알고리즘의 핵심이론 그리디 알고리즘 수행 과정 해 선택 : 현재 상태에서 가장 최선이라고 생각되는 해를 선택한다. 적절성 검사 : 현재 선택한 해가 전체 문제의 제약 조건에 벗어나지 않는지 검사한다. 해 검사 : 현재까지 선택한 해 집합이 전체 문제를 해결할 수 있는지 검사한다. 전체 문제를 해결하지 못한다면 1로 돌아가 같은 과정을 반복한다 1.2 그리디 문제 BOJ https://www.acmicpc.net/problem/11047
⌨️ 채팅방 생성 및 빌더와 팩토리메서드 패턴에 대한 고민으로 마무리 채팅방 생성을 아직 DB와 연결하지 않았지만 `Entity` 에서 가져다가 쓰는 방식으로 DTO를 만들었고, 그 과정에서 자주 사용하던 팩토리 메서드 방식의 생성 패턴과, 빌더 방식의 생성 패턴에 대한 고민을 하며 마무리하였다. 1. ChatRoom 채팅방 엔티티와 DTO 구현 1.1. ChatRoom import com.example.chat.constant.MessageType; import com.example.chat.service.ChatService; import lombok.*; import org.springframework.web.socket.WebSocketSession; import java.util.HashSet;..
⌨️ Docs 확인과 통신 확인으로 마무리 당초에 공부해야지 하고 기획했다가 이것저것 하다가 많이 미루어져서 이제야 조금 코드를 끄적인다. 1. WebSocket 기존의 단방향 HTTP 프로토콜과 호환되어 양방향 통신을 제공하기 위해 개발된 프로토콜 일반 socket 통신과 달리 HTTP 80 포트를 이용하므로 방화벽에 제약이 없다. 접속까지는 HTTP 프로토콜을 이용 하고 이후에는 WebSocket 프로토콜로 통신 1.1. WebSocket 통신 방식 WebSocket 접속 과정은 TCP/IP 접속 그리고 WebSocket Established Handshake 과정으로 나눌 수 있다. i) WebSocket 열기 Handshake 클라이언트가 먼저 핸드셰이크 요청 -> 서버가 클라이언트에 응답 Han..
⌨️ 다익스트라 특정 노드에서 다른 노드들의 최단 거리를 구하는 문제가 주어졌을 때 다익스트라 알고리즘을 사용하여 문제 해결 가능 기능 특징 시간 복잡도(노드 수: V, 에지 수 :E) 출발 노드와 모든 노드 간의 최단거리 탐색 에지는 모두 양수 O(ElogV) 1. 다익스트라 알고리즘의 핵심 이론 1.1. 인접 리스트로 그래프 구현하기 그림 자리 다익스트라 알고리즘은 인접 행렬로 구현해도 좋지만 시간 복잡도 측면, N의 크기가 클 것을 대비해 인접 리스트를 선택하여 구현하는 것이 더욱 좋다. 그래프의 연결을 표현하기 위해 인접 리스트에 연결한 배열의 자료형은 (노드, 가중치)와 같은 형태로 선언하여 연결 1.2. 최단 거리 배열 초기화하기 최단 거리 배열을 만들고, 출발 노드는 0, 이외의 노드는 In..
· LIFE/취업
⌨️ 첫 채용설명회 그간 채용 설명회에 참석해 본 경험이 전무했던 나이지만, 지속적인 개발과 인프라에서의 고민에서 좋은 경험이 될 거라 생각하여 신청하였다. 1. 후기 1.1 . AWS 데이터 센터에서의 직업 우선 데센에서 일을 하는 것에 분업이 너무 잘되어있다는 느낌을 받았다. 일반적인 국내 업체의 경우 하나로 합쳐져 있는 역할이 세세하게 나뉘어 있었다. 1.2. 심각한 수준의 개발자 몰림 현상 프로그램 진행 중 RoundTable 이라고 현업 종사자 분과의 이야기를 나눌 수 있는 기회가 있었다. 다양한 이야기를 나누어 본 결과, 나의 결론은 이랬다 IT == 개발 현 상황이 그렇다. IT를 얘기 하면 당연하게도 개발자를 연상케 된 것 같다. 다양한 이유로 현재는 IT를 희망하는 청년층 인력이 대부분..
개요 1. Spring Boot + WebSocket, STOMP를 활용하여 채팅창 만들기 HTTP 방식이 아닌 WebSocket 방식이 필요한 이유를 이해하고, 해당 방식을 구현하여 실시간 채팅창 만들기 2. 하나의 서버에서 모든 서비스가 제공 되는 것이 아닌 분할하여 서비스를 제공하는 것을 목표로 함 하나의 Spring 서버에서 모든 서비스를 제공하는 것이 아니라, 각각의 서버를 따로 두어 필요하면 합치는 식으로 모듈 형태로 개발해보려 합니다. 예를 들어, 다른 서비스에 채팅창이 필요하다면, 이 채팅창 서비스를 결합한다든지 하는 과정 3. 이번 주 내로 채팅창 구현은 완료하고, 서비스 로직에 대하여 고민해 보거나, 고려할 만한 사항들에 대하여 체크하기 도메인을 작게하여 서비스를 완성시키는 것에 대해 ..
주기적으로 눈에 익혀 원할 때 바로바로 사용할 수 있도록 정리 1. GCD 유클리드 호제법 int GCD(int a, int b){ if(b==0) return a; else return GCD(b, a % b); } //최소공배수는 (a*b)/GCD(a,b) 2. 소수 판별 // 제곱근을 이용한 방법 boolean is_Prime(int Number) { // 1 은 소수가 아니다. if(Number == 1){ return false; } // 2 ~ Number의 제곱근까지 중 나누어 떨어지는 약수가 있는지 판별 // Number = 2 의 경우는 자연스럽게 for문을 검사하지 않게 됨 for(int i = 2; i
· LIFE/회고
⌨️ 연관 게시판 만들기 회고 과제 전형으로 진행했던 연관 게시판 만들기 회고입니다. README.md 에 작성 한 내용들이 있기에 repo 링크로 대체합니다 https://github.com/frontLine-kim/KJS_Board.git GitHub - frontLine-kim/KJS_Board: 게시판 생성 과제 게시판 생성 과제. Contribute to frontLine-kim/KJS_Board development by creating an account on GitHub. github.com 1. 피드백 명세 자체의 완성도 부족 -> 주어진 명세에 대해 100% 구현을 못했습니다. 해당 부분은 시간이 날 때마다 추가적으로 리팩토링 하며 이 글을 보완하려고 합니다. DB에서 비효율적인 활용 ..
· JAVA
⌨️ JVM의 구조와 JAVA의 작동 방식에 대해 간략한 정리 1. JVM 구조(메모리 영역) 자바의 작동방식 자바 애플리케이션 실행에서 Java 컴파일러가 먼저 동작 ->. java 파일을. class 파일로 컴파일 (컴파일타임) JVM을 실행하며 런타임 -> Execution Engine이 필요한 클래스들을 Class Loader에 요청 -> Class Loader가 바이트코드의 .class 에서 가져와 메모리에 적재 -> Execution Engine이 메모리에 올라온 코드를 실행하면서 애플리케이션이 실행 (위 내용을 반복) 1.1. Class Loader 자바 애플리케이션이 실행되기 이전 Java 컴파일러가 Java 소스 파일을. class 파일로 컴파일 이후 필요한 코드 파일들을 메모리에 올려야..
ckaanf
'분류 전체보기' 카테고리의 글 목록 (7 Page)