전체 글 147

서버 개발자로서 살아남기 - 메이븐(Maven)에 대해

🔍개요 메이븐은 자바로 웹 개발을 해본 사람이면 모를 수가 없는 단어이다. 나 또한 메이븐을 통해 빌드해 본 경험이 많기 때문에 알고있었다. 현업에서 하고 있는 프로젝트는 스프링 환경에 메이븐을 사용하고 있어서, 메이븐을 통해 install, package 등 다양한 기능을 수행하고 있는데 문득 메이븐에 대해 자세히는 알지 못한다는 생각이 들었다. 이번 기회에 메이븐의 정확한 정의와 하는일에 대해 공부와 정리를 해야겠다는 생각이 들었다. 🔍메이븐이란? 메이븐은 자바용 프로젝트 관리 도구이다. 좀 더 자세히는 프로젝트를 빌드, 패키지, 배포 등의 역할을 수행하고 나아가 각종 라이브러리들을 관리 해주는 도구이다. 메이븐을 사용하려면 메이븐은 2개의 설정 파일을 통해 관리가 가능하다. 이 파일들은 여러명의 개..

개발자로서 살아남기 - 젠킨스(JenKins)에 대해

개요 젠킨스(JenKins)는 어디서 많이 들어본 단어였다. 역시나 한번도 사용한 적이 없다가 팀에서 젠킨스를 활용하여 서버 빌드를 하기도하고, 언젠가는 한번 공부해보고 싶은 툴이였기 때문에 공부한 것을 정리하려 한다. 젠킨스를 알기전에.. SSAFY 프로젝트 당시 3명의 백엔드 개발자와 함께 개발을 진행했었는데 특정 날짜에 코드를 merge해서 돌려보는 작업을 했다. 당연하게도 그 날은 멘붕의 연속이였다. 3명의 commit이 합쳐지니 각자의 환경에서 제대로 작동했던 코드가 merge 후 안돌아가는것이였다. 젠킨스는 이러한 문제를 해결한다. commit을 감지하여 지속적, 자동적으로 통합을 진행하고 빌드,배포까지 하니, 여러 개발자가 코딩을 해도 빌드를 하기위한 특정 날짜를 정할 필요도 없고, 오류가 ..

서버 개발자로서 살아남기 - netstat 명령어에 대해

개요 서버 신입개발자로서 선배에게 업무를 배워가던 도중 서버를 실행하고 admin으로 서버에 대한 정보를 확인하는 과정에서 문제가 발생하였다. 문제를 같이 해결하던 도중 선배가 말하길 '앞으로 문제가 발생할 경우 터미널창과 netstat 명령어을 쓸일이 많을 것이다.'라는 얘기를 하였다. 기존에 진행했던 프로젝트는 하나의 서버와 하나의 클라이언트만 다뤄봤기 때문에 '클라가 안되면 연결 안됬나보다~' 라고 쉽게 생각하였다. 그러나 회사에 오니 많은 서버, DB, 사내 프로그램 등 상당히 많은 것들이 얽혀있었고, netstat 명령어에 대한 공부와 정리를 해야겠다는 생각이 들었다. netstat의 정의 netstat(network statistics)는 전송 제어 프로토콜, 라우팅 테이블, 수많은 네트워크 ..

백준 - 탑(C++)

문제 : https://www.acmicpc.net/problem/2493 [ 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net ](https://www.acmicpc.net/problem/2493) 문제설명 단순 반복문을 사용한 구현문제로는 제약조건 때문에 시간초과가 날 수 있다. 1개의 for문을 사용하되 문제를 풀 수 있는 방법 하면 stack이 생각나야한다. 알고리즘 1. for문을 이용하여 앞에서 부터 스캔하며 stack에 값을 push한다. 2. 조건문안에 stack이 비었으면 자신보다 큰 탑이 없..

백준 - 프린터 큐(C++)

구현코드 문제 : https://www.acmicpc.net/problem/1966 [ 1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net ](https://www.acmicpc.net/problem/1966) 문제설명 1. 제목 그대로 큐를 사용하면 된다. 자료구조을 이용하는 문제임을 쉽게 알 수 있다. 알고리즘 1. queue 와 중요도가 높은 문서를 알 수 있는 어떠한 가이드가 필요하다. 2. 가이드를 vector를 이용했다. vector를 정렬하여 높은 숫자가 빠지면 vector의 index도 증가하도록 하였..

백준 - 빗물(c++)

문제 : https://www.acmicpc.net/problem/14719 14719번: 빗물 첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치 www.acmicpc.net 문제설명 1. 푸는 방법이 굉장히 많다. 어떤 방법으로 푸느냐에 따라 난이도가 달라지는 것 같다. 알고리즘 1. 먼저 가장 높은 위치를 구한 뒤 왼쪽과 오른쪽으로 나눠 생각한다. 2. 왼쪽부터 가장 높은 위치 인덱스 까지 반복문을 진행한다. 조건은 최대값인 tempValue 보다 현재위치의 높이가 크거나 같을 때 최대인덱스인 tempIdx부터 현재 위치까지 반복문을 진행..

백준 - 가르침 (c++)

문제 : SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제설명 1. 조합문제이다. 21개의 조합 중(anta tica 제외) 제한시간이 1초는 중복제거를 한다면 충분히 가능한 시간이다. 알고리즘 1. 남극언어의 특징인 접두사와 접미사는 무조건 읽어야만한다.(anta tica) 2. 21개의 알파벳과 K - 5 만큼 조합한다. 3. 조합된 원소를 이용해 읽을 수 있는 단어를 체크한다. 주의사항 1. 남극언어 필수 알파벳 5개보다 가르칠 수 있는 개수가 적으면 읽을 수 있는 단어는 0이다. 2. DFS 함수 구현 시 idx 변수를 통해 했던 조합은 중복 제거를 해야한다. 안그러면 시간초과 발생 구현 bool a..

백준 - 괄호의 값 (C++)

문제 : https://www.acmicpc.net/problem/2504 2504번: 괄호의 값 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 www.acmicpc.net 문제설명 괄호가 나오는 문제이다. 괄호가 나오는 문제는 왠만하면 스택을 사용하고, 여기서는 temp 변수가 핵심이다. 알고리즘 1. 열린 괄호가 나오면 stack에 push하고 괄호 모양에 따라 temp에 특정 값을 곱해준다. 분배 법칙이라 생각하면 이해하기 쉽다. 2. 닫힌 괄호가 나오면 바로전에 닫힌 괄호에 맞는 열린괄호가 있으면 result에 값을 더해주고 조건이 틀리면 break..

C++ - MFC 기초 클래스

MFC 콘솔 응용 프로그램 C/C++ 언어에 대한 지식만 있으면 곧바로 실습 가능 상당수의 MFC 클래스 사용 가능 (유틸리티 클래스, 집합클래스, 파일 입출력 클래스 등) 알고리즘 개발 시 유용 (GUI 배제한 간편한 프로그래밍 prinf() 등을 이용한 편리한 확인 가능) 실행 파일 생성 과정 컴파일러(console.h, stdafx.h, console.cpp, stdafx.cpp, resource.h) -> console.obj, stdafx.obj 리소스컴파일러(console.rc, 각종리소스(문자열,아이콘), resource.h) -> console.res 컴파일러 + 리소스컴파일러 -> 링커(API & MFC 라이브러리 , C/C++ 라이브러리) -> 실행파일(console.exe) 데이터 타..

C++ - SDK와 MFC 프로그래밍

MFC 프로그램 기본 골격 응용프로그램 클래스 정의 메인(=프레임) 윈도우 클래스 정의 응용 프로그램 객체 선언 메시지 맵 선언 -> 메세지 맵 부분은 afxmsg.h에 정의되어 있다. CHelloApp theApp; ---> int WINAPI WinMain() //MFC 라이브러리 내부에 숨겨진 프로그램 실행 시작점 { ptr = ... // 응용 프로그램 객체의 주소값으로 변수 ptr 초기화 Bool CHelloApp::InitInstance() { InitInstance(); // 초기화: 각종 초기화 작업과 더불어 메인 윈도우 객체 생성 //-> 메인 윈도우 객체의 생성자에서 // 운영체제 수준의 실제 윈도우를 만든다. } CMainFrame::CMainFrame() { } void CMainF..

728x90