파티셔닝(Partitioning)이란?파티셔닝이란 데이터베이스를 여러 부분으로 분할하는 것이다. VLDB(Very Large DBMS)와 같은 하나의 DBMS에 너무 큰 테이블이 들어가면서 용량과 성능 측면에서 많은 이슈가 발생할 때 파티셔닝 기법을 이용해 해결할 수 있다. 즉, 파티셔닝은 큰 테이블이나 인덱스를 작은 파티션(Partition) 단위로 나누어 관리하는 기법을 뜻한다. 파티셔닝은 데이터베이스에서 중요한 튜닝 기법으로, 데이터가 너무 커져서 조회하는 시간이 길어질 때 또는 관리 용이성, 성능, 가용성 등의 향상을 이유로 행해지게 된다. 이러한 파티셔닝을 이용하면 다음과 같은 이점을 얻을 수 있다. 1. 성능 (Performance)특정 Query의 성능을 향상시킬 수 있다. 대용량 Da..
스프링 패키지 구조 스프링 패키지를 나눌 때 전체적인 그림은 일반적으로 [그림 1]과 같다. 이렇게 계층을 나누어 관리하는 것이 유지 보수하기에 용이하며 디버깅하기도 쉽다. DTO, DAO, Repository 등 각각의 기능과 역할에 대해서 알아보자. Entity란? Entity는 DB의 테이블에 존재하는 Column들을 필드로 가지는 객체를 뜻한다. Entity는 DB의 테이블과 1대1 대응이며, 테이블에 가지지 않는 칼럼을 필드로 가져서는 안 된다. 또한 Entity 클래스는 다른 클래스를 상속받거나 인터페이스의 구현체여서는 안되고 순수한 데이터 객체인 것이 좋다. (사실 중복되는 내용이 있을 경우 baseEntity를 만들어 상속할 수 있다) 예를 들어 DB의 Employee 라는 테이블에 id,..
문제 https://programmers.co.kr/learn/courses/30/lessons/72410?language=java 코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 programmers.co.kr 풀이 문제에 주어진대로 구현하면 되는 아주 간단한 문제이다. 코드를 보면 충분히 이해할 수 있다. 코드 class Solution { public String solution(String new_id) { // 1단계 String answer = new_id.toLowerCase(); // 2단계 String temp = "..
웹 서버(Web Server) 웹 서버란 HTTP 프로토콜을 기반으로 클라이언트가 웹 브라우저에서 어떠한 요청을 하면 그 요청을 받아 정적 컨텐츠를 제공하는 서버이다. 정적 컨텐츠란 단순 HTML 문서, CSS, 이미지, 파일 등 즉시 응답 가능한 컨텐츠이다. 이때 웹 서버가 정적 컨텐츠가 아닌 동적 컨텐츠를 요청받으면 WAS에게 해당 요청을 넘겨주고, WAS에서 처리한 결과를 클라이언트에게 전달하는 역할도 해준다. 이러한 웹 서버에는 Apache, NginX 등이 있다. WAS(Web Application Server) WAS란 DB 조회 혹은 다양한 로직 처리를 요구하는 동적 컨텐츠를 제공하기 위해 만들어진 Application 서버이다. HTTP 프로토콜을 기반으로 사용자 컴퓨터나 장치에 애플리케이..
문제 https://www.acmicpc.net/problem/2140 2140번: 지뢰찾기 지뢰찾기는 N×N에서 이뤄지는 게임이다. 보드의 곳곳에는 몇 개의 지뢰가 숨겨져 있고, 지뢰가 없는 칸에는 그 칸과 인접(상하좌우 및 대각선)해 있는 8개의 칸들에 몇 개의 지뢰가 숨겨져 있는 www.acmicpc.net 풀이 이 문제는 구현 + 그리디 알고리즘 문제이다. 배열의 테두리에서 지뢰를 넣을 수 있는 곳을 모두 체크해야 한다. 이때 8방향을 조사해서 지뢰를 넣을 수 있는 곳은 '*'로 표시해두고, 넣을 수 없는 곳이라면 '-'로 표시해두었다. 또한 이미 '*'로 표시되어 있다면 넣을 수 있는 지뢰의 개수를 1씩 감소시켰다. 마지막에 '*' 개수를 세고, 주의해야 할 점은 '#'으로 남아 있는 부분도 c..
HTTP란? HTTP(Hyper Text Transfer Protocol)는 인터넷에서 주로 사용하는 데이터를 송수신하기 위한 프로토콜이다. HTTP에 대한 자세한 내용은 다음을 참고하자. [네트워크] HTTP란? non-persistent HTTP vs persistent HTTP | RTT란? Web 과 HTTP 웹 페이지는 객체(object)로 구성된다. 객체(object)는 HTML 파일, JPEG 이미지, JAVA applet, 오디오 파일 등이 될 수 있다. 웹페이지는 여러 참조된 객체를 포함하는 기본 HTML 파일로 구성되며, code-lab1.tistory.com HTTP 1.0과 HTTP 1.1의 차이 1) Non-Persistent vs Persistent HTTP 1.0과 HTTP 1..
문제 https://www.acmicpc.net/problem/17374 17374번: 비트베리 비트베리는 국내 최다 사용자를 확보하고 있는 간편암호화폐 지갑이다. 비트베리의 가장 큰 특징 중 하나는 카카오 계정으로 지갑을 만들고, 전화번호로 암호화폐를 주고받을 수 있는 점이다. www.acmicpc.net 풀이 수학적으로 까다로운 문제였다. 이 문제는 두 가지 방법을 사용해서 해결할 수 있다. 첫 번째 방법은 모든 비트와 베리를 코인으로 바꾼 뒤 코인을 비트와 1:1에 가깝게 배분하는 방법이다. 즉, 비트 -> 코인, 베리->코인 이후 코인-> 비트:코인 (1:1에 가깝게) 두 번째 방법은 모든 베리를 코인으로 바꾼 뒤 모든 코인을 비트로 바꾼 뒤 비트를 코인과 1:1에 가깝게 배분하는 방법이다. 즉,..
API (Application Programming Interface)란? API는 응용 프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. -위키피디아- 위키피디아를 인용하자면 API의 정의는 위와 같다. 하지만 이 설명을 듣고는 이해하기가 쉽지 않다. API를 설명할 때 보통 식당의 점원으로 비유하곤 한다. 손님은 점원에게 음식을 주문하고, 점원은 주문을 요리사에게 전달한다. 요리사는 요리를 만들어 점원에게 주고, 점원은 손님에게 요리를 서빙한다. 이처럼 API는 식당의 점원과 같은 역할을 한다. 여기서 손님과 요리사는 프로그램으로 비유할 수 있다. 즉, API는 프로그램들이 서로 상호작용하는 것을 도와주는 매개체라고 할 수 있다. A..
AOP (Aspect Oriented Programming)란? AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 모듈화 하겠다는 것이다. *모듈화 : 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것 예를 들어 핵심적인 관점은 비즈니스 로직이 될 수 있고, 부가적인 관점은 핵심 로직을 실행하기 위해 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등이 될 수 있다. AOP는 흩어진 관심사(Crosscutting Concerns)를 모듈화 할 수 있는 프로그래밍 기법이다 [그림 1]과 같이 클래스 A, B, C에서 공통적으로 나타나는 색깔 블록은 중..
문제 https://www.acmicpc.net/problem/11265 11265번: 끝나지 않는 파티 입력의 첫 번째 줄에는 파티장의 크기 N(5 ≤ N ≤ 500)과 서비스를 요청한 손님의 수 M(1 ≤ M ≤ 10,000) 이 주어진다. 각각의 파티장은 1번부터 N번까지 번호가 붙여져 있다. 다음에는 N개의 줄에 걸 www.acmicpc.net 풀이 플로이드-와샬 알고리즘을 사용하면 아주 간단하게 해결 가능하다. 단순한 문제이므로 코드를 참고하자. 코드 HTML 삽입 미리보기할 수 없는 소스
문제 https://www.acmicpc.net/problem/4307 4307번: 개미 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 막대의 길이와 개미의 수 n이 주어진다. 다음 n개 줄에는 숫자가 하나씩 주어지며, 이 숫자는 개미의 초기 위치를 www.acmicpc.net 풀이 이 문제는 애드 훅 문제라고 하는데, 애드 훅이 뭔지 잘 모르겠어서 조사해봤다. 일반적으로 경쟁적 프로그래밍(Competitive Programming) 대회, 이른바 알고리즘 대회에서는 종종 애드혹(ad-hoc) 문제가 출제된다. 일반적으로 애드혹 문제라고 하는 것은 해당 문제를 풀기 위해 잘 알려진 정교한(sophisticated) 알고리즘을 적용하지 않고 해결할 수 있는 유형의 문제를 일컫..
문제 https://programmers.co.kr/learn/courses/30/lessons/60063?language=java 코딩테스트 연습 - 블록 이동하기 [[0, 0, 0, 1, 1],[0, 0, 0, 1, 0],[0, 1, 0, 1, 1],[1, 1, 0, 0, 1],[0, 0, 0, 0, 0]] 7 programmers.co.kr 풀이 나는 이 문제를 조금 복잡하게 푼 것 같다. 우선 Robot 클래스를 만들어서 x좌표와 y좌표, 현재 방향(0은 가로 1은 세로), 걸린 시간을 저장하게 만들었다. 참고로 방향이 가로일 때 x, y는 왼쪽 좌표 기준, 세로일 때 x, y는 위쪽 좌표를 기준으로 한 것이다. 이후 탐색은 BFS를 통해서 모든 경우의 수를 따지면 된다. 이때 상하좌우로 움직이는..