목록분류 전체보기 (82)
ballqs 님의 블로그
Java 기반 웹 애플리케이션 배포 방식은 크게 Jar 배포와 War 배포로 나뉜다. Spring Boot 등장 이후 JAR 방식이 표준이 되었지만, 실무에서는 여전히 WAR 기반 운영 환경도 많다. 또한 JAR 배포 안에서도 방식이 여러 종류로 존재한다. 파악한 내용을 블로그로 작성해두고자 한다. 1. JAR 배포와 WAR 배포의 개념 차이1.1 JAR(Java Archive)JAR 파일은 애플리케이션 전체를 하나의 실행 패키지로 묶은 형태다. Spring Boot에서는 내장 WAS(Tomcat/Jetty/Undertow)를 포함한 실행형 Boot Jar를 만들 수 있다.즉, JAR 자체가 서버 역할을 한다.1.2 WAR(Web Application Archive)WAR 파일은 외부 WAS에 배포되는 ..
오늘 풀어본 문제는 좀 많이 어려웠다. 프로그래머스의 [PCCP 기출문제] 2번 / 석유 시추 라는 문제를 풀어보았다.문제 설명[본 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제입니다.]세로길이가 n 가로길이가 m인 격자 모양의 땅 속에서 석유가 발견되었습니다. 석유는 여러 덩어리로 나누어 묻혀있습니다. 당신이 시추관을 수직으로 단 하나만 뚫을 수 있을 때, 가장 많은 석유를 뽑을 수 있는 시추관의 위치를 찾으려고 합니다. 시추관은 열 하나를 관통하는 형태여야 하며, 열과 열 사이에 시추관을 뚫을 수 없습니다.예를 들어 가로가 8, 세로가 5인 격자 모양의 땅 속에 위 그림처럼 석유가 발견되었다고 가정하겠습니다. 상, 하, 좌, 우로 연결된 석유는 하나의 덩어리이며, 석유 덩어리의 크기는 덩어리에..
오늘도 마찬가지로 풀어본 문제는 프로그래머스의 서버 증설 횟수 라는 문제를 풀어보았다.문제 설명당신은 온라인 게임을 운영하고 있습니다. 같은 시간대에 게임을 이용하는 사람이 m명 늘어날 때마다 서버 1대가 추가로 필요합니다. 어느 시간대의 이용자가 m명 미만이라면, 서버 증설이 필요하지 않습니다. 어느 시간대의 이용자가 n x m명 이상 (n + 1) x m명 미만이라면 최소 n대의 증설된 서버가 운영 중이어야 합니다. 한 번 증설한 서버는 k시간 동안 운영하고 그 이후에는 반납합니다. 예를 들어, k = 5 일 때 10시에 증설한 서버는 10 ~ 15시에만 운영됩니다.하루 동안 모든 게임 이용자가 게임을 하기 위해 서버를 최소 몇 번 증설해야 하는지 알고 싶습니다. 같은 시간대에 서버를 x대 증설했다면..
연달아서 풀어본 문제는 프로그래머스의 택배 상자 꺼내기 이라는 문제를 풀어보았다.문제 설명1 ~ n의 번호가 있는 택배 상자가 창고에 있습니다. 당신은 택배 상자들을 다음과 같이 정리했습니다.왼쪽에서 오른쪽으로 가면서 1번 상자부터 번호 순서대로 택배 상자를 한 개씩 놓습니다. 가로로 택배 상자를 w개 놓았다면 이번에는 오른쪽에서 왼쪽으로 가면서 그 위층에 택배 상자를 한 개씩 놓습니다. 그 층에 상자를 w개 놓아 가장 왼쪽으로 돌아왔다면 또다시 왼쪽에서 오른쪽으로 가면서 그 위층에 상자를 놓습니다. 이러한 방식으로 n개의 택배 상자를 모두 놓을 때까지 한 층에 w개씩 상자를 쌓습니다.위 그림은 w = 6일 때 택배 상자 22개를 쌓은 예시입니다.다음 날 손님은 자신의 택배를 찾으러 창고에 왔습니다. 당..
오늘 풀어본 문제는 프로그래머스의 유연근무제 이라는 문제를 풀어보았다. 문제 설명프로그래머스 사이트를 운영하는 그렙에서는 재택근무와 함께 출근 희망 시각을 자유롭게 정하는 유연근무제를 시행하고 있습니다. 제도 정착을 위해 오늘부터 일주일 동안 각자 설정한 출근 희망 시각에 늦지 않고 출근한 직원들에게 상품을 주는 이벤트를 진행하려고 합니다.직원들은 일주일동안 자신이 설정한 출근 희망 시각 + 10분까지 어플로 출근해야 합니다. 예를 들어 출근 희망 시각이 9시 58분인 직원은 10시 8분까지 출근해야 합니다. 단, 토요일, 일요일의 출근 시각은 이벤트에 영향을 끼치지 않습니다. 직원들은 매일 한 번씩만 어플로 출근하고, 모든 시각은 시에 100을 곱하고 분을 더한 정수로 표현됩니다. 예를 들어 10시 1..
Java라는 언어를 알고 C#에 접근을 했더니 익숙하면서도 좀 다른 느낌을 받았다.다만 익숙했기 때문에 조금의 이질감만 공부를 더하면 적응하는데 시간이 얼마 안걸리는 듯 했다.이에 진행하면서 몰랐던 부분을 아래와 같이 정리하고자 한다. 1. 이벤트 핸들러에서 (s, e) => {} 는 필수인가?C#에서는 버튼 클릭 같은 이벤트를 처리할 때 델리게이트(delegate) 방식으로 이벤트 핸들러를 등록한다.this.BtnSave.Click += (s, e) => { this.BtnSaveClick(); };여기서 s, e 는 이벤트 핸들러의 매개변수이다.s 는 이벤트가 발생한 객체(Sender)e 는 이벤트에 대한 추가 정보가 담긴 EventArgs 객체이벤트 핸들러는 정해진 시그니처를 따르기 때문에 (s ,..
C#에 대해서 작업해야 할 것이 생겼고 Window Form으로 만들어진 부분을전체 반복문으로 돌면서 RadioButton을 찾고 Check 해야하는 로직이 필요했다. 작업을 진행하게 된 툴은 Microsoft Visual Studio 이며 이 툴 기반으로 그리는 것을 했다. 코드private void RadioButtonAllCheck(Control parent, string pattern){ // control를 전부 돌면서 찾기! foreach (Control control in parent.Controls) { // panel if (control is Panel panel) // Panel 기준으로 돌기 { // panel..
강의를 보면서 Elasticsearch를 설치 따라 해보면서 정리한 글이라 작성해봅니다. ElasticSearch 설치를 Oracle VM VirtualBox 를 사용하여 진행했습니다. Oracle VM VirtualBox링크작성자는 Window 환경이라서 Window 버전을 다운로드하여 진행했습니다. Ubuntu링크Ubuntu 22.04버전을 다운로드 했고 받으면 7z 형식으로 압축되어 있는데 이는 압축 풀수 있는 프로그램으로 해제합시다. VM VirtualBox에 새로 추가하기 이름 : 가상 머신 이름폴더 : 해당 가상머신 경로ISO 이미지 : 선택안함종류 : Linux버전 : Ubuntu (64-bit) 설정해서 다음으로 넘어가면기본 메모리는 4GB 정도가 적당하다고 합니다.프로세서는 CPU사..
오늘 풀어본 문제는 프로그래머스의 미로 탈출 이라는 문제를 풀어보았다.문제를 보자마자 DFS , BFS 알고리즘 쪽으로 풀면 될거라고 생각했다.문제 설명1 x 1 크기의 칸들로 이루어진 직사각형 격자 형태의 미로에서 탈출하려고 합니다. 각 칸은 통로 또는 벽으로 구성되어 있으며, 벽으로 된 칸은 지나갈 수 없고 통로로 된 칸으로만 이동할 수 있습니다. 통로들 중 한 칸에는 미로를 빠져나가는 문이 있는데, 이 문은 레버를 당겨서만 열 수 있습니다. 레버 또한 통로들 중 한 칸에 있습니다. 따라서, 출발 지점에서 먼저 레버가 있는 칸으로 이동하여 레버를 당긴 후 미로를 빠져나가는 문이 있는 칸으로 이동하면 됩니다. 이때 아직 레버를 당기지 않았더라도 출구가 있는 칸을 지나갈 수 있습니다. 미로에서 한 칸을 ..
부트캠프를 통해 다양한 기술들을 배우고 실습하며, 최종 프로젝트로 실시간 맛집 예약 서비스를 개발하게 되었습니다. 이 서비스는 최근 외식 수요 증가로 긴 대기시간이 대두되었고 음식점 앞에서 직접 기다리는 불편함을 줄이고, 실시간으로 남은 대기 순서를 확인할 수 있게 하여 요율적이고 편리한 외식 경험을 제공하자는 취지로 시작했습니다. 프로젝트의 핵심 기능 중 하나는 웨이팅 대기열 시스템입니다. 사용자가 음식점에 웨이팅을 걸면 발권번호를 받아서 대기 상태에 들어가며 음식점에서 이를 확인하고 입장할 수 있도록 돕는 시스템입니다. 그러나 초기 개발 단계에서 발권번호 중복 및 데이터 불일치 문제가 발생하면서 동시성 제어에 대한 고민이 시작되었습니다. 처음에는 단순하게 DB CRUD 방식으로 구현했으나 높은 트래픽..