본문 바로가기

전체 글

(172)
프로시저의 장단점 개발을 하다가 여러 번의 쿼리가 필요한 로직이 있었는데 스토어드 프로시저로 한번 짜보았습니다. 프로시저의 장점은 아무래도 DB에서 모든 로직을 처리하기 때문에 빠른 처리 속도를 보여주는 것이죠 또한 DB에 업데이트만 해주면 바로 서버에 반영되는 것도 좋은 장점입니다. (운영관점에서) 그렇지만 과도한 트래픽이 발생한다면 트래픽의 부하를 DB에서 다 받기 때문에 분산해주지 못한다는 단점과 재사용성의 문제점 등을 단점으로 들 수 있겠습니다. DELIMITER $$ CREATE PROCEDURE student_register (IN IN_STUNO INT(11), IN IN_STUID VARCHAR(45), IN IN_STUPW VARCHAR(45), IN IN_STUNAME VARCHAR(45), IN IN_..
JAVA <-> MYSQL 연동을 위한 JDBC 자바 콘솔을 활용한 간단한 프로그램이 학교 수업에서는 가끔 과제로 나오곤합니다. 이때, 데이터베이스를 활용한 프로그램 개발을 위해서는 JDBC가 필요합니다. JDBC API는 JAVA에서 DB를 사용할 수 있게 만들어주는 연결고리라고 생각하시면 됩니다. JDBC API는 JDBC Driver Manager를 통해서 연결되는데 JDBC Driver Manager는 각 DB마다 다르다는 것을 알고 있으셔야 합니다. ㅎㅎ MYSQL은 JDBC를 사용하기 위해 driver를 다운로드 할 수 있게 제공해주고 있습니다. https://dev.mysql.com/downloads/connector/j/ MySQL :: Download Connector/J MySQL Connector/J 8.0 is highly rec..
MVC 패턴 JAVA와 JDBC를 이용한 간단한 수강신청 프로그램을 만들기 위해 어떻게 구현해야 할까 고민하던 중 MVC패턴을 활용해 구현해보았습니다. 먼저 MVC패턴은 많이 쓰이는 디자인패턴인 만큼 귀에는 익숙했는데 막상 구현하려고 하니까 난감했습니다. 그렇다면 MVC패턴을 많이 쓰이는 이유가 무엇일까요? 제 개인적인 생각은 팀 프로젝트를 진행할 때, 쉽게 모듈화를 할 수 있고 구조가 눈에 익으면 유지보수도 용이하다는데 그 이유가 있는 것 같습니다. MVC는 Model, View, Controller의 각 앞글자를 딴 용어입니다. 쉽게 인터넷을 한번 생각해보세요. 사용자가 인터넷 화면(View)를 보고 조작을 하게 되면(클릭과 같은 이벤트) Controller는 그것을 Model에 전달하게 됩니다. Model을 C..
프로그래머스 Level 2 기능개발 - Python import math def solution(progresses, speeds): answer = [] result = [] num = len(progresses) # 0 ~ num-1 for i in range(num): temp = 100 - progresses[i] temp = temp / speeds[i] temp = math.ceil(temp) result.append(temp) n = 1 # 같은 number로 for i in range(1, len(result)): if result[i-1] > result[i]: result[i] = result[i-1] for i in range(1, len(result)): if result[i-1] >= result[i]: n += 1 else: an..
연결리스트로 구현한 스택(Stack), 큐(Queue) 지금까지 스택과 큐를 구현할 때 배열을 이용하여 구현하였다. 배열을 이용하여 구현하게 되면 간단하다는 장점은 있지만 용량이 고정된다는 단점도 존재한다. 배열은 동적으로 크기를 늘리거나 줄일 수 없기 때문에 처음 할당한 공간이 가득 차면 더 이상 데이터를 더 추가할 수 없기 때문이다. 용량이 자동으로 변할 수 있는 보다 자유로운 방법을 구현하기 위해 연결된 표현(linked representation)을 사용한다. 연결된 표현은 데이터와 링크로 구성되고 링크가 노드들을 연결하는 역할을 하게 된다. 용량이 고정되지 않는 장점 덕분에 스태이나 큐 뿐만 아니라 리스트나, 덱, 트리, 그래프 등 여러가지 자료구조를 구현하는데 널리 사용 된다. 연결된 표현(linked representation)의 특징 1. 데이..
전역 변수와 객체지향 프로그래밍 지금 까지 스택과 큐를 구현하면서 많은 전역 변수를 사용했다.사실 프로그램에서 전역변수를 무절제하게 사용하는 것은 매우 좋지 않은 프로그래밍 습관이다.전역변수는 함수들 사이에 관련성을 만들어 모듈화 된 프로그래밍을 방해할 수 있다. 즉, 어떤 함수가 오류 없이 동작하는가를 그 함수의 코드만으로 검증할 수 있어야 하는데, 전역변수를 사용하면 그 함수의 코드만 봐서는 오류의 유무를 판단할 수 없고 관련된 다른 함수들을 모두 확인해야 한다.또 하나의 중요한 문제는 전역변수는 하나이기 때문에 스택이나 큐를 하나만 만들 수 있다는 것이다. 만약 스택이나 큐를 두 개 이상 사용하고 싶다면 지금까지의 코드들은 문제가 잇다.자료구조의 핵심 기능에 집중하기 위해 전역변수를 사용했다. 전역변수와 관련된 함수들은 C++이나..
덱(Deque)응용 미로 탐색 프로그램 미로에서 출구를 찾기 위한 다양한 탐색 방법을 사용할 수 있다. 이것은 그래프 탐색 문제와 유사하며 다양한 방법들이 있다. 가장 간단한 탐색 방법은 시행착오를 이용하는 것으로 하나의 경로를 선택하여 시도해 보고 막히면 다시 다른 경로를 시도하는 것이다. 이때 현재의 경로가 막혔을 때 다시 선택할 수 있는 다른 경로들을 어딘가에 저장해야 한다. 저장된 경로를 모두 선택할 수 있는 방법이라면 경로를 어디에 저장하든지 출구를 찾을 수 있다. 전통적으로 그래프 탐색에서는 대표적인 두 가지 방법을 제공한다. 깊이 우선 탐색(DFS, Depth First Search) 전략: 가장 최근에 저장한 경로를 순서대로 선택하여 시도하는 방법. 스택을 이용해서 구현 너비 우선 탐색(BFS, Breadth First Sear..
큐(Queue)응용 은행 시뮬레이션 은행 시뮬레이션 프로그램 대기행렬은 큐로 구현하고, 큐에 들어있는 고객들은 순서대로 서비스를 받는다. 한 고객의 서비스가 끝나면 다음(가장 먼저 들어온) 고객이 서비스를 받는다. 단순화를 위해 은행 창구는 하나라고 가정한다. 시뮬레이션에서는 난수 발생이 많이 사용된다. 고객들이 은행에 오는 것이 일정하지 않고 서비스에 필요한 시간도 각기 다를 것이기 때문이다. 시뮬레이션에서는 이러한 이벤트 발생을 조절하기 위해 다양한 값(파라미터)들이 사용된다. 여기서는 다음 세 값을 사용자가 입력하도록 한다. 1. 시뮬레이션 할 최대 시간(예: 10 [단위시간]) 2. 단위시간에 도착하는 고객 수 (예: 0.5 [고객수/단위시간]) 3. 한 고객에 대한 최대 서비스 시간 (예: 5 [단위시간/고객]) 고객들은 단위시간..