본문 바로가기

분류 전체보기68

[개발] 채팅 구현에 대한 고찰 채팅 서버 구현 방법 채팅 구현 방법에는 크게 4가지가 있습니다.Polling 방식Long Polling 방식Streaming 방식WebSocket 방식1~3번 방법은 일반적인 RESTFUL API를 이용한 구현 방법입니다. 그래서 비교적 구현이 쉽습니다. 하지만, 이들의 특성상 클라이언트 → 서버로 데이터 전송이 가능하지만, 서버 → 클라이언트로 전송은 불가능합니다. 이를 극복하기 위해서 나온 방법이 바로 4번 WebSocket 방식입니다.1~3번은 100% 실시간성을 보장하지 않습니다. 당연히 일정시간 간격으로 채팅을 서버로부터 끌어오는 방식이기 때문에 그렇습니다. 그렇지만, 채팅이 주력 기능이 아니라서 100% 실시간성을 보장 안해도 된다던지, 아니면 유튜브 Live 채팅같이 동시다발적으로 여러명이.. 2024. 4. 30.
[배포] Docker로 Spring 서버 배포하기 Docker를 왜 쓰는가?AWS EC2 인스턴스에 배포한다던지, 컴퓨터와 노트북을 번갈아가며 개발하다던지, 이러면 각각 개발 환경이 틀려 매번 설정을 해주어야 한다. 하지만 Docker가 있다면? 귀찮게 그럴 필요 없이 쉽게 배포를 진행할 수 있다. Docker에 관해서는 추후 다루겠지만, 아직 작성하지 않은 관계로 아래 블로그를 참고해주면 좋겠다. https://beer1.tistory.com/category/DevOps/Docker 'DevOps/Docker' 카테고리의 글 목록 beer1.tistory.com 일반적인 Docker로 Spring 서버 배포하기 제일 직관직이고 간단한 방법부터 시작해보고자 한다. 우선 프로젝트 최상단에 Dockerfile을 하나 생성하고 아래처럼 작성해보자.FROM o.. 2024. 4. 7.
[소프트웨어공학] Chapter 3 - System Engineering 시스템이란?시스템은 목적을 달성하기 위해 서로 상호작용하는 구성요소로 구성된다. 크거나 작을 수 있고, 복잡하거나 간단할 수 있고, 실제로 존재하거나 컨셉츄얼하게 존재할 수 있다. 개미들, 우주와 같은 자연적인 시스템도 존재하고, 인간이 만든 시스템 역시 많이 존재한다. 인간이 만든 시스템은 실제로 존재하거나 개념적으로만 존재할 수 있다.Computer-based 시스템은 소프트웨어가 하위 시스템으로 포함된 인간이 만든 시스템이다. telecommunication 시스템, 이메일 시스템 등이 포함되어 있다. 몇몇 시스템은 software-only system이고, 몇몇 시스템은 소프트웨어와 하드웨어, 인간의 하위 시스템으로 구성된다.모든 시스템은 다음의 특성들을 공유한다.각 시스템은 상호관련되거나 상호작.. 2024. 3. 31.
[프로젝트 진행하기 #0] 시작하기전에 지금까지 여러 프로젝트들을 많이 시도하며 실패를 맛보고, 현재도 새로운 프로젝트 2개를 진행하고 있다. 하지만, 내가 한 것에 대해서 회고를 하지 않고, 앞만보고 달려나가면 내가 실수 했던 것들, 과정들, 겪었던 고충들을 다 까먹고 반복할 것이다. 따라서, 내가 프로젝트를 어떤 과정으로 진행하고 어떤 어려움을 겪었는지 되돌아보고, 기록하는 시간을 가져보고자 한다. 또한, 아마 대학교 3~4학년 학생들이라면 나처럼 여러가지 프로젝트를 해볼려고 시도를 많이들 할텐데, 프로젝트 경험이 아예 없다면 어떻게 시작할지 막막하고 많은 실수를 할 것이다. 내가 진행한 프로젝트 과정이 100% 정답은 아니겠지만, 어떻게 진행할지에 대해서 방향을 잡도록 도움이 됐으면 하는 마음에서도 글을 써본다. 해당 시리즈를 시작하기 .. 2024. 3. 30.
[백준] 2616번 - 소형기관차 (Java) 문제 https://www.acmicpc.net/problem/2616 2616번: 소형기관차 첫째 줄에 기관차가 끌고 가던 객차의 수가 입력된다. 그 수는 50,000 이하이다. 둘째 줄에는 기관차가 끌고 가던 객차에 타고 있는 손님의 수가 1번 객차부터 차례로 입력된다. 한 객차에 타고 있 www.acmicpc.net 알고리즘 다이나믹 프로그래밍 (DP), 누적합 우선, 각 열차의 승객의 누적합을 구해둔다. 계산식을 단순화하여 계산 속도를 빠르게 하기 위함의 목적이다. 그 다음 dp 배열을 세운다. dp[i][j] : 소형 기관차 i개로 j번째 칸까지 살펴봤을 때, 그 시점에서 최대로 운송할 수 있는 손님의 수 예를 들어, 객실 칸이 1~9번까지 있다고 해보자. dp[2][6]은 소형 기관차 2대로 .. 2024. 3. 18.
[소프트웨어공학] Chapter 2 - Software Process and Methodology 시스템 개발의 어려움 학부에서 소프트웨어 개발하는 것과 현업에서 개발하는 것은 큰 차이를 가지고 있음. 어떤 차이가 있어야 소프트웨어 프로세스와 방법론이 필요한지 이해할 수 있음. 많은 프로젝트들은 1년에서 몇년까지 아주 긴 개발 기간을 지니고 있음. 그렇기 때문에 향후 몇년간 어떤일이 일어날 것이고, 이를 어떻게 대비할 것인지 계획해야 함. 많은 프로젝트들은 다른 부서 또는 팀과 협업을 통해 개발이 이루어지는 경우가 많음. 따라서, 어떻게 상호 의존적인 부분으로 팀에게 할당하고, 이를 원활하게 합칠 수 있을까 생각해야됨. 예를 들어, 어떤 시스템을 개발한다 치면 백엔드 부서와 프론트 엔드 부사가 각각 나누어 개발하고, 이를 나중에 합쳐서 하나의 서비스로 운용해야됨. 부서 또는 팀들이 각기 다른 개발 프.. 2024. 3. 18.
[백준] 23818번 - 원수의 원수 (Java) 문제 https://www.acmicpc.net/problem/23818 23818번: 원수의 원수 사람의 수 $N \, (2 \leq N \leq 100,000)$과 관계의 수 $M \, (0\leq M \leq 100,000)$, 그리고 대답해야 할 관계의 수 $K \, (1\leq K \leq 100,000)$가 입력으로 들어온다. 그 후 $M$개의 줄에 걸쳐 $t \in \{0, 1\}$, $a$, $b$ $(1 www.acmicpc.net 알고리즘 이분 그래프, 깊이 우선 탐색(DFS) 모든 관계를 저장해두고, DFS로 타고타고 들어가면 된다. DFS로 타고 들어가면서 answer 배열에 관계를 저장해둔다. 이때, 동일한 그래프 내 있는 노드들의 answer 절대값은 동일하다. 예를 들어, 1 .. 2024. 3. 12.