Categories

🔥 Projects 🔥

[AWS] 하나의 EC2 인스턴스에 client, server 프로젝트 전부 배포하기! - React + Spring boot

[AWS] 한 EC2 인스턴스에 frontend, backend 전부 배포하기! - React + Spring boot 오늘은 하나의 EC2 인스턴스에 2개의 프로젝트를 배포하는 법에 대해 설명하겠습니다. 저도 EC2에 프로젝트를 배포하는 방법을 공부하기 위해 검색을 하고, 책까지 구매하여 공부하였으나, 두 프로젝트를 하나의 인스턴스에 넣고 배포하는 법에 대한 자세한 정보를 얻기는 어려웠습니다. (보통은 한 가지 프로젝트를 올리는 방법만 적혀 있습니다 ㅠ.ㅠ) 그래서 여기 저기서 정보들을 얻고 취합하고.. EC2에 배포한다는 것의 실제적인 의미를 파악하는 과정들을 통해 성공할 수 있었습니다. 기본적으로 EC2 인스턴스를 만든 후, putty를 통해 접속한 상황이라고 가정하겠습니다.(windows) 만드는..

🔥 Projects 🔥

FaaS와 비동기 처리로 브라우저의 부담 줄여주기

FaaS와 비동기 처리로 브라우저의 부담 줄여주기 결론: 평균 30.0651초 -> 0.988초로 약 30배 속도 개선됨 1. 랭킹 페이지에서 순위권 유저 프로필 사진 보여주기 매니에서 프로모션을 위해 유저들간의 순위를 매기고 보여주는 랭킹 페이지를 구현하고 있었다. 예를 들어 친구 초대를 많이 한 사람, 이번 달 가장 많이 문제를 푼 사람 등 순위를 메겨 선물을 주는 프로모션을 진행할 수도 있기 때문이다. 한번에 1등 부터 100등까지 유저의 순위를 보여주도록 기획했는데, 로그인한 유저의 순위까지 보여주려면 100 ~ 101개의 유저 정보를 한번에 보여줄 수 있어야 했다. 문제는 순위별 유저들의 정보를 보여줄 때, 유저들의 프로필 사진을 전부 보여주어야 한다는 점이였다. 프로필 사진을 보여주는 것이 왜..

🌱 Java & Spring 🌱

[Error] Java 실행 명령어와 cannot find symbol 에러

Java 실행 명령어와 cannot find symbol 에러 java 파일을 컴파일하고 실행할 때, java Main.java와 같은 명령어로 실행할 수 있습니다. 그런데 이번에 자바 공부를 하며 파일을 실행시키는 과정에서 아래와 같은 error: cannot find symbol에러를 마주했습니다. 아마도 실행시킨 파일인 TcpIpClientSeparate.java에서 이용한 Sender Receiver class가 같은 패키지 내의 TcpIpServerSeparate.java라는 다른 파일에 선언 되어 있는데, 이걸 불러오지 못 해서 발생하는 문제인 것 같습니다. 해당 에러를 해결한 내용들을 공유하기 위해 글을 써 본다. 다른 이유로 해당 에러를 마주한 사람은 굳이 읽을 필요가 없습니다. error..

🚀 PS! 🚀/🤖 Algorithm 🤖

[자료구조] Trie - 트라이

[자료구조] 트라이 트라이는 기본적으로 문자열의 구성 character를 노드로 만든 만든 트리입니다. 전처리 과정이 매우 헤비한 대신, 탐색이 매우 빠릅니다. 문자열에서 이어지는 문자의 시퀀스에 따라 새로운 노드를 만들어 다음 문자를 넣어주고 또 그 노드에 다음 철자의 노드를 만들어 주는 식으로 진행합니다. 이렇게 해주면 접두사가 겹치는 문자열들에 대해 빠른 탐색이 가능하겠죠? 포인트는 문자열 끝의 구분인데, 노드에서 bool이나 다른 여러 장치를 이용해서 현재 노드가 어떤 문자열의 끝 문자임을 알리는 기능을 만들어야합니다. 이를 통해 어떤 문자열이 실제로 존재하는지 파악 할 수 있습니다. 트라이는 정말 정말 빠른 시간 내에 탐색을 진행 할 수 있습니다. 실제로 거의 탐색을 안 하는거나 마찬가지입니다...

🚀 PS! 🚀

[백준 130505] 두 수 XOR - 트라이 문제

[백준 130505] 두 수 XOR [백준 130505] 두 수 XOR 두 수 XOR은 최대 1,000,000,000의 숫자들 10만개가 주어지고 그 중 XOR이 가장 큰 두 쌍의 XOR연산값을 2초 안에 구하는 문제이다. 당연히 수가 10만개가 되기 때문에 직접 XOR 연산을 해준다면 (10만^2/1억) 초 정도의 시간이 소요되기 때문에 시간초과가 된다. 해당 연산에 트라이를 적용하면 더 빠른 연산이 가능해진다. 기본적으로 이진수 연산을 위해 모든 수를 이진수 문자열로 만들어 준 후, 그 수들로 트라이를 만들어 준다. 이후 모든 수들로 한번 더 탐색을 진행해준다. 이진수 XOR연산은 두 수가 같으면 0, 다르면 1을 결과로 갖는다. 넣어줬던 수들을 또 트라이에서 탐색하되, 지금 탐색중인 문자 (0 or..

✏️ Study ✏️

[Markdown] Markdown 문법 간단 사용법

Markdown 문법 본 글도 markdown으로 쓰여 있습니다 블로그에서는 많이 깨집니다. https://github.com/binary-ho/TIL-public/blob/main/Markdown/README.md 를 이용해주세요! [추천 익스텐션] Markdown all in one을 통해 미리 랜더링된 결과를 볼 수 있고(ctrl + shift + v), 일반 문서 편집기와 같은 명령어들을 이용할 수 있습니다. ex) ctrl + B로 bold체 변경 (2.8.2.6) Markdown Preview Enhance를 추가로 설치하면, Markdown all in one를 통해 만든 미리 보기의 배경을 하얀 색으로 바뀌 더 편하게 볼 수 있습니다. 1. Markdown 문법을 공부하는 이유 2. Mar..

🚀 PS! 🚀/🤖 Algorithm 🤖

[자료구조] C++ STL - Map과 C++ 적인 사용에 대하여 🗺️

1. About Map map은 제가 그리 자주 쓰는 자료구조는 아니지만, IT기업 코딩테스트 대비 과정에서 생각보다 Set과 Map의 이용이 잦았고, 정리가 필요함을 느껴 이렇게 정리하게 되었습니다. (굳이 굳이 굳이 직접 해시 함수를 만들어서 테이블을 이용하곤 했습니다.) map은 자료를 유일한 key와 하나의 value 쌍으로 저장하는 자료구조입니다. 정확히는 각 노드가 key, value 쌍으로 이루어진 'Tree'구조를 띄고 있습니다. key와 value의 타입은 서로 다를 수 있으며, 일반 map은 key 값을 오름차순 정렬하여 저장합니다. 이는 간단한 테스트를 통해 확인 할 수 있습니다. 위와 같이 내부적으로 key를 정렬하는 것을 확인할 수 있습니다. 그래서 수행 속도가 중요시 되는 테스트..

🚀 PS! 🚀

Input의 크기가 클 때, 코드로 파일 불러오는 Tip

C++에서 코드로 input 파일을 열 때 freopen함수를 쓰려고 하면 IDE에 따라 freopen_s를 쓰라고 귀찮게 할 때가 있다. 그럴때는 ifstream을 쓰는게 낫다. 코드는 아래와 같다 fstream을 include하고 아래와 같이 ifstream cin; cin.open("파일명"); 을 써주면 된다. 물론 인풋 파일은 소스코드 파일과 같은 폴더에 있어야한다. 위에 ios::sync_with_stdio(false); cin.tie(NULL);도 같이 적어주면 좋은데, cin의 속도를 줄여준다. (입력 속도를 줄여준다) 보통 입력을 이렇게까지 해서 불러오는 경우는 입력의 용량이 클 때이니 같이 적어주면 좋다요. 필요에 따라 cout내용도 많다면 cout도 적어주어서 속도를 줄여주면 되겠다.

🚀 PS! 🚀/🤖 Algorithm 🤖

[Algorithm] 벨만-포드 알고리즘 - 최단 경로 알고리즘 2 🏃‍♀️🏃‍♀️

벨만-포드 알고리즘(Bellman-Ford Algorithm)은 그래프 탐색의 최단거리 알고리즘 중 하나입니다. 잘 알려진 다익스트라, 플로이드-마샬 알고리즘과 달리 벨만-포드 알고리즘은 음수 가중치를 가진 그래프의 최단 경로를 찾아낼 수 있습니다. 또한 최단 거리 알고리즘에서 치명적인 음수 사이클의 존재도 알아차릴 수 있게 해줍니다. (짱짱 👍👍👍) 이 알고리즘은 저에게 조금 신선하고 재밌는 알고리즘이였습니다. 처음엔 이해도 잘 안 가서 고생했습니다 ㅠㅠ 그래서 제 딴에서는 이해하기 쉽게 알려드리고 싶지만 잘 되려나 모르겠습니다. 벨만-포드 알고리즘의 특징과 구현, 그리고 문제를 풀며 얻은 팁들을 소개해드리려 합니다. 잘 부탁드립니다. 🙏🙏🙏 (gd 스타일 ㅋ) 일단, 이 알고리즘의 특징은 기존의 그래..

🚀 PS! 🚀/🤖 Algorithm 🤖

[Algorithm] 다익스트라 알고리즘 - 최단 경로 알고리즘 1 🏃🏃

다익스트라 알고리즘은 최단 경로 알고리즘 중에 가장 기초가 되는 알고리즘입니다. 🏃🏃 그동안 최단거리를 구할 때 죽어라고 BFS를 이용해왔으나(제일 재밌는걸요), 가중치가 있는 상황에서는 항상 풀이가 까다로웠습니다. 저는 이제까지 BFS의 다음 노드 탐색 과정에서 가중치가 더 적은 노드의 탐색을 단순히 '코드 상으로 더 위쪽에' 작성함으로서 먼저 탐색하도록 했습니다. 이는 나름 괜찮은 방법이였지만, 당연히 한계가 있었습니다. 이럴 때 사용 할 수 있는 것이 '최단 경로 알고리즘'입니다. 가중치가 더 적은 쪽을 우선적으로 탐색하도록 하는 알고리즘이죠. 1. 다익스트라 알고리즘: 가중치가 있는 그래프 탐색의 최단 경로 찾기. 셋 중에 가장 빠름! 2. 벨만-포드 알고리즘: 음수 가중치가 있는 그래프 탐색의 ..

🚀 PS! 🚀

[백준 5719] 거의 최단 경로

https://www.acmicpc.net/problem/5719 5719번: 거의 최단 경로 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 장소의 수 N (2 ≤ N ≤ 500)과 도로의 수 M (1 ≤ M ≤ 104)가 주어진다. 장소는 0부터 N-1번까지 번호가 매겨져 있 www.acmicpc.net [백준 5719] 거의 최단 경로 (platinum 5) 거의 최단 경로 문제는 최단경로를 제외한 경로들 중 가장 짧은 경로를 찾아 그 길이를 출력하는 문제입니다. 최단 경로를 알아내는 과정이 여러번 필요할 것으로 예상되므로, 최단 경로 알고리즘 중 저에게 가장 익숙한 다익스트라 알고리즘으로 풀어보겠습니다. (저는 그래프 관련 알고리즘 중에 다익스트라가 제일 재미있는..

🚀 PS! 🚀

[백준 16933] 벽 부수고 이동하기 3 - 불꽃카리스마진호우!^^

16933번: 벽 부수고 이동하기 3 (acmicpc.net) 16933번: 벽 부수고 이동하기 3 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000), K(1 ≤ K ≤ 10)이 주어진다. 다음 N개의 줄에 M개의 숫자로 맵이 주어진다. (1, 1)과 (N, M)은 항상 0이라고 가정하자. www.acmicpc.net [백준 16933] 벽 부수고 이동하기 3 (gold 1) 위 문제는 벽 부수고 이동하기 1, 2를 푼 이후에 풀어보는 것을 추천합니다. 벽뿌이 1, 2에서 새로운 요소가 추가된 문제들이기 때문입니다. 벽뿌이 3은 벽뿌이 1, 2에서 '가만히 있을 수 있는' 기능과, 낮과 밤의 개념이 추가되었습니다. 위 두가지 기능을 어떻게 구현하였는지를 중점으로 설명하겠습니다. 일..

진호우!
'분류 전체보기' 카테고리의 글 목록 (2 Page)