본문 바로가기

Computer

(111)
MongoDB ACL 설정을 하면서... 몽고DB 를 이용하고 있던 와중에 보안을 위해 ACL 등록을 진행하였고, VM , k8s 의 worker node 등이 산재했던 부분들이 있어서, 우선 1차적으로 내부 internal proxy 로 ACL 를 등록해두고, 이후 vm,k8s 등의 ip 관리를 할 수 있는 툴을 만들어, acl 등록하는 형태로 진행하려고 하였으나, 몽고디비는 아래와 같은 모양새로 연결을 하는데. mongodb://{id}:{password}@{mongo1},{mongo2},{mongo3}/{databasename}?{options} 여기서 중요한 포인트가 있다. 서비스나 클라이언트에서는 위 요청을 통해서 mongodb 의 hostname 과 port 를 받아오고, 이를 직접 요청하도록 되어 있었다. 이러다 보니, 처음 한번 ..
Blockchain, NFT, FT with Game Blockchain 에서 가상화폐, 그리고 NFT 까지 바야흐로 가상자산의 시대가 도래하고 있습니다. 이 시점에서 간단하게나마 현재 가상자산 현 주소와 blockchain 은 무엇이고, 그리고 NFT 가 무엇인지에 대해 요약을 해봅니다. 오늘날의 블록체인과 가상화폐 블록체인? 권위 있는 중앙 조직·기관·단체 등이 없이, 자유롭고 평등한 참여자들에 의해 자율적으로 유지되고 운영됩니다. 기존의 서버-클라이언트 구조에서는 모든 정보가 중앙에 있는 서버로 집중되기 때문에 중앙을 차지한 사람이 의사결정권한을 가지는 구조입니다. 하지만 블록체인은 중앙이 없는 피투피(P2P) 방식으로 운영되기 때문에, 권위를 가진 중앙이 존재하지 않는다. 블록체인에서 의사결정 방식은 네트워크에 참여한 모든 사람들의 과반수 이상의 동..
Effective Kotlin - Prefer Sequence for big collections with more than one processing step Summary Eager evaluation vs Lazy evaluation Order is important listOf 와 같은 iterable 형태의 구조의 결과와 sequenceOf 의 결과 값은 다릅니다. sequenceOf(1,2,3) .filter { print("F$it, "); it % 2 == 1 } .map { print("M$it, "); it * 2 } .forEach { print("E$it,")} // Prints: F1, M1, E2, F2, F3, M3, E6, listOf(1,2,3) .filter { print("F$it, "); it % 2 == 1 } .map { print("M$it, "); it * 2 } .forEach { print("E$it, ") } //..
Kotlin - Respect the contract of hashCode 아래 결과에 대해서 한번 생각해보자. hashTable 의 경우 hashCode 를 키로 설정한다. /** * You can edit, run, and share this code. * play.kotlinlang.org */ data class FullName ( var name : String, var surname : String ) fun main() { val person = FullName("hello","world") val s = mutableSetOf() s.add(person) person.surname = "Mosk" println(s.contains(person)) // false println(person in s) // false println(s.first() == person..
Effective Kotlin - Minimize elements visibility Scope 을 알맞게 설정하자 Kotlin 에서는 다음 visibility modifiers 들을 갖는다. public(default) : 어디에서나 접근이 가능하다. ( 자바에서는 default 가 package-private : 패키지 내에서만 접근 가능 ) private : 클래스 내에서만 접근이 가능하다. protected : 클래스와 자식 클래스에서 접근이 가능하다. internal : 자바의 package private 같은 녀석이지만, kotlin에서 module 단위에서 접근이 가능하다. module 은 패키지와 클래스를 포함한다. 위에서 visibility modifiers 을 이용해서 알맞게 클래스를 설계하자.
Effective Kotlin - Respect the contract of compareTo compareTo의 상호간의 동작 관계 compareTo method 는 Any class 의 함수가 아니고, 코틀린의 오퍼레이터이며, Comparable 인터페이스에 존재한다. 어떤 오브젝트가 해당 interface 를 주입받거나, compareTo 라는 오퍼레이터 함수를 갖고 있다면, 이는 해당 오브젝트가 질서를 갖는다는 의미다. 아래의 질서를 갖는다. 반대칭 : a>= b 이고 b >= a 이면 a == b 입니다. 그러므로, compare 과 equality 사이에는 관계가 있으며, 서로 일치해야 합니다. 일관성이 있어야함. 전이 : a >= b 이고 b >= c 이면 a>=c 이다. 해당 속성이 중요한 이유는 다음 과같은 결론이 이루어지지 않을 경우, 조건 비교가 영원히 진행될 수 있기 때문입니..
Effective Kotlin - Data Modifer Data Modifier (데이터 수정자) Destructuring Declarations 개념으로 구현이 되어 있다. data class Player { val name: String, val age: Int, }사용하는 이유 아래의 기능들을 제공한다. toString @NotNull public String toString() { return "Player(name=" + this.name + ", age=" + this.age + ")"; }componentN ( 사용시 주의할 점, 중간에 Player 클래스에 새로운 속성을 부여할 떄, 맨뒤에서부터 하나씩 붙여나가자, 안그러면 N 의 순서가 바뀌므로 문제가 생길 수 있다. ) val (name, age) = Player("홍길동", 20) copy..
Effective Kotlin - Properties should represent state, not behavior 코틀린의 속성은 자바의 필드와 비슷해 보입니다. 그렇지만, 서로 다른 컨셉을 갖고 있습니다. //Kotlinproperty var name:String?=null //Javafield String name=null; 같은 방식으로 사용할지라도, 코틀린의 속성은 좀 더 많은 것을 할 수 있다. property 선언에 대한 전체 구문 var [: ] [= ] [] [] Custom Get, Set ( var ) var name: String? = null get() = field?.toUpperCase() set(value) { if(!value.isNullOrBlank()) { field = value } Custom Get ( val ) val fullName: String? get() = "$name ..