전체 글
신입 개발자의 성장을 위한 기록
-
Kotlin에서의 제어문 Statement : 프로그램의 문장으로 하나의 값으로 도출되지 않는다. Expression : 하나의 값으로 도출되는 문장이다. 먼저 java에서는 if-else 문을 하나의 값으로 도출되는 문장으로 취급을 하지 않는다. 하지만 Kotlin에서는 Expression으로 하나의 값으로 도출되는 문장으로 취급한다. 따라서 아래의 코드가 가능하다. fun function1(num: Int): String { return if(num >= 50) { "P" } else { "F" } } fun function2(num: Int): String { return if(num >= 90) { "A" } else if(num >= 80) { "B" } else if(num >= 70) { "..
Study About Kotlin 3Kotlin에서의 제어문 Statement : 프로그램의 문장으로 하나의 값으로 도출되지 않는다. Expression : 하나의 값으로 도출되는 문장이다. 먼저 java에서는 if-else 문을 하나의 값으로 도출되는 문장으로 취급을 하지 않는다. 하지만 Kotlin에서는 Expression으로 하나의 값으로 도출되는 문장으로 취급한다. 따라서 아래의 코드가 가능하다. fun function1(num: Int): String { return if(num >= 50) { "P" } else { "F" } } fun function2(num: Int): String { return if(num >= 90) { "A" } else if(num >= 80) { "B" } else if(num >= 70) { "..
2024.02.28 -
Kotlin에서의 타입 Kotlin에서는 선언된 기본값을 보고 타입을 추론한다. val number1 = 1// Int val number2 = 1L// Long val number3 = 1.0f// Float val number4 = 1.0// Double Kotlin에서의 타입 변환 Java에서는 더 작은 Byte를 가진 타입에서 더 큰 Byte를 가진 타입으로 변환할 때에는 명시적으로 작성하지 않아도 변환에 문제가 생기지 않았다. 하지만 Kotlin에서는 기본 타입간 변환은 명시적으로 이루어져야만 한다. val number1 = 4 val number2: Long = number1// Type mismatch (Error) val number2: Long = number1.toLong()// 변환 ..
Study About Kotlin 2Kotlin에서의 타입 Kotlin에서는 선언된 기본값을 보고 타입을 추론한다. val number1 = 1// Int val number2 = 1L// Long val number3 = 1.0f// Float val number4 = 1.0// Double Kotlin에서의 타입 변환 Java에서는 더 작은 Byte를 가진 타입에서 더 큰 Byte를 가진 타입으로 변환할 때에는 명시적으로 작성하지 않아도 변환에 문제가 생기지 않았다. 하지만 Kotlin에서는 기본 타입간 변환은 명시적으로 이루어져야만 한다. val number1 = 4 val number2: Long = number1// Type mismatch (Error) val number2: Long = number1.toLong()// 변환 ..
2024.02.28 -
Kotlin Java를 사용하다 보니 Java를 완벽히 대체할 수 있다는 Kotlin이라는 언어에 관심이 갔다. 그래서 Kotlin의 기본부터 한번 공부해보기로 했다. Java와 비슷하면서도 많이 다른 Kotlin.. 변수에 관해 Java와는 다르게 Kotlin에서는 처음 변수 설정을 할 때에는 var 또는 val을 사용한다. 여기서 var와 val의 차이점이 있는데 var = 변수 val = 상수 의 느낌이 있는 듯 했다. var로 변수를 선언하면 값을 바꿔서 정의를 할 수가 있다. 하지만 val로 변수를 선언하면 초기 선언 이후에 또 다른 값을 정의할 수 없다. 또한 타입을 명시하지 않아도 타입이 자동적으로 추론이 된다. Primitive type(기본 유형)과 Reference type(참조 유형)..
Study About Kotlin 1Kotlin Java를 사용하다 보니 Java를 완벽히 대체할 수 있다는 Kotlin이라는 언어에 관심이 갔다. 그래서 Kotlin의 기본부터 한번 공부해보기로 했다. Java와 비슷하면서도 많이 다른 Kotlin.. 변수에 관해 Java와는 다르게 Kotlin에서는 처음 변수 설정을 할 때에는 var 또는 val을 사용한다. 여기서 var와 val의 차이점이 있는데 var = 변수 val = 상수 의 느낌이 있는 듯 했다. var로 변수를 선언하면 값을 바꿔서 정의를 할 수가 있다. 하지만 val로 변수를 선언하면 초기 선언 이후에 또 다른 값을 정의할 수 없다. 또한 타입을 명시하지 않아도 타입이 자동적으로 추론이 된다. Primitive type(기본 유형)과 Reference type(참조 유형)..
2024.02.21 -
쉘 스크립트에서의 변수 선언 아무래도 신입이기도 하고 linux를 접해볼 기회가 많이 없기 때문에 변수를 선언하고 할당하는 법이 어색했다. java에서는 그냥 자연스럽게 됐었는데..ㅎ 이건 변수 하나 설정할 때도 검색하고 찾아봐야 하다니.. 더 검색하기 싫어서 정리한다. 내가 하려고 했던 것은 명령어를 입력한 뒤 반환되는 값을 변수에 할당하고 싶은 것이었다. 그래서 처음엔 변수 = 명령어 라고 생각을 하고 진행을 하니 오류가 발생했었다. 그래서 검색을 하고 찾아보니 명령어 입력 후 반환값을 변수에 할당하려면 변수 = $( 명령어 ) 형식으로 입력하면 되는 것이었다. ex) PID = $(ps -ef | grep 'project' | grep -v 'grep' | awk '{print $2}') 그 후 할..
쉘 스크립트에서의 조건문과 변수쉘 스크립트에서의 변수 선언 아무래도 신입이기도 하고 linux를 접해볼 기회가 많이 없기 때문에 변수를 선언하고 할당하는 법이 어색했다. java에서는 그냥 자연스럽게 됐었는데..ㅎ 이건 변수 하나 설정할 때도 검색하고 찾아봐야 하다니.. 더 검색하기 싫어서 정리한다. 내가 하려고 했던 것은 명령어를 입력한 뒤 반환되는 값을 변수에 할당하고 싶은 것이었다. 그래서 처음엔 변수 = 명령어 라고 생각을 하고 진행을 하니 오류가 발생했었다. 그래서 검색을 하고 찾아보니 명령어 입력 후 반환값을 변수에 할당하려면 변수 = $( 명령어 ) 형식으로 입력하면 되는 것이었다. ex) PID = $(ps -ef | grep 'project' | grep -v 'grep' | awk '{print $2}') 그 후 할..
2024.02.21 -
Rollback에 관해 매우 간단하게 정리하려 한다. 내가 생각했던 Rollback 로직은 빌드할 때 원래 사용하던 war 파일을 backup 폴더에 옮긴 후 빌드된 파일을 webapps 폴더에 옮긴다. 그 후 프로젝트를 재실행하면 끝인 아주 간단한 로직이었다. Jenkins Pipeline으로 만든 코드이다. pipeline { agent any stages { stage('filecheck') { steps { script { echo "file check start..!" def file = "/usr/local/project/webapps/backup/ROOT.war" if(fileExists(file)) { echo "file exists. continue rollback" } else { er..
Rollback 로직 정리Rollback에 관해 매우 간단하게 정리하려 한다. 내가 생각했던 Rollback 로직은 빌드할 때 원래 사용하던 war 파일을 backup 폴더에 옮긴 후 빌드된 파일을 webapps 폴더에 옮긴다. 그 후 프로젝트를 재실행하면 끝인 아주 간단한 로직이었다. Jenkins Pipeline으로 만든 코드이다. pipeline { agent any stages { stage('filecheck') { steps { script { echo "file check start..!" def file = "/usr/local/project/webapps/backup/ROOT.war" if(fileExists(file)) { echo "file exists. continue rollback" } else { er..
2024.02.19 -
서식 수정 및 유지 보수가 많이 들어와 배포할 프로젝트가 매 주 있었다. 그래서 Jenkins에서 배포를 매우 자주 했었는데 문득 그런 생각이 들었다. 혹시 프로젝트가 무슨 문제가 생겨 잘 되고있던 서비스가 작동하지 않으면 어쩌지..? 그래서 Rollback job을 만들기로 했다. Rollback Job 만들기 먼저 원래 있던 Job을 복사해서 만드려고 봤었다. 그래서 여기 저기 만져보니 빌드 후 스크립트가 실행되는게 아닌가.. 나의 계획은 빌드를 진행할 때 backup 폴더에 현재 서비스의 war파일을 복사한 뒤 새 war 파일로 실행을 하는 것이다. 그래서 Rollback job을 실행할 경우 backup 폴더에 war 파일이 존재하면 현재 서비스의 war 파일을 backup 폴더에 war 파일로 ..
Jenkins rollback job 만들기서식 수정 및 유지 보수가 많이 들어와 배포할 프로젝트가 매 주 있었다. 그래서 Jenkins에서 배포를 매우 자주 했었는데 문득 그런 생각이 들었다. 혹시 프로젝트가 무슨 문제가 생겨 잘 되고있던 서비스가 작동하지 않으면 어쩌지..? 그래서 Rollback job을 만들기로 했다. Rollback Job 만들기 먼저 원래 있던 Job을 복사해서 만드려고 봤었다. 그래서 여기 저기 만져보니 빌드 후 스크립트가 실행되는게 아닌가.. 나의 계획은 빌드를 진행할 때 backup 폴더에 현재 서비스의 war파일을 복사한 뒤 새 war 파일로 실행을 하는 것이다. 그래서 Rollback job을 실행할 경우 backup 폴더에 war 파일이 존재하면 현재 서비스의 war 파일을 backup 폴더에 war 파일로 ..
2024.02.15 -
Jenkins의 pipeline이란? Jenkins의 pipeline이란 연속적인 이벤트 또는 Job의 그룹을 말한다. 즉, 자신이 만든 젠킨스 Job들을 순차적 혹은 병렬적으로 실행시키거나 특별하게 작성한 스크립트로 이벤트들을 연속적으로 실행시키는 등의 일을 지원하는 기능이다. 파이프라인은 파이프라인 DSL(Domain - Specific Language)을 통해 간단, 복잡한 전달 파이프라인을 코드로 생성할 수 있는 확장 가능한 자동화 서버를 갖추고 있다. Pipeline 용어 다음은 pipeline 관련 용어들이다. ○ 파이프라인 (pipeline) - 사용자 정의된 CD 파이프라인 모델 - 파이프라인 코드는 전체적인 빌드 프로세스를 정의하고, 일반적으로 애플리케이션을 빌드하기 위해 stage를 포..
Jenkins pipeline 정리Jenkins의 pipeline이란? Jenkins의 pipeline이란 연속적인 이벤트 또는 Job의 그룹을 말한다. 즉, 자신이 만든 젠킨스 Job들을 순차적 혹은 병렬적으로 실행시키거나 특별하게 작성한 스크립트로 이벤트들을 연속적으로 실행시키는 등의 일을 지원하는 기능이다. 파이프라인은 파이프라인 DSL(Domain - Specific Language)을 통해 간단, 복잡한 전달 파이프라인을 코드로 생성할 수 있는 확장 가능한 자동화 서버를 갖추고 있다. Pipeline 용어 다음은 pipeline 관련 용어들이다. ○ 파이프라인 (pipeline) - 사용자 정의된 CD 파이프라인 모델 - 파이프라인 코드는 전체적인 빌드 프로세스를 정의하고, 일반적으로 애플리케이션을 빌드하기 위해 stage를 포..
2024.02.15 -
Map 객체를 DTO 객체로 매핑하는 작업을 했었다. 작업 도중 가끔 오류가 나는 것을 발견하고 해결한 뒤에 정리 겸 적어본다. 일단 Map객체를 DTO 객체로 매핑하는 것은 DTO객체의 set 메소드를 사용하는 방법이 있다. 하지만 이런 방식을 사용하면 DTO의 필드가 많으면 많을 수록 코드의 길이가 길어지고 가독성 또한 많이 떨어질 것이다. 그래서 DTO의 필드를 뽑아낸 뒤에 map이 그 값을 key로 가지고 있을 때 DTO 객체로의 매핑을 하면 된다. 아래 예시 코드이다. MemberDTO userVo = new MemberDTO(); for(Field field : userVo.getClass().getDeclaredFields()) { field.setAccessible(true); if(use..
Map을 DTO or VO로 매핑Map 객체를 DTO 객체로 매핑하는 작업을 했었다. 작업 도중 가끔 오류가 나는 것을 발견하고 해결한 뒤에 정리 겸 적어본다. 일단 Map객체를 DTO 객체로 매핑하는 것은 DTO객체의 set 메소드를 사용하는 방법이 있다. 하지만 이런 방식을 사용하면 DTO의 필드가 많으면 많을 수록 코드의 길이가 길어지고 가독성 또한 많이 떨어질 것이다. 그래서 DTO의 필드를 뽑아낸 뒤에 map이 그 값을 key로 가지고 있을 때 DTO 객체로의 매핑을 하면 된다. 아래 예시 코드이다. MemberDTO userVo = new MemberDTO(); for(Field field : userVo.getClass().getDeclaredFields()) { field.setAccessible(true); if(use..
2024.02.13