전체 글 47

[Kafka] 카프카란?

카프카란 높은 서버와 클라이언트들이 높은 퍼포먼스의 TCP 프로토콜을 하게 하는 분산 시스템이다. 링크드인에서 개발한 오픈소스 메시지 브로커 프로젝트이며, 목적은 데이터 파이프라인의 퍼포먼스를 올리고 스트리밍 분석 및 데이터 결합이다. 카프카를 왜 사용하는지 예시를 보면, 보통 간단한 프로젝트를 하면 윗 그림처럼 하나의 어플리케이션(Source)에 하나의 데이터베이스(target)와 연결된다. -나는 대학시절에 여러개의 데이터베이스를 사용해야 하는 프로젝트는 해본적이 없다.. 그래서 카프카의 필요성에 대해서는 전혀 느끼지 못했다. 자 그럼 어플리케이션과 데이터베이스가 많으면 어떻게 될까 이것도 실제 서비스중인 어플리케이션에 비하면 적은 편이지만 그래도 수정하고 유지보수 하는데에 매우 까다로워 졌다는걸 알..

Kafka 2022.07.18

[Spring] Inversion of Control (IoC)

Inversion of Control(IoC)이란? 직역을 하자면 제어의 역전이다. 하지만, 이렇게 얘기하면 전혀 와 닿지가 않는다. 제어가 역전 되었다고 하는데 제어의 대상은 무엇인가 누구에서 누구로 역전 되었다는걸까 기존에는 객체를 생성하고 관리하는 걸 개발자가 직접 코드로 했다면, 제어의 역전을 적용하면 이런 일들을 개발자가 아닌 프레임워크가 하게 하는 것이다. 즉, 객체 생성과 관리의 주도권이 개발자가 아닌 프레임워크에게 있다는 뜻이다. 그럼 이게 왜 필요한지에 대해서는 직접 코드를 작성해보면 알수 있다. 선생님이라는 클래스를 만들어 봤다. 선생님은 당연히 여러 업무를 하시겠지만 예시용으로 가르치는 일만 하는걸로 하자. 예시 (IoC 적용 안 했을때) 선생님은 당연히 수학, 과학, 체육 등등 다양..

Spring 2022.01.11

[Java] - 오토박싱, 언박싱 (Autoboxing and Unboxing)

Autoboxing 자바로 개발을 하다보면 int와 같은 primitive type이 클래스가 아니기 때문에 불편을 겪은적이 있다. 예를 들어, 정수로 되어 있는 리스트를 만들어 본다고 하자 public class Main { public static void main(String[] args) { ArrayList intArrayList = new ArrayList(); } 이렇게 정수로 된 ArrayList를 만드려고 하면 에러가 나온다. ArrayList에 들어갈수 있는건 클래스여야 하기 때문이다.. 물론, 이런 상황에 대한 해법으로 int를 클래스로 직접 만들수도 있다. import java.util.ArrayList; class IntClass { private int myValue; publi..

[Java] 배열을 복사하는 방법 (Shallow Copy, Deep Copy)

Shallow Copy (얕은 복사) 배열을 복사하는 방법에는 Shallow Copy와 Deep Copy가 있는데 먼저 Shallow Copy에 대해서 알아 보았다. 얕은 복사라고도 불리며 원본 객체와 복사한 객체는 메모리에서 같은 배열을 가르키게 된다 복사본을 변경할 경우 당연히 원본도 변경 얕은 복사를 하는 방법 public class Array_Copy{ public static void main(String[] args) { int[] original = { 2, 5, 10, 15, 1557, 31, 488 }; int[] copied = original; } } Deep Copy (깊은 복사) 원본의 전체 배열을 복사해서 메모리의 다른 위치에 지정한 후 복사한 객체에 할당한다. 원본 객체와 복사..

(파이썬) [위클리 챌린지 12주차] - 피로도

문제 https://programmers.co.kr/learn/courses/30/lessons/87946 오늘은 프로그래머스의 위클리 챌린지 12주차 문제인 피로도를 풀어 보았습니다. 설명 시작 피로도가 숫자로 주어지고 던전들이 리스트로 주어 집니다. 각 던전들은 [해당 던전 입장에 필요한 최소 피로도, 소모 피로도] 로 되어 있으며 현재 남아 있는 피로도가 최소 피로도와 같거나 더 많아야 해당하는 던전에 입장 가능 합니다. 입장하고 나면 소모 피로도 값만큼 현재 가지고 있는 피로도가 줄어듭니다. 이때, 최대한 여러 던전을 방문할수 있는 순서로 방문 했을때 몇개의 던전을 방문할수 있는지 찾는 문제입니다. 단, 각 던전은 한번씩만 방문 가능합니다. 만약 1번 던전에 입장한적이 있으면 다시 입장 불가능 합..

[Database] Index란 무엇인가?

Index란 무엇인가? 데이터베이스에서 인덱스는 책의 맨 뒤에 있는 색인 같습니다. 정보를 찾을때 더 빠르게 찾을수 있게 도와줍니다. 만약 제가 색인 없이 책에서 "cat"이라는 단어를 찾아야 된다면, 전체 페이지를 하나 하나 훑으면서 cat이란 단어를 찾아야 됩니다. 쿼리문 CREATE INDEX index_name ON table_name (column_name); 이렇게 하나의 column에 대해 생성할수도 있고 CREATE INDEX index_name ON table_name (column_name1, column_name2); 이렇게 2개의 column에 대해서도 index를 생성할수 있습니다. 언제 사용해야 될까? 정렬이 되어 있지 않은 column을 찾아야 될때 index는 메모리를 사용하..

Database 2021.10.22

[SQL] DELETE, TRUNCATE, DROP의 차이

Delete, Truncate, Drop의 차이 테이블을 지우는 명령어에 대해 알아 보았습니다. Delete Truncate Drop DELETE DELETE FROM players; DELETE을 사용해서 테이블에 있는 데이터를 지울 경우 특징 where를 사용하여 원하는 데이터만 지울수 있다 데이터를 지워도 테이블의 용량은 줄어들지 않는다 COMMIT이 포함되어 있지 않기 때문에 지우고 나서 ROLLBACK을 사용해서 데이터를 되돌릴수 있다 데이터를 지워도 전체 테이블의 정보는 아직 살아 있다 TRUNCATE TRUNCATE players; TRUNCATE을 사용해서 테이블에 있는 데이터를 지울 경우 특징 COMMIT이 포함되어 있기 때문에 지우고 나면 되돌릴수 없다 데이터들이 차지하고 있던 메모리도..

Database/SQL 2021.10.18

(파이썬) [위클리 챌린지 10주차] - 교점에 별 만들기

프로그래머스 10주차 - 교점에 별 만들기 코딩테스트 연습 - 10주차 [[2, -1, 4], [-2, -1, 4], [0, -1, 1], [5, -8, -12], [5, 8, 12]] ["....*....", ".........", ".........", "*.......*", ".........", ".........", ".........", ".........", "*.......*"] [[0, 1, -1], [1, 0, -1], [1, 0, 1]] ["*.*"] [[1, -1, 0], [2, -1, 0], [4, - programmers.co.kr 프로그래머스 위클리 챌린지 10주차 문제인 교점에 별 만들기를 풀어 보았다. 풀이 방식 인풋 안에 있는 직선들끼리 접점이 있는지 탐색 if를 사용해서..

[위클리 챌린지 1주차] - 부족한 금액 계산하기 (파이썬)

프로그래머스의 위클리 챌린지 1주차를 풀었습니다. 문제 링크: https://programmers.co.kr/learn/courses/30/lessons/82612 코딩테스트 연습 - 1주차_부족한 금액 계산하기 새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이 programmers.co.kr 풀이 놀이기구를 count번 타게 되었을때 필요한 금액 예시) count = 5, price = 100 100*1+100*2+100*3+100*4+100*5 = 1500 for문을 이용해서 1부터 count까지 price를 곱한 금액을 총 비용으로 변수에 할당 예산인 ..

Algorithm 2021.09.14

(파이썬) [알고리즘 문제 풀이] - 로또의 최고 순위와 최저 순위

https://programmers.co.kr/learn/courses/30/lessons/77484 풀이 0은 알수 없는 번호이기 때문에 내가 필요한 숫자 일수도 있고 아닐수도 있습니다. 최고 순위는 lottos 리스트 안에 있는 0이 더 높은 순위로 당첨되기 위해 필요한 숫자라고 가정 당첨 번호와 일치한 숫자의 개수 + 0의 개수 최저 순위는 lottos 리스트 안에 있는 0이 모두 당첨되지 않은 숫자들로 가정 당첨 번호와 일치한 숫자의 개수 일치된 번호의 숫자가 0개이거나 1개일때는 모두 6등 그 이후부터는 일치된 번호가 한개 증가할때마다 등수가 올라간다. 코드 def solution(lottos, win_nums): win = 0 zero = 0 rank = [6,6,5,4,3,2,1] for n..