language 17

re.split() 과 str.split() 차이

문자열을 정규식을 구분자로 하여 split 하는데 정규식 package re를 사용한 re.split()과 string 내부 메소드를 사용한 str.split() 의 결과값이 다른 이슈가 있었다. import re pattern = r',(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)' data = "\"UK/밑바닥부터 시작하는 딥러닝\",homepage,http://www.sample.co.kr" test1 = re.split(pattern, data) test2 = data.split(pattern) print(test1) print(test2) 분명 같은 정규식인데 re.split에서는 되고 str.split에서는 안된다. 이유는 당연한 거였는데 re.split 메소드는 regex pat..

language/python 2022.06.17

[java] map과 flatMap의 차이

면접질문으로 나왔던 map과 flatMap의 차이점을 복기한다. Java 8 에서 Optional, stream이 추가되었고 이에 사용될 수 있는 map()와 flatMap() 의 목적이 다르다. Optional에서 Map, flatMap 사용법 다음 예시는 "test"를 대문자로 변환한다. Optional s = Optional.of("test"); Assertions.assertEquals(Optional.of("TEST"), s.map(String::toUpperCase)); System.out.println(Optional.of("TEST")); //output: Optional[TEST] 더 복잡한 경우에 Optional.of() 파라미터값으로 Optional.of()가 반환되는 함수가 들어갔다..

language/java 2022.06.09

Java PermGen 영역

PermGen(Permanent Heap)은 Java 8 버전 이하에서 존재했다. 클래스 메타데이터가 들어갈 곳인데 이 공간의 크기를 예측하기 어려웠다. 자바에서는 클래스의 메타데이터(class 메타정보, Method의 메타정보, static변수, 상수정보)를 읽고 해당 메타데이터를 통해 객체를 생성할 수 있다. PermGen 영역은 OS, JVM버전마다 각기 다른 default값을 가지고 있으며 대부분 매우 작게 할당되어 있어 java.lang.OutOfMemoryError와 같은 에러를 접할 수 있다. PermSize를 commandline에서 늘릴 수 있으나 임시방편이다. Java 8 버전에서는 PermGen 영역이 Metaspace로 대체되었다. Metaspace는 Native memory에 속하..

language/java 2022.03.20

만능 로그 출력기

import logging 만 하면 handler가 붙지 않아 콘솔에 출력이 안된다. 그래서 보통 logging 설정해주는 다음 모듈을 한번 만들어 놓고 사용하는 편이다. 실행되는 main 모듈에 한번만 import 하면 된다. 나머지 하위 모듈에서는 import logging 만 해주면 알아서 handler가 붙는다. # -*- coding: utf-8 -*- import logging def setLog(): logging.basicConfig( format="[%(asctime)s] [%(process)s] [%(filename)-s:%(lineno)-s] [%(levelname)s] %(message)s", level=logging.DEBUG, handlers=[ logging.StreamHand..

language/python 2022.02.21

Annotation 생성시 @Retention

Custom Annotation을 만들어 사용할 때 @Retention() annotation을 다들 접한 적 있을 것이다. @Retention() 은 annotatin의 life cycle, 즉 언제까지 살아 남아 있을지를 결정한다. import java.lang.annotation.ElementType; import java.lang.annotation.Repeatable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE_USE)..

language/java 2022.02.13

Resouce leak: 'applicationContext' is never closed

자바 스프링 공부를 하다 다음과 같이 ApplicationContext를 사용할 때 resource leak 오류를 볼 수 있다. 스프링 컨테이너가 중지되면 암시적으로 닫히므로 실행되는데는 문제가 없지만 warning으로 뜨는 것이 꽤 신경쓰여 한번 알아보았다. - ApplicationContext란? 해당 어플리케이션에 대한 구성정보를 제공하는 인터페이스이다. 객체를 생성하고 스프링 컨테이너를 초기화하기 위해 Bean들을 불러오는데 BeanFactory interface를 상속 받은 인터페이스이다. BeanFactory와의 차이점이라면 BeanFactory는 lazy-loading 방식인데 반해 ApplicationContext는 pre-loading 방식으로 더 좋은 성능을 보인다. 아래가 내가 작성..

language/java 2022.01.27

VScode Junit에서 test용 application.yml 못읽어올 때

//==환경==// IDE: VScode 프로젝트: Java spring 에러소스: Junit4 test code 문제) 본 소스용 application.yml과 테스트용 application.yml을 따로 만들어 각각의 resources/ 에 추가했는데 java.lang.IllegalStateException: Failed to load ApplicationContext 본 소스용 application.yml이 적용되며 에러가 발생한다. 해결방법) vscode 설정파일인 .classpath 파일을 열어 vscode extension이 main보다 test 리소스를 먼저 읽도록 순서를 변경한다. 출처: https://githubmemory.com/repo/microsoft/vscode-java-test/..

language/java 2021.10.02

java 장애 hang up 걸렸을 때

jstack jdk 1.6 이상을 사용하고 있다면 Microsoft Windows에서도 jstack을 이용해 thread dump를 획득할 수 있다. 먼저 수행 중인 Java application process의 PID를 확인해야 한다. PID는 아래와 같이 jps로 확인 jps -v jps로 추출한 PID를 파라미터로 넣어 jstack을 실행하여 thread dump를 획득한다. jstack 2123 그 후, locked 라고 되어있는 printTrace를 확인한다. 출처: https://dzone.com/articles/how-analyze-java-thread-dumps https://d2.naver.com/helloworld/10963

language/java 2021.07.17

list.sort() 와 sorted(list) 의 차이

list.sort() 은 list안에서 정렬을 수행한다. return None arr = [1,3,10,2,7] print (arr.sort()) print (arr) None [1, 2, 3, 7, 10] sorted(list) 는 기존 배열 순서를 바꾸지 않는다. return sorted list literable한 자료형이라면 모두 사용 가능하고 key, reverse 파라미터가 있다. def sorted(iterable: Iterable[_T], key: Optional[Callable[[_T], Any]]=..., reverse: bool=...) arr = [1,3,10,2,7] print (sorted(arr)) print (arr) [1, 2, 3, 7, 10] [1, 3, 10, 2, 7..

language/python 2020.03.06