전체 글
-
DTO(Data Transfer Objects)를 왜 쓸까?Programming🧑💻/Spring 2023. 8. 21. 15:52
DTO를 사용하는 이유 DTO(Data Transfer Objects)는 개발할 소프트웨어의 아키텍처가 계층화되어 있어서 각 레이어 간의 데이터의 교환이 필요하거나 외부 시스템과의 상호작용이 있는 경우 데이터를 주고받는 것을 용이하게 만들기 위해 사용하는 데이터 전송용 객체이다. 엔티티를 직접 사용하여 정보를 전달할 수 있지만 추후 기술할 이점들 때문에 DTO를 사용한다. 일단 이해를 위해서 다음과 같은 상황을 가정해 보자. 당신은 장난감 가게를 운영하고 있으며 다양한 장난감을 보유하고 있으며 장난감이라는 각 객체는 상품명, 가격, 제조일자, 제조국, 보증기간 등 다양한 정보를 가지고 있다. 이때 장난감이라는 객체는 변하지 않지만 이 객체를 어디서(계층)에서 다루냐에 따라서 장난감이라는 객체에 대해 필요..
-
JPA에서 엔티티 식별자를 사용하는 이유Programming🧑💻/JPA 2023. 8. 19. 01:23
일반적으로 서비스 이용자와 서비스 제공자 간의 요청과 응답의 흐름은 다음과 같다. 이용자가 서비스에 글 보기, 댓글 조회하기와 같은 서비스를 이용하기 위하여 요청을 보내면 제공자는 이용자의 요청을 식별하고 이에 해당하는 응답을 제공하기 위해 필요한 데이터(글, 댓글)를 데이터베이스로부터 조회한다. 조회한 데이터를 서비스의 특성에 맞게 가공하여(몇 개까지 보여줄 건지, 어떻게 보여줄 건지) 사용자에게 전달한다. 또한 이용자가 글이나 댓글을 작성하기와 같은 요청을 보내면 제공자는 이용자에게 전달받은 데이터를 사전에 설계한 데이터베이스 설계에 맞게 저장하고 이에 대한 결과를 사용자에게 전달한다. 즉 서비스 이용자와 제공자 간의 요청, 응답 흐름에서 서비스와 데이터베이스 간의 통신이 필요하다. 서비스와 데이터베..
-
FFT가 빠른 이유Math♾️/Fourier Analysis 2023. 6. 22. 15:58
다항식 A(x)와 B(x)의 곱을 C(x)라고 하자. 이때 다항식 C(x)의 각 항의 계수들은 다음과 같이 각 항을 차례대로 곱하는 분배법칙을 통해서 구할 수 있다. 다항식 간의 곱 연산 시 계산되는 요소는 각 항의 계수이므로 다음과 같이 다항식의 각 항의 계수들만 배열의 형태로 나타내는 방법을 Coefficient Representation이라고 한다. Coefficient Representation을 이용해 각 항을 곱해나가며 계산을 할 경우 A(x)의 각 항은 B(x)의 모든 항과 한 번씩 곱연산을 수행해야 한다. 따라서 A(x), B(x)를 최고차항이 d라고 하면 A(x)의 하나의 항당 B(x)의 모든 d개의 항에 대해서 곱연산을 하며 이를 A(x)의 모든 d개 항에 실시하므로 기본적으로 총 d*..
-
푸리에 변환은 차원을 확장시켜 파형을 분해한다.Math♾️/Fourier Analysis 2023. 5. 30. 14:56
일반적으로 코사인 그래프는 다음과 같이 x(시간) 축에 대하여 y(진폭) 축 방향으로 위, 아래로 왔다 갔다 하면서 나타난다. 시간에 따른 점의 위치를 나타내는 코사인 함수를 각 시간 t에 대한 진폭 값들을 y축에 사영함으로써 시간의 경과를 나타내는 x축을 점의 움직임으로 전환하여 1차원 상에서 표현할 수 있다. 이와 같이 코사인 함수를 일차원상에서 나타내게 되면 시간이 무한이 증가해도 점은 수평면 상에서 좌우로 왔다 갔다 하며 반복적으로 움직일 뿐이다. 이렇게 주기성을 가지는 움직임의 형태를 'sinusodial'이라고 한다. 시간 요소를 점의 움직임으로 나타내면서 일차원 상에서 코사인 그래프를 나타낼 수 있게 되었다. 이 방법을 이용하여 점의 움직임을 2차원으로 확대해 보자. 하나의 좌표축으로 하나의..
-
컨볼루션(합성 곱) 에 대한 직관적 이해Math♾️/Fourier Analysis 2023. 5. 15. 15:04
합성곱이라고도 불리는 'Convolution'은 소리 신호 필터링, 영상 처리등과 같이 입력과 이에 대한 출력이 존재하는 경우 입력을 목적에 따라 가공해서 원하는 출력을 얻기 위해서 사용하는 연산이다. 다양한 분야에서 사용되는 만큼 자주 만나게 되는 연산이지만 수식의 전개로만 이해하기에는 너무 추상적이기 때문에 그 분야에서 적용되는 연산 방법을 외우고 이를 그냥 활용하기만 하는 경우가 있다. 이 합성곱이 일반적으로는 어떠한 의미를 갖고 있는지를 살펴보는 과정을 통해 합성곱이 입력과 출력사이에서 어떠한 역할을 하는지에 대한 직관을 얻을 수 있도록 해보았다. 추상적인 것을 이해하는 방법 중 하나는 알고자 하는 것에 대한 가장 단순한 예를 생각해 보고 이를 기초로 점점 다양한 상황에 적용될 수 있도록 일반화하..
-
화음과 불협화음의 차이를 통한 음계를 구성하는 법Sound & Music🔊 2023. 5. 10. 14:29
소리란? 왜 어떤 소리는 조화롭게 들리지만 다른 소리들은 그렇지 않을까? 이에 대해 이해하기 위해서는 일단 '소리'가 무엇인지에 대한 이해가 필요하다. 물체가 부딪히거나 스스로 진동하면서 발생한 에너지가 공기 중으로 발산하게 되면 에너지의 시작점으로부터 주위의 공기 분자들이 서로를 진동시키며 공기압의 변화가 생기게 되고 이로 인하여 에너지가 전파된다. 이러한 에너지의 전달 형태를 파동이라고 하며 이렇게 전달된 파동이 우리 귀에 있는 막을 진동시키면서 이를 소리로 인지한다. * 공기압의 변화 : 파동의 전달에 따라 특정 영역은 수축하면서 공기 분자들이 모이게 되고 또 다른 영역은 팽창하면서 공기 분자들이 퍼지게 된다. 즉 단위 부피 당 존재하는 공기분자 수의 차이가 생기고 이로 인한 밀도차가 생기면서 공기..
-
이산 푸리에 변환에서 어떤 진동수를 택할것인가?Sound & Music🔊 2023. 4. 15. 21:55
이산 푸리에 변환이 필요한 이유 1. 시간 도메인에서 주파수 도메인으로 바꿔서 보고 싶다. -> 푸리에 변환을 한다.(일반적인 푸리에 변환은 연속적인 파형을 대상으로 한다.) 2. 기계적으로 신호를 다루기 위해서 아날로그 신호(연속적인 값)을 디지털 신호(이산적인 값)으로 바꾸었다. -> 디지털 신호(이산적인 값)에 대한 푸리에 변환이 필요하다. 푸리에 변환은 비슷함을 추출하는 과정이다. 푸리에 변환은 시간 도메인에서 하나의 형태로 나타난 파형을 주파수 도메인으로 옮겨 어떤 진동수가 얼마나 들어 있나 분해하는 절차이다. 내적은 대상간의 유사한 성분이 얼마나 있는지를 추출한다. 따라서 분해하고자 하는 신호에 각 진동수의 기본파형을 내적하면 내적한 파형을 현재 신호가 얼마나 가지고 있는지 알 수 있다. 이와..
-
시간 도메인 오디오 특징 종류Sound & Music🔊 2023. 4. 5. 09:36
Max Amplitude Value Max Amplitude Value란 각 프레임에서 제일 큰 진폭을 갖는 샘플 값을 의미한다. 아래의 식에서 t는 프레임의 순번을 나타내고 k는 샘플의 순번을 내며 K는 한 프레임을 구성하는 샘플의 개수를 AE_t는 t번째 프레임에서의 Max Amplitude Value를 나타낸다. 각 프레임에서의 첫 번째 샘플의 순번은 프레임의 순번에 프레임을 구성하는 샘플의 개수를 곱하면 얻을 수 있고 마지막 샘플의 순번은 구하려는 프레임의 다음 프레임의 첫 번째 샘플의 순번을 구한 다음에 1을 빼주면 된다. 예를 들어 하나의 프레임이 100개의 샘플로 구성되어 있으면 3번째 프레임의 샘플을 첫 값과 끝값을 찾으려면 100*3 = 300이고 끝값은 100*4=400 -1 = 399..