전체 글 108

[Algorithm] 시간복잡도 Big-O 표기법

시간복잡도(time complexity) 시간복잡도(time complexity)란 가장 널리 사용되는 알고리즘의 수행 시간 기준입니다. 알고리즘이 실행되는 동안 수행하는 기본적인 연산의 수를 입력의 크기에 대한 함수로 표현한 것입니다. 기본적인 연산이란 더 이상 쪼갤 수 없는 최소 크기의 연산이라고 생각하시면 됩니다. 예를 들어 다음은 기본적인 연산이라고 볼 수 있습니다. 두 부호 있는 32비트 정수의 사칙연산 한 변수에 다른 변수 대입하기 가장 깊이 중첩된 반복문의 내부에 있는 기본적 연산들은 더 쪼갤 수 없기 때문에 이것이 시간 복잡도의 대략적인 기준이 됩니다. 시간복잡도가 높다 입력의 크기가 증가할 때 알고리즘 수행 시간이 더 빠르게 증가한다는 의미입니다. 시간복잡도가 낮다고 언제나 더 빠른것은 ..

Algorithm 뽀개기 2021.04.15

[Python] 순열, 조합

파이썬에서 만들어준 표준 라이브러리 itertools를 사용할 수 있다. 조합 combinations(iterable 객체, r) 조합을 구할 때 사용되는 메소드로 iterable 객체에서 r개를 뽑아 조합을 만든다. 한 리스트에서 중복을 허용하지 않는 모든 조합의 경우의 수를 구한다. from itertools import combinations mylist=[1,2,3,4] combi = list(combinations(mylist,2)) print(combi) # 결과 # [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)] 순열 permutations(iterable 객체, r) iterable 객체에서 중복을 허용하여 r개를 뽑아 모든 경우의 수를 구한다. fr..

python 2021.04.06

[Python] zip 함수

ZIP zip 함수는 여러개의 순회 가능한 객체를 인자로 받고 각 객체가 담고 있는 원소를 튜플 형태로 차례로 접근할 수 있는 반복자(iterator)를 반환합니다. 간단한 예제입니다. numbers = [10, 20, 30] letters = ["A", "B", "C"] for pair in zip(numbers, letters): print(pair) 실행결과 (10, 'A') (20, 'B') (30, 'C') 위 코드를 보면 numbers 리스트와 letters 리스트를 zip()함수에 넘겨서 호출 후에 for 문으로 zip()함수의 반환값을 대상으로 루프를 돌면서 튜플을 출력하고 있습니다.

python 2021.04.01

[Python] 오름차순 정렬, 내림차순 정렬

파이썬에서는 내장함수 sort(), sorted()를 이용하여 간단하게 정렬을 수행할 수 있어용 sort() 리스트를 정렬하여 변경하고 None을 반환합니다. 복사본을 만들필요가 없으므로 sorted()보다 빠릅니다. sorted() 어떤 이터러블 객체도 받을 수 있습니닷. 새로운 정렬된 목록을 반환하며 원래 목록은 영향을 받지 않습니다.. sort()함수 오름차순 정렬 numbers = [2, 1, 3, 4, 1] numbers.sort() print(numbers) 결과 [1, 1, 2, 3, 4] 내림차순 정렬 numbers = [2, 1, 3, 4, 1] numbers.sort(reverse=True) print(numbers) 결과 [4, 3, 2, 1, 1] sorted() 함수 오름차순 정렬..

python 2021.03.28

[Java] JavaAgent

JavaAgent 란? JVM 에서 동작하는 Java 어플리케이션으로 JVM의 다양한 이벤트를 전달받거나 바이트코드 제어 등을 특정 API를 통하여 수행할 수 있습니다. 또한 JavaAgent는 JDK1.5부터 제공하는 자바 instrumentation API로 소스코드의 변경없이 런타임 중에 자바 바이트 코드를 변조할 수 있게 하는 강력한 기능을 제공합니다. 자바 코드는 결국 바이트 코드로 변환이 된 후에 JVM이 바이트 코드를 읽어 실행이 됩니다. 즉 최종적으로 바이트 코드 내용으로 실행이 되기 때문에 바이트 코드를 조작한다면, 개발자가 최초로 작성한 코드와 다른 결과가 나올 수 있습니다. Java agent가 클래스파일을 직접 바꾸는 것이 아닌, 실행 후 JVM에 클래스로딩이 이루어지는 시점에 동작..

Java 2021.01.17

[에러해결]Uncaught TypeError: Cannot read property 'style' of undefined

jsp에서 Uncaught TypeError: Cannot read property 'style' of undefined 라는 에러가 발생했다. 아무리봐도 뭐가 문제인지 모르다가,,stackoverflow에서 답 발견!! 원인 태그의 수와 datatables에서의 column수가 일치하지 않았던 것이 에러의 이유였다. datatables에서 ID칼럼은 필요 없어서 헤더로 명시하지 않았는데 javascript코드 에서는 columns:[...] 이 부분에서 id 헤더를 쓰고 있었음 빠져있던 ID헤더를 추가하여 column수를 맞춰주었다. id칼럼은 화면에서 필요 없으므로 {"targets": [ 1 ],"visible": false}, visible false를 해주어 화면에서는 보이지 않게 했다..! 수..

개발삽질기 2020.12.07

스프링 VS 스프링부트

스프링에 대해 이야기 하기전에 프레임워크와 라이브러리에 대한 차이에대해 알아본다. 라이브러리 간단하게 특정 기능을 하는 코드 뭉치 개발자는 자기 코드에 라이브러리를 포함시키고 원하는 기능을 사용해서 개발을 할 수 있다. 프레임워크 라이브러리를 포함하는 개념이고 개발자가 만든 코드를 사용한다. 코드를 어떻게 실행하는지를 프로그래밍 방법을 제공한다.

Spring 2020.11.18

MSA 대두 배경은?

모노리틱 아키텍처 하나의 서버에 모든 비즈니스 로직이 들어가 있는 형태 하나의 데이터 베이스에 모든 데이터가 저장됨 기존의 Monolithic Architecture란 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어있는 형태입니다. 소규모 프로젝트에는 Monolithic Architecture가 간단하며 유지보수가 용이하므로 훨씬 합리적입니다. 하지만 일정 규모 이상의 프로젝트에서는 Monolithic Architecture의 한계점이 명확해집니다. 대규모 프로젝트에서는 전체 시스템의 복잡성이 증가하고 각 모듈의 영향도 파악이 쉽지 않습니다. 한 시스템의 배포 및 재기동 시간이 늘어납니다. 전체 시스템이 크므로 수정이 용이하지 않음 위와 같은 한계점 때문에 이를 완화할 수 있고 비즈니스 민첩성(Bus..

Architecture 2020.11.13

성능테스트 계획/분석

성능테스트 계획서 성능테스트의 목적과 유형별 검증항목 , 테스트 범위 , 일정 및 작업내역 , 수행 조직 및 역할을 프로젝트 고객과 공유하는 문서 수행할 유형별 성능테스트 종류와 각각의 목적 및 점검항목을 기술 Architecture, Performance Test 는 기본으로 진행하고 그 외는 프로젝트의 요구사항 및 일정에 따라 협의하여 조정한다 Stress Test 는 자원 ( 및 일정의 제약으로 일반적으로 적정부하의 150~200% 를 적용한다 Fail Over 는 인프라 아키텍터가 주도하고 수행시 필요한 부하를 발생시키는 형식으로 지원한다 L4스위치 로드밸런싱 정책 round robin, hashing, least connection 찾아보기!! 부하분석 대상 시스템에서 처리해야 할 TPS를 산정..

성능 테스팅 2020.09.17