본문 바로가기

전체 글

(76)
[Junit5] 테스트 라이프 사이클 Junit 의 각 테스트는 실행 할때마다 실행 되는 순서가 정해져 있으며 각각의 테스트가 독립적인 라이프 사이클을 가지고 실행되는 특징이 있다. 순서는 아래와 같다. 첫번째, 테스트 메서드를 포함한 객체 생성 두번째, (존재하면) @BeforeEach 애노테이션이 붙은 메서드 실행 세번째, @Test 어노테이션이 붙은 메서드 실행 네번째, (존재하면) @AfterEach 애노테이션이 붙은 메서드 실행 - 아래 예시에서는 각 테스트 어노테이션이 붙은 기준으로 사이클이 한번씩 돌기 때문 아래 테스트는 LifeCycleTest 객체가 두번 생성된다. Junit 에서 제공되는 기본 어노테이션을 확인해 보면 @Test - 테스트 메서드를 의미한다. - private 으로 붙이면 안된다. @ BeforeEach @..
조졸두님 1일 1블로그 요즘 퇴근길 출근길에 이동욱님 블로그에서 글 하나씩 챙겨 본다. 하루에 한 백번정도 아니 그냥 스트리밍처럼 종일 막막하고 답답할때 한번씩 읽으면 사막에서 별자리를 발견한 기분이랄까. 나는 아직 사막이지만 별 따라 가면 언젠가는 내 평야를 찾을 수 있을것 같다. 붙잡힐때 없는 초점이 지금 이 바닥을 보는게 아니라 먼 별을 보는것에도 의미가 있다. https://jojoldu.tistory.com/497?category=689637
[LOG]테스트 커버리지 - 토스 컨퍼런스 이응준 Mock 대신 ㅡmock 오브젝트 생성 클린 코드 - 테스트 코드의 커버리지 100% 요구한다. 50% 에서 100% 까지 2개월 커버리지 측정 시작 커버리지 낮으면 배포 되지 않게 설정 2개월 동안 6천라인 테스트 되지않은 코드는 한줄도 없다는 확신이 생겼다. 모든 코드가 커버리지 된 후 리팩토링이 가능해 졌다. 불필요한 프로덕션 코드가 사라진다. 남아있다면 그것 또한 테스트 해야한다. 높은 커버리지로 인한 문제, 테스트 케이스 400개 실행시간 1분 초과 테스트가 느려지면 생산성이 떨어진다. 느려지는 원인 스프링 애플리케이션 컨텍스트 로딩을 모두 제거 보통 서버의 http api 테스트 할때 컨텍스트 로딩을 하는 경우가 많은데 많은 스프링 웹 애플리케이션이 컨텍스트 로딩없이 테스트 가능하게 해주는 s..
2785: 체인 1. print 를 재귀함수 위에 넣느냐 아래 넣느냐에 따라 다르다. 이유는 재귀함수가 스택을 활용하기 때문에. def DFS(x): if x > 0 : print (x, end=' ') // 4,3,2,1 DFS(x0-1) print (x, end=' ') // 1,2,3,4 if __name__ =="__main__": n=int(input()) DFS(n) https://www.acmicpc.net/problem/2785 2785번: 체인 희원이는 그의 다락방에서 N개의 체인을 찾았다. 각각의 체인은 몇 개의 고리로 연결되어 있는데, 각각의 고리는 최대 두 개의 인접한 고리를 가질 수 있다. 각각의 고리는 열고 닫을 수 있다. 그 www.acmicpc.net 문제 풀이: N = eval(input(..
웹 백엔드 시스템 구현 스터디(2주차-스프링씨큐러티) 1. @Transactional webmvcConfigure implements WebMvcConfiger? * 메세지 소스를 셋팅 하기 위해서 어떤 분이 컨피그를 만들었는데 이건 스프링 부트에서 i18n 폴더에 messages.properties 를 생성하여 사용 가능하다. * MessageSourceAccessor? MessageUtil 을 만들어서 했다. 2. 리액트 관련 파일을 Static 에 폴더에 넣으면 별다른 설정없이 자동으로 access 가 되는데 다 할필요 없이 특정 리소스 패턴만 mvc 패턴에서 접근 가능하도록 하면 된다. (ResouceHandlerRegistry, addResourceHandler tip = 컴파일 안잡힐때. 프로젝트 로드 안될때 (java) 1) Project St..
[자바 병렬 처리 - 포크/ 조인 프레임 워크] 포크/ 조인 프레임워크는 병렬처리를 위한 프레임워크로 java.util.concurrent 패키지의 핵심인 ExecutorService 인터페이스를 구현한 클래스. 코드에 대한 멀티 스레드 처리가 가능하다. 포크/ 조인 프레임워크의 동작을 확인하면 아래와 같다. 포크(Fork) : 다른 프로세스 혹은 스레트(테스크태스크)를 여러 개로 쪼개서 새롭게 생성 조인(Join) : 포크해서 실행한 프로세스 혹은 스레드(태스크)의 결과를 취합한다. 일을 나눌 수 있다면 여러개로 쪼개서 실행(포크), 하고 최종적으로 실행이 완료된 내용을(조인)해서 결과를 만들어 낸다. 분할 정복 같은 느낌! black9p.github.io/2018/01/20/%EB%B3%91%EB%A0%AC-%EB%8D%B0%EC%9D%B4%ED%..
[JAVA]스트림(Stream) 에서 기본형(Primitive type)은 왜 취약할까? 스트림(Stream) 에서 기본형이 왜 취약할까? 스트림 API 는 데이터가 객체라는 것을 기본 전제로 설계되어있다. 문자열이나 클래스 타입은 객체이지만 기본형 데이터인 Int, long, double 등의 값을 처리하게 되면 기술적으로는 문제가 없으나 이 데이터는 객체가 아니기 때문에 Stream 내부적으로 오토박싱과 언박싱이 빈번하게 발생한다. 이는 처리 시간의 급격한 증가를 가져온다. - 스트림 API 에서는 기본형으로 많이 사용하는 Int, long, double 을 위해 별도의 인터페이스를 제공한다. DoubleStream IntStream LongStream www.baeldung.com/java-8-primitive-streams Primitive Type Streams in Java 8 |..
[JAVA 개념] 추상클래스와 인터페이스의 차이점 ( + 상속과 구현) JDK8 부터 인터페이스에 Default 메서드가 추가 되었다. 추상 클래스와 인터페이스의 큰 차이점은 두가지이다. 1. 추상 클래스는 멤버 변수를 가질 수 있지만 인터페이스는 멤버 변수를 가질 수 없다. (물론 인터페이스도 static 으로 정의된 변수를 내부적으로 선언할 수 있지만 멤버 변수를 선언할 수 없다) 2. 클래스를 구현 할 때 오직 하나의 클래스만을 상속 받을 수 있는 반면에 인터페이스는 여러개를 상속 받거나 구현 할 수있다. 대부분의 멤버 변수는 그 객체의 속성을 담아두기 위한 용도로 사용한다. 메서드 내에 선언한 변수는 메서드가 종료되면 그 상태를 잃어버리는 반면, 클래스의 멤버 변수는 객체가 살아있는 한 속성을 유지 할 수 있으며 값을 변경 할수도 있다. 이렇게 중요한 기능을 수행하는..
[클론코딩 요약/노마드코더] 바닐라 JS로 크롬 앱 만들기 - #2 PRACTICE #2.0 Your first JS Function console.log incoInfo.favFood 비슷하다. console 은 Object 이다. console이라는 Object 와 log 라는 function(key) 가 있는것 function(argument) function sayHello (name) { console.log('Hello ' + name); } sayHello("sejin"); #2.1 More Function Fun sexy string~ '', "" , `` 자바 스크립트에서는 "(따옴포)" 도 스트링이고 '(싱글 따옴표)' 도 스트링이다. 기존 스트링 방식 에서는 ex ) "Hello " + name + "you are " + age + ... 불편하다. 대신 백틱(`)을..
[클론코딩 요약/노마드코더] 바닐라 JS로 크롬 앱 만들기 - #1 THEORY # 자잘한 강의 내용 기록 #1.1 Super Powers of JS JavaScript 는 브라우저에서 대체 불가능한 언어이다. 단순히 홈페이지를 구현하는것이 아닌 많은 인테렉티브 디자인 또한 구현 가능하다. #1.2 ES5, ES6 ES..WTF? JavaScript는 언어, ECMAScript 는 Specification 이다. ES5 = ECMAScript5 ES6 = ECMAScript6 : 버전이랑 어떤걸 배워야 할지 걱정하지 않아도 된다. 그냥 강의의 자바 스크립트를 배워랏 자바스크립트는 매우 기능 집중화 되어있어 누군가 업데이트를 하면 모든 브라우저에서 작동을 하게 된다. JS 는 Specification 인데 체계 메뉴얼과 같다. (ex :메뉴얼 이렇게 하면 이렇게 해야합니다~, 오류 나..
[Effective java] Item 7 - 종료자(finalize) 사용을 피하라 * finalize 는 어떤 클래스든 오버라이드 하여 사용 가능한 기능이다. public class FiinalIzerExample { @Override protected void finalize() throws Throwable { super.finalize(); } } 왜 문제가 생기는지? 하지만 종료자(finalizer)는 예측 불가능 하며, 대체로 위험하고, 일반적으로 불필요하다. 종료자는 GC 에 의해 실행되는데 GC에서 종료자 스레드가 종료 우선순위가 높지 않다면 혹은 다른 이유로 즉시 실행 되리라는 보장이 전혀 없기 때문이다. 또한 종료자를 사용하면 프로그램 성능이 심각하게 떨어진다. * 현재 자바9 에서는 finalizer 가 deprecated가 되었다고 한다. 'Cleaner' 라는게 ..
[Effective Java] Item 6 - 유효기간이 지난 객체 참조는 폐기하라. C 나 C++ 처럼 손수 메모리 관리를 해야하는 언어와 달리 Java에서는 JVM 에서 GC(Garbage collertion : 쓰레기 수집가) 를 이용하여 안쓰는 객체를 지우는 기능(쓰레기 수집) 이 가능하지만 메모리 관리를 하지 않으면 '메모리 누수' 의 문제가 생긴다. 그 결과로 GC 가 할일이 많아져 성능이 저하되거나 메모리 요구량이 증가한다. 극단적으로는 디스크 페이징 (Disk paging), OutOfMemortError 가 던져지면서 프로그램이 중단될 것이다. 1. 메모리 누수는 어디서? 스택이 커졌다가 줄어들면서 제거한 객체들을 쓰레기 수집기가 처리하지 못할때, 가용범위를 벗어난 만기 참조(obsolete refrence) 를 그대로 가지고 있을때 * 만기 참조 : 다시 이용되지 않을 ..
[디자인패턴] 빌더(Builder) - 개념 정리,예제 1. 정의 상위클래스에서 인터페이스를 받아 구현한 하위 클래스가 부분 객체를 생성하고, 디렉터 클래스가 조립 절차에 따라 객체를 조립하여 복합객체를 생성한다. 대충 이런 느낌 아닐까? (생각중.. ) 2. 구성 요소 구성요소는 3개가 필요하다 - 상위 클래스, 하위 클래스, 디렉터 클래스 1. 상위클래스에서는 공통으로 사용할 객체와 인터페이스를 정의하고 하위클래스에서 사용할 추상(Abstract) 메서드를 선언한다. 2. 하위클래스에서는 상위클래스를 상속 받고 추상메서드를 오버라이드 하여 구현한다. 3. 디렉터 클래스에서는 인터페이스를 사용해서 상위클래스에 대한 의존성을 주입하고 하위 클래스들에 대한 객체를 받아 각 부분을 조립하는 메서드를 제공한다. 3. 장점 - 여러 단계와 다양한 절차를 통해서 객체..
[REACT] Dotenv module - .env 파일로 환경변수 생성 1. what is Dotenv? .env 파일에서 process.env(파일명)으로 환경 변수를 로드하는 zero dependency environment variables 모듈이다. + zero dependency : 모듈이 작동하기 위해 다른 패키지에 의존하지 않음을 의미 2. 사용방법 1) 아래에서 확인 가능하다. www.npmjs.com/package/dotenv dotenv Loads environment variables from .env file www.npmjs.com 2) 리액트에서는 최상의 루트에 .env(txt) 파일을 만들어야한다. 3) 환경변수 이름은 자유롭게 작성하되 REACT_APP_ 은 필수로 포함시켜야 한다. 2. 장점 1) 각종 API 나 IP, 중요한 계정 정보등 전역..
[Python] 최대공약수, 최소 공배수 구하기(math, 유클리드 호제법) 파이썬 math 모듈을 사용하여 간단하게 구할수 있다 - def min(n,m) : 최소 공배수 - def max(n,m) : 최대 공약수 from math import gcd; def min(n,m) : return n*m // gcd(n,m) def max(n,m) : return gcd(n,m) 혹은, 유클리드 호제법을 이용하여 구할 수 있다. def max(n,m): if m>n : m,n = n,m while m != 0 : n = n%m n,m = m,n return n def min(n,m): return n*m // max(n,m)
자바스크립트 데이터 타입 정리 자바스크립트에는 두가지 데이터 타입이 있다. 바로 기본형과 참조형 기본형 : 숫자, 문자열, 불리언, null, undefiened 등이 있으며 ES6에서는 심볼이 추가 됐다. 참조형 : 객체, 배열, 함수, 날짜, 정규 표현식등이 있으며 ES6에 추가된 Map, WeakMap, Set, WeakSEt 이 이 객체의 하위 분류에 속한다. 일반적으로 기본형은 할당이나 연산시 복제, 참조형은 참조된다고 알려져 있다. 엄밀히 말하면 둘다 모두 복제를 하긴한다. 다만 기본형은 값이 담긴 주솟값을 바로복제, 반면 참조형은 값이 담긴 주소값들로 이루어진 묶음을 가리키는 주솟값을 복제한다.
[안드로이드] 네트워크를 통한 데이터 가져오는 방법 안드로이드의 네트워크 API 를 사용해야한다. 원격 서버의 엔드 포인트에 연결 하거나 HTTP 요청을 수행하고 서버 결과 및 데이터 피드를 처리할수 있다. SAX Parser, XML Pull Parser. JSON Reader 등과 같은 파서를 사용해 데이터를 추출하고 처리한다.
네이티브 인터넷 애플리케이션을 만드는 이유 왜 네이티브 애플리케이션을 선호하는가? 모바일 웹 브라우저가 점점 더 강력해 지고 있지만, 온전히 웹 기반인 애플리케이션 대신 씬 클라이언트(thin-client), 씩 클라이언트(thick-client) 네이티브 애플리케이션을 만듦으로써 누릴수 있는 장점은 수없이 많다. 1. 대역폭 이미지나 레이아웃 , 소리등 정적 리소스는 대역폭이 제한된 기기에서 부담이 크다. 네이티브 애플리케이션을 만들면 변경되는 데이터로만 대역폭을 제한할 수 있다. 2. 오프라인 사용 웹 브라우져 기반 솔루션에서는 인터넷 연결이 불안정할 경우, 애플리케이션도 매끄럽게 작동하지 않는다. 인터넷 연결이 불안정 해질경우 애플리케이션도 매끄럽게 작동하지 않는다. 네이티브 애플리케이션은 데이터와 사용자 액션을 캐싱함으로써 연결이 끊어지더..
[유용한 사이트]JSON에서 Class 자동 형변환 사이트 app.quicktype.io/ Instantly parse JSON in any language | quicktype app.quicktype.io JSON 을 입력해주면 원하는 언어의 클래스로 자동 형변환이 가능하다.
리액트 - props 값 ES6문법으로 간단하게 작성하기 props는 properties의 의미로 컴포넌트 속성을 설정할 때 사용한다. import React from 'react'; const ComponentTest = props => { return 안녕하세요, 제 이름은 {props.name} 입니다. 그리고 제 나이는 {props.age} 입니다. }; export default ComponentTest 기존 props을 이용하여 컴포넌트 안에 문자열을 보여주려면 props. 이라는 키워드를 앞에 붙여주고 있다. 이를 편하게 사용하기 위해 es6의 비 구조화 문법(destructuring assignment) 을 사용할 수 있다. 내부 값을 바로 추출하는 방법이다. 방법 (1) import React from 'react'; const Componen..
Expo 이용해 react native 앱 실행하기 Expo를 이용하면 안드로이드 같은 시뮬레이터 없이 휴대폰에서 쉽게 리액트 앱 실행이 가능하다. Introduction to Expo Expo is a framework and a platform for universal React applications. It is a set of tools and services built around React Native and native platforms that help you develop, build, deploy, and quickly iterate on iOS, Android, and web apps from the same JavaScript/TypeScript codebase. Expo Expo is an open-source platform fo..
CSS, HTML - gradient 색상 코드 사이트 (유용한 사이트) https://uigradients.com/#Ali uiGradients - Beautiful colored gradients uiGradients is a handpicked collection of beautiful color gradients for designers and developers. uigradients.com 뭐 간단하다. 마음에 드는 컬러를 확인하고 위에 색상 코드를 가져가면 된다.
FontAwesome 이용하여 HTML Icon 추가하기 FontAwesome 은 5000개 이상의 아이콘을 제공해주는 라이브러리로 Prefix와 name이 들어간 코드를 추가하여 간단하게 여러 아이콘을 무료로 사용할 수 있는 기능을 제공한다. 사용 방법 1. 의 사이에 라이브러리를 다운받을 수 있는 링크를 추가한다. 1 2 3 4 5 6 7 ... ... http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter 2. https://fontawesome.com/ 사이트에 접속하여 Icons 탭에서 원하는 아이콘을 선택한다. 3. 상단에 있는 코드 를 그대로 복사하여 내가 사용하고자 하는 위치에 붙여 넣기 하면 ..
[SpringBoot] parent 란? pom의 메이븐은 자바 클래스처럼 상속성을 가지고 있습니다. 마치 부모의 특징을 자식이 그대로 물려 받는 것과 같은 개념인데 pom 역시 태그를 이용하여 자식이 부모로 부터 모든 설정을 상속 받아 사용 합니다. 1. 프로젝트의 pom을 확인하면 상단 부분 태그를 확인 할수 있습니다. 아래는 org.springframework.boot:spring-boot-starter-parent:2.17.RELEASE.pom 파일로 부터 설정,기능을 상속 받고 있다는 의미입니다. 부모의 파일은 ctrl 을 누르고 안의 내용을 클릭 하면 직접 확인 가능합니다. 2. ctrl + 클릭으로 들어온 부모의 pom 파일입니다. 이 파일의 설정이 그대로 자식 pom.에 상속 되었다고 할수 있습니다. org.springframew..