[Haskell] 고차원 함수 - 람다, 폴드, 스캔, $, 합성함수
·
devlog/programming language
람다 Lambda 단 한번만 함수가 필요할 때 사용하는 익명의 함수. 람다는 표현식이다. 선언방법 \ 로 선언 그 뒤에는 함수의 매개변수를 쓴다. (하나 이상의 매개변수는 공백으로 구분한다) -> 뒤에는 함수의 내용이 온다. 괄호로 람다를 감싸는 것이 일반적이다. where 절로 바인딩해서 표현했던 방식 대신 람다로 변경한 numLongChains 예시 numLongChains :: Int numLongChains = length (filter (\xs -> length xs > 15) (map chain [1..100])) 람다보다는..? 부분적 어플리케이션이 람다보다 가독성이 좋은 경우도 있다. map (+3) [1,6,3,2] // 부분적인 어플리케이션 map (\x -> x + 3) [1,6,3,..
[TIL] jooq 잘 모르겠다 🤔
·
devlog/TIL
삽질 로그 | 2019-05-30 갑분 1 = 0 ?! conditionStep = conditionStep.and(opo.ORDER_STATUS_TYPE.in(Lists.newArrayList(request.getOrderStatusTypes()))); 이런 경우의 jooq에서는 conditionStep.and(~~~) 자체가 AND 1 = 0 로 변경되어 쿼리가 실행됨. 고로 전 후에 무수히 추가한 and 조건들이 먹지 않음. 🐸개구려 갑자기 미국날짜? String 으로 받아온 평범한 날짜입력값이 미국식 포맷으로 바뀌는 매직. conditionStep = conditionStep.and(opo.ORDER_YMDT.between(DateUtils.forceParse(request.getStartYmdt..
[TIL] Feign 404
·
devlog/TIL
TIL 궁금점 Feign으로 부르는 메소드 호출에서는 404 가 내려오면 어떻게 될까? 어떻게 처리하나? Feign 404 @FeignClient(decode404 = false) 의 경우 FeignClient annotation의 decode404 property는 false가 default 값이다. 해당 설정으로 404를 받아오는 경우에는 FeignException을 발생시킨다. Feign호출을 하였을 때 resource가 존재하지 않는 경우, 호출하는 쪽에서 404 NOT_FOUND에 대한 적절한 동작을 할 수 없게 된다. @FeignClient(decode404 = true) 의 경우 decode404를 true로 설정하는 경우, Feign의 기본 decode 메소드가 java의 기본 type들을..
[TIB] spock으로 테스트를 짜고 있는데
·
devlog/TIL
TIB = Today I Babble 일단 groovy 스크립트는 매우 생소하다. 자바같이 생겼는데.. 조금 다른것 같기도하고. spock 은 where 절 쪽 빼면 사실 간결한걸 잘 모르겠다. 내가 아마 이제 막 사용하기 시작해서 그러는 것 같다. 흠 일단 문제에 봉착한것은 이것: groovy script 에서 kotlin test class 를 사용하기. 생각보다 설정이 복잡? 한것같다. 자꾸 unable to resolve class 라고 한다. 뭐가 잘못되었는지 모르겠따. compileTestGroovy 할때 kotlin test class 경로도 잘 잡아줬는데.. 무엇이 문제일지 감도 안온다. 일단 도움은 해당 stackoverflow 포스트에서 받았는데. 해결은 뭐 안되었다. https://s..
Spring Data JPA Property Expressions
·
BE/spring
궁금증이 들게한 코드 fun findByMallNoAndIssuableConstraintPromotionCode(mallNo: Int, promotionCode: String): ListJPA 에서 객체안의 필드들로 조건을 걸려면 _ (언더스코어) 로 해야한다고만 알고있었는데 아니었다. 알고보니 위와 같이 조건-객체필드 조합으로 작성하면 객체안의 필드를 조건으로 걸 수 있다.  조건-객체필드 조합으로 작성하면, 내부적으로는 다음과 같이 필드를 탐색한다.  탐색대상: findByMallNoAndIssuableConstraintPromotionCode객체 필드1차 findByMallNoAndIssuableConstraintPromotionCode2차 findByMallNoAndIssuableConstrai..
[Hashkell] 하스켈이란? 하스켈 설치방법, 실행방법
·
devlog/programming language
하스켈 이란? 순수한 함수형 프로그래밍 언어이다. 함수형 프로그래밍 언어는 컴퓨터에게 해야하는 작업을 알려주는 것이 아닌 (명령형 프로그래밍 언어), 작업이 무엇인지를 알려주는 언어이다. 예를 들면 팩토리얼은 1부터 N까지의 숫자를 모두 곱하는 작업이라고 알려주는 것처럼, 이러한 작업들을 함수로 표현할 수 있다. 함수형 프로그래밍에서는 변수의 값을 변경할 수 없다. 그렇기 때문에, 함수가 하는 일은 주어진 작업을 계산하고 그 결과를 반환하는 일만 하면 된다. 절차형 프로그래밍 언어처럼 변수의 값을 변경할 수 없고, 함수는 결과를 반환하는 일만 하면 되므로 주어진 매개변수가 동일하다면 동일한 결과를 보장하는 특징도 가진다. (=참조 투명성) 하스켈은 느긋한 언어이다. 이것은 함수의 결과값이 표현되어야 할때..
[AWS-EC2] EC2 에 접속이 불가능 할때 서버 이전 방법
·
DevOps/aws
AWS EC2를 사용하다가 보면 알 수 없는 이유로 서버에 접속이 불가능 해지는 경우가 종종 있다. 나의 경우는 지금까지 두가지 케이스를 경험했는데, 1. public key 가 변조되어 접속할 수 없음. 2. port 22가 닫혀있음. 잘 사용해왔고, 정상접근이 어제까지만 해도 가능했던 서버였는데 갑자기 이런 경우가 발생할 수 있다. 접근권한을 잃게 된 서버에 대해서는 AWS에서 해결방법이 딱히 없다. 아마 free-tier나 고객지원 서비스를 사용하지 않는 경우에는 그런 것 같다. 나의 경우에는 현재 free-tier를 사용하고 있기 때문에, 내가 가이드를 읽고 문제 해결을 하였다. 1번의 경우는 해킹으로 의심되는 사항으로 나의 ssh key가 변조되어 서버 접근권한을 잃은 경우였다. 그때도 2번의 ..
갑자기 travis-ci 배포가 되지 않을 때.
·
DevOps/cicd
그렇다. 맹세코 아-무것도 수정하지 않았는데 어느날 부터 배포신호에 빨간불이 들어오기 시작했다. 이유를 찾을 수가 없었다. .travis.yml 파일은 배포설정 초기에 만진것 이외에는 사실 고칠일이 전혀 없는 파일이기 때문이다. 문제 해결 시도 -> travis-ci 문의 예전에도 비슷한 장애?경험을 한 지라 망설이지 않고 바로 travis-ci customer support에 문의를 보냈다. 그들은 언제나 그랬듯 친절하게 대답해줬다. v2를 사용하기 위해서는 edge:true 프로퍼티를 추가해서 다시 빌드를 돌려봐 달라는 대답이 왔다. 여기서 말하는 v2란, 현재 글을 쓰는 시점에는 major release로 나가지 않은 버전이다. (참고: https://docs.travis-ci.com/user/de..
[TIL] ExecutorService / Event Driven Programming / Bulk Insert / DiscriminatorValue / AuditingEntityListener
·
devlog/TIL
TIL = Today I Learned | 알게된 내용, 현재로서는 잘 모르겠는 내용을 적는 포스트 Event driven programming - contd 이것에 대해서 잘 모르겠다! 일단은 이 article을 봤음 https://engkimbs.tistory.com/827 ExecutorService (let's deep dive) 코드리뷰를 하다가 이런 클래스를 봤다. threadpool을 정해진 개수만큼 유지하고, concurrent programming 을 할 수 있도록 도와주는 service 인 것 같다. java.util.concurrent 패키지에 있는 것을 보고 추측함. newFixedThreadPool 이거는 정해진 thread count 만큼 pool 을 유지하고 (shared un..
서버에서 rm 커맨드가 없다고 할때 / rm command not found
·
DevOps/devops
[ec2-user@### apps]$ rm filebeat-7.3.0-x86_64.rpm -bash: rm: command not found [ec2-user@### apps]$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/.local/bin:/home/ec2-user/bin 무슨 이유에서 인지 aws ec2서버에서 rm command가 없다는 것을 알게 되었다. 띄워진 instance의 OS는 CentOS. 아래의 command를 실행하면 coreutils에서 빠진 것을 리스트 해준다. [ec2-user@### travis]$ rpm -V coreutils missing..
It is currently in use by another Gradle instance
·
devlog/TIL
해결방법 에러로그에 찍힌 해당 .lock 파일을 직접 제거해 준다. log level을 --info로 하고 console에 살펴보면 .lock 파일의 절대경로를 알려준다. 해당 파일을 제거해주고 다시 gradle 태스크를 실행하면 정상동작 하는 것을 확인 할 수 있다. 혹시 다른 .lock 파일들도 제거하고 싶다면 다음과 같은 command로 제거하면 된다 find ~/.gradle -type f -name "*.lock" -delete 출처: 다른 .lock파일 한꺼번에 제거 -> https://stackoverflow.com/questions/21523508/it-is-currently-in-use-by-another-gradle-instance
DDD Start! 1장 도메인 모델 시작
·
BE/design pattern
도메인 소프트웨어로 해결하고자 하는 문제 영역 = 도메인 특정 도메인을 위한 소프트웨어라고 해서 도메인이 제공해야할 모든 기능을 구현할 필요는 없다. 각각의 실무적 상황에 맞게 직접 구현할 수도, 다른 업체 (솔루션?)을 사용해서 구현할 수도 있다. 하위 도메인은 필수가 아니다. 해당 업체의 규모가 크지 않은 경우는 굳이 소프트웨어의 힘을 빌리지 않고 수작업으로 해결하도록 풀어나갈 수도 있다. 도메인 모델 도메인 모델 = 특정 도메인을 개념적으로 표현한 것, 도메인을 이해하기 위한 도구 사용하면 좋은 점: 여러 관계자들이 도메인에 대한 같은 모습을 알게 되고 지식을 공유하는 데 도움이 됨 예시 객체기반 모델링 상태 다이어그램을 통한 도메인 모델링 사실 표현방식은 중요하지 않다. 모두가 이해할 수 있는 표..
Kotlin's Experimental features (from Kotlin Everywhere Seoul 2019 event)
·
devlog/conference
My notes from Kotlin Everywhere Seoul 2019 event Experimental Features inline class avoids extra object allocation wrapper for only one value, no mutable property Contract allows to share extra information about the function behaviors with the compiler. Why can't compiler infer such information? the inferred information... can be implicitly change can break the code provides explicit behavior fo..
Sonarqube 란?
·
DevOps/cicd
소나큐브란? CI = continuous inspection 툴. 정적분석. 어떤 지표들이 있는가? Bug 잘못된 코드 또는 개발자의 의도대로 동작하지 않을 코드를 표시. Code Smells (=구린 코드) 정상동작은 하나 유지보수 하기 힘든 코드를 표시. ex) 중복코드, 너무 복잡한 코드, unit test에 포함되지 않은 코드 Security Vulnerability 보안에 취약한 코드를 표시. ex) SQL Injection, hard-coded 비밀번호, 제대로 핸들링 되지 않은 에러 Test coverage 품질 정책 품질 프로파일 코드 분석 규칙의 집합 각 언어마다 다른 품질 프로파일이 존재 품질 게이트 프로젝트 지표들로 설정된 임계값을 조합한 것. 품질 게이트를 통과하기 위해서는 모든 임..
Logrotate로 로그 정리하기
·
DevOps/etc
Logrotate를 사용해서 로깅이 좀 더 효율적으로 서버공간을 차지하도록 만들자 개발하고 있는 서비스의 로그 삭제 기준이 정해지지 않아 서버 disk 용량을 많이 차지했다. 최대한 가볍게 사용하려면 로그관리를 주기적으로 해줘야 함. 하지만 매번 수작업으로 한땀한땀 지울 수도 없으니까! Logroate를 사용하자! 어떤 프로그램들이 로그를 찍는가 개발하고 있는 서비스에서 로그를 찍는 프로그램: Redis Nginx Web Application logback tomcat 로그 Logrotate Web Application 은 logback 자체 설정과 톰캣의 log rotate 설정으로 인해 서버에서 특별하게 설정해 주어야 할 것은 없다. 반면에 Redis, Nginx에서는 해당 기능이 없기 때문에 자체적..