본문 바로가기

분류 전체보기

(91)
Java 환경변수 설정이 필요한 이유, 설정 방법 (mac) 환경변수 설정이 필요한 이유 환경변수는 운영체제가 어떤 경로에서든 인식할 수 있는 변수이다. 자바 환경 변수를 등록하는 것은 컴퓨터의 어떤 경로에서든 운영체제가 자바를 인식할 수 있도록 하기 위해서이다. 환경변수를 설정하면 어떤 경로에서든 자바 설치 폴더까지 이동할 필요없이 명령어로 자바 실행이 가능해진다. 1. Java가 설치된 경로 찾기 아래 명령어를 실행했을 때 나오는 경로를 복사한다. cd /usr/libexec ./java_home 2. 환경변수 설정 vi ~/.zshrc vi ~/.bash_profile vi로 ~/.zshrc 또는 ~/.bash_profile 편집기를 열어 환경변수를 입력해준다. export JAVA_HOME="/Library/Java/JavaVirtualMachines/zu..
[Kotlin] parameter vs property, Constructor parameter is never used as a property 코틀린으로 개발 중 아래와 같은 경고를 보게 됐다. constructor parameter is never used as a property 자바에서는 클래스 내부에서 프로퍼티와 생성자를 각각 따로 정의하고, 생성자 내부에서 프로퍼티를 값을 초기화 해주는 코드를 직접 구현하기 때문에 생성자 파라미터와 프로퍼티 개념이 헷갈릴 일이 없다. 그런데 코틀린에서는 주생성자와 프로퍼티(멤버함수) 정의를 한 번에 할 수 있다보니, 생각없이 단순 파라미터를 프로퍼티로 정의하고 갑자기 뜬 경고에 당황했다. 당황한게 창피해서 정리해본다. parameter 우선 parameter는 매개변수로 함수나 생성자에 전달하는 값을 의미한다. fun printName(name: Sting) { println(name) } class ..
npm install, dependencies로 해야할까? devDependencies로 해야할까? (dependencies vs devDependencies) package.json파일을 보면 dependencies와 devDependencies가 분리되어 있는 것을 볼 수 있다. create react app 으로 프로젝트를 개발할 때는 하나하나 구분해서 넣을 필요가 없었지만 모듈 번들러 부터 만지려니 어떤 패캐지를 어디에 포함시켜야할지 헷갈렸다. react를 devDependencies에만 넣어도 되나? typescript는? babel은...? 이런 고민들을 해결한 과정을 정리했다. dependencies dependencies 내부에 들어가 있는 패캐지들은 실제 production으로 배포할 때도 사용할 수 있다. 즉 배포할 때도 다 담아서 나가야 하는 패캐지들을 이쪽에 포함시켜야 한다. 어플의 로직구현, 화면 동작과 관련있는 라이브러리들이 저장된다. ..
모듈 번들러란? Webpack의 역할은? 모듈 번들러를 이해하기 위해서는 javascript의 빌드 과정을 먼저 이해해야 한다. JS 빌드 과정 transpiling : jsx, es6, tsx 등의 고급 분법을 구형 브라우저들이 이해하지 못해 호환성 문제 존재함. 이 문제를 해결하기 위한 기법으로, 구형 버전의 js 코드로 변환해줌 bundling: 트랜스파일된 수많은 js파일과 모듈을 하나의 파일로 묶는 번들링 기법 등장 minifying(압축) : 파일 용량이 커짐에 따라 브라우저 상으로 로드하는 시간이 늘어나는 문제를 해결하기 위한 기법 모듈 번들러 module : 분리된 코드 조각 bundling : 묶는다 즉, 분리된 코드 조각을 묶는 다는 의미이다. 의존성이 있는 모듈 코드를 하나(또는 여러개)의 파일로 만들고, 브라우저 환경에서 ..
스프링부트가 다중 유저 요청을 처리하는 방법 (Thread Pool, Thread Safe) 스프링 요청 처리 과정 내장 서블릿 컨테이너인 Tomcat을 이용한다. Tomcat은 다중 용청을 처리하기 위해서 부팅할 때 스레드 컬렉션인 Thread Pool을 생성한다. 유저 요청이 들어온다 (HttpServletRequest) 스레드 풀에서 하나씩 Thread를 할당함 해당 Thread에서 스프링 부트에서 작성한 dispatcher servlet을 거쳐 유저 요청을 처리한다. 작업을 끝내고 나면 스레드는 스레드풀로 반환된다. application.yml 에서 아래처럼 톰캣설정을 바꿔줄 수 있다. # application.yml (적어놓은 값은 default) server: tomcat: threads: max: 200 # 생성할 수 있는 thread의 총 개수 min-spare: 10 # 항상 활..
소나큐브(Sonarqube)와 jacoco로 코드품질 측정, 정적분석 Motivation 프로젝트에서 코드 퀄리티를 측정하고 유지하기 위해서 sonarqube를 적용했습니다. 추가적으로 테스트 코드를 얼마나 잘 작성하고 있는지, 즉 코드 커버리지 측정을 위해 jacoco도 함께 적용했습니다. (대상이된 프로젝트는 java와 kotlin 언어로 이루어져 있습니다.) 소나큐브란 ? 소나큐브는 정적 프로그램 분석 도구입니다. 정적분석은 프로그램을 실행하지 않은 상태에서 소스 코드나 컴파일된 코드를 이용해 프로그램을 분석하는 방법입니다. 소나큐브는 아래 7가지 품질 요소를 기준으로 코드의 품질을 측정합니다. 버그(Reliability) : 잠재적인 버그, 런타임 중 예상되는 이슈 코드악취(Maintainability) : 심각한 이슈는 아니지만 사소한 이슈들. 모듈성, 이해가능성..
파이프라인, CI/CD, 젠킨스 개념 새로 개발한 애플리케이션을 쿠버네티스에서 사용하는 과정 깃허브 등 저장소에 저장해둔 애플리케이션 소스 코드를 내려받아 도커 컨테이너 이미지로 빌드 (docker build) 빌드한 컨테이너 이미지를 쿠버네티스에서 사용할 수 있도록 레지스트리에 등록 (docker push) 등록된 이미지를 기반으로 쿠버네티스 오브젝트 생성 (kubectl create) 생성한 오브젝트(파드, 디플로이먼트)를 외부에서 접속할 수 있도록 서비스 형태로 노출 (kubectl expose) 파이프라인 이런 과정을 파이프라인이라고 한다. 파이프라인을 자동화할 수 있는데, 자동화는 크게 지속적 통합 CI, 지속적 배포 CD로 나눈다. CI/CD는 실무적인 환경에서 변경 사항을 계속 추적해 좀 더 안정화된 애플리케이션으로 만들고, 이..
[java] File 지우기. delete vs deleteOnExit() .delete() 함수는 실행 즉시 파일을 삭제하고 deleteOnExit()은 jvm이 종료할 때 파일을 삭제한다. .delete() 실행 시점 즉시 파일 삭제 File inputFile = new File(fileName); InputStream inputStream = new FileInputStream(inputFile); byte[] buf = new byte[1024]; int len; while( (len = inputFile.read(buf)) > 0 ){ outputStream.write(buf, 0, len); } inputFile.delete(); // 파일 삭제 유의할 점 실행 시점에 즉시 삭제되므로, 파일을 사용하는 모든 작업이 끝난 뒤에 실행하도록 코드를 작성해야 한다. 장점 파..

반응형