분류 전체보기
[Kotlin] java의 static final 변수에 대응되는 것은?
2021.02.11 : Languages & Frameworks/Kotlin```kt class KakaoAuthHelper { companion object { const val REDIRECT_URI = "http://webpage-observer" val AUTHZ_CODE_URL = "https://kauth.kakao.com/oauth/authorize?client_id=${KakaoConfig.app_rest_api_key}&redirect_uri=${REDIRECT_URI}&response_type=code" } } ``` AUTHZ_CODE_URL은 변수가 들어가야 해서 const를 안붙였지만... Byte Code -> Java Decompile 해보면 ```java public static final String REDIRECT_URI = "http://web..
SonarQube
2020.12.08 : DevOps & ServerPull Request decoration 기능? SonarQube v7.2부터는 유료(Developer Edition)로 바뀜. 7.1 까진 무료 버전에서도 플러그인 형태로 제공. https://docs.sonarqube.org/display/PLUG/GitHub+Plugin https://github.com/SonarSource/sonar-github PR 시 changes만 가져와서 sonarqube 돌리게끔 설정 가능. 설치 및 초기 설정 일단 SonarQube 7.1 버전 설치. 최신 버전은 docker로도 설치할 수 있는데 7.1은 그냥 zip으로 받아서 압축 풀어 설치하면 됨. conf 설정 등 전체적인 권장사항은 이 것 참조 https://docs.sonarqube.org/7.1/Insta..
NGINX
2020.12.04 : DevOps & ServerReverse Proxy 실 운영 환경에서는 80, 443 빼고는 inbound를 막아두는 경우가 많아서 iptables 써서 80 -> xxxx로 포워딩하거나, nginx써서 80 -> xxxx로 포워딩한다. 후자를 더 많이 사용하는데 그 이유는 nginx를 쓰면 설정이 좀 귀찮기는 하지만, 한 장비에 여러 인스턴스를 띄우고 이들을 domain(혹은 location)으로 구분하므로 모두 80으로 받을 수 있다. jenkins나 sonarqube 등 설정 파일에서 home location (e.g., /jenkins)을 설정할 수 있도록 지원하는 것이 이 것 때문. 어차피 server IP가 변경될 상황을 대비해서 도메인을 쓰긴 써야하니 그럴 바에 nginx로 리버스 프록시하는게 낫다. IP로 hook ..
Serverless computing platform의 장점
2020.12.04 : Coding NoteLambda에 대해서 적었지만, 이런 식의 Serverless computing platform의 활용처라고 생각하면 됨. N사는 사내에 Lambda라는 플랫폼을 제공하고 있음 Serverless computing platform = Function as a Service(Faas) = event-driven compute platform 별도의 서버 없이 특정 이벤트에 대응하여 코드를 실행하거나, 직접 코드를 실행할 수 있다. 급하게 개발해야 할 때나, 가볍게 개발해야 할 때 서버 신청 / 설정 / 관리 안해도 되니 부담 적음. 배포 필요 없이 수정하면 수정하는대로 바로 반영된다는게 장점. 이러한 플랫폼의 장점과 언제 어떻게 사용하면 유용한지? A. 유저가 직접 기능 확장이 필요할 때 내 생각에 이런 ..
[Java] Collection 초기화
2020.11.02 : Languages & Frameworks/Javawww.baeldung.com/java-init-list-one-line www.baeldung.com/java-initialize-hashmap www.baeldung.com/java-combine-multiple-collections 자바의 immutable? ```java private static final Thing[] PRIVATE_VALUES = { ... }; public static final List VALUES = Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES)); ``` ```java return ImmutableMap.of( key1, value1, key2, value2); ImmutableMap.builder() .put..
[Java8] CompletableFuture
2020.10.13 : Languages & Frameworks/Java-asyncCompleatbleFuture에 대해 https://medium.com/@chanhyeonglee/completable-future-가이드-part-1 https://medium.com/@chanhyeonglee/completable-future-가이드-part-2 https://medium.com/@chanhyeonglee/completable-future-가이드-part-3 thenCompose VS thenApply thenCompose VS thenApply thenCompose는 Future 다음에 또 다른 Future를 이어서 실행하게끔 연결할 때 사용 thenApply는 Future 결과를 받았을 때 반환 전에 어떤 처리를 apply 할 때 사용 exception handling : exc..
[Python] 파이썬 버전, 패키지 관리
2020.10.10 : Languages & Frameworks/Pythonpyenv / venv / virtualenv / conda 비교 pyenv macos만 지원. 했었는데 요즘은 어떤지 모르겠네. venv python에서 기본 모듈로 지원 docs.python.org/ko/3/tutorial/venv.html python에 딸려 있는 모듈이라서 현재 시스템에 설치되어 있는 버전의 python을 기반으로 패키지 가상화 환경 제공 그니까 다른 버전을 쓰고 싶다면 그 버전을 일단 설치해서 python해당버전 -m venv ``` python3 -m venv {venv_path} ``` virtualenv -p 옵션으로 파이썬 버전을 지정할 수 있는데, 현재 시스템에 설치되어 있는 파이썬 경로를 입력해야 하는거라서 결국 venv와 똑같다. 그니까, 새로운 버전의 파이썬을 알아..
DB 이중화 / 클러스터링
2020.09.23 : Data StoreDB 클러스터링 DB 장애 시 가용성을 유지하기 위한 클러스터링 방안 Oracle 기준이긴 하지만, 다른 DB에서도 비슷한 옵션이 있는 경우 있음. HA ( High Availability ) 같은 장비를 Active 1대 , Standby 1대로 구성해서 Active에 문제 생기면 Standby로 서비스 하는 방식. Active, Standby 각자가 별도 storage를 가지고 있음. => Active와 Standby의 데이터 동기화 문제 및 성능 저하 => Active 가 죽고 Standby로 전환되기 전 그 사이에 발생하는 트랜잭션은 유실됨 *** 오라클에서는 데이터 가드 라는 이름으로 제공하고 있다. *** 위와 같은 문제점 때문에 OPS 방식이 8i 버전까지 사용되었음. OPS ( Oracle..
응답 설계 : code & data 형태의 리턴값 VS 성공 빼고 다 Exception으로 처리?
2020.08.21이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
[Spring] MVC : Controller와 Service의 책임 나누기
2020.07.06 : Languages & Frameworks/Springmartinfowler.com/bliki/PresentationDomainDataLayering.html 우선, 가장 크고 중요한 개념은 layer다. 일반적으로 많이 사용하는 layer 구분 Presentation layer Service layer Business layer Persistence layer *** 기타 sublayer 들을 포함할 수도 있음. layer를 왜 분리할까? layer를 분리한다는 것에는 어떤 의미가 있는가? layer를 나눈다는 것은, 무언가를 추상화 하는 것이 그 목적이다. 추상화를 잘 했다면, 각기 다른 계층끼리 부품을 갈아끼우듯 변경할 수 있다. 각 layer가 자신의 세부사항을 몰라도 상관 없도록, 잘 추상화해서 제공하고 있었다면 가능하다. 컴포넌트들의 서로의 의존..
[Spring] MVC : Model 클래스와 요청/응답 Data 클래스, 그리고 Map
2020.06.25 : Languages & Frameworks/Spring내용을 요약하면,,, data class 만드는걸 주저할 필요가 전혀 없다. 클래스가 많아서, 파일이 많아서 지저분해질거 같다면 요청/응답 전용 data class들만 따로 패키지를 만들어서 거기에 몰아넣고 열어보지 않으면 될 일이다. 그러므로 맵보단 data class를 만들어 쓰자. 이름을 제외한 나머지 속성들이 모두 비즈니스 로직에서 전혀 쓰이지 않는다면, data class 안만들고 Map으로 관리하고, 이름만 들고다니다가 Map에서 꺼내서 request에만 사용하는 방식은 괜찮은 듯. * Model은 보통 Business layer에서 사용하는 Domain Model을 의미한다. * 기타 layer에서 사용하는 Data Class는 Data Class라고 불렀다. Controller에서 Para..
Java Servlet 이란
2020.06.15 : Languages & Frameworks/SpringServlet이 무엇인가? A servlet is a Java programming language class used to extend the capabilities of servers that host applications accessed by means of a request-response programming model. Although servlets can respond to any type of request, they are commonly used to extend the applications hosted by web servers. For such applications, Java Servlet technology defines HTTP-specific servlet classes..