| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- nodejs rabbitmq
- 자바 1676
- go
- kotiln const val
- kotiln const
- 안정해시
- java 1509
- ipfs singletone
- ipfs bean
- javav 1676
- spring mongoTemplate switch
- 백준 1504 java
- 백준 특정한 최단 경로
- 익명 객체 @transactional
- Claude Intelij 연결
- spring mongodb
- 백준 2252 줄세우기
- spring mongoTemplate
- java 1238
- java 팩토리얼 개수
- java 파티
- kotiln functional interface
- 자바 백준 팩토리얼 개수
- Java Call By Refernce
- Spring ipfs
- rabbitmq 싱글톤
- mongodb lookup
- java 백준 1509
- 백준 연결요소 자바
- spring mongodb switch
- Today
- Total
목록분류 전체보기 (199)
공부 흔적남기기
최근 출퇴근길에 심심해서 공부하고 있는 주제 비대칭키 먼저 좀 더 쉬운 대칭키를 떠올려보면 간단하다 . "i want to go home" 이라는 문자열을 "A"로 암호화하면 "abcd"라는 문자열이 나온다고 가정하면 "abcd" 를 "A"로 복호화하면 "i want to go home"이라는 문자열이 나오는 것이다. 즉 "i want to go home"(message) "A"(대칭키) "abcd" 라는 구조로 볼 수 있겠다. 그럼 좀 더 복잡한 공개키 구조 즉 비대칭 키를 알아보면 비대칭키는 암호화하는 key와 복호화하는 key가 다르다고 생각하면 된다. 위 예와 비교해 보면 "i want to go home"이라는 message를 암호화하는데 "A"라는 key를 사용해서 "abcd"라는 값이 나왔고..
개발하다가 컴퓨터는 매일 꺼야하고 컴퓨터 킬 때 마다 인텔리제이를 키는게 귀찮아서 찾아보았다. 1. 윈도우키 + r 누른다. 2. shell:startup 를 입력한다. 3. 폴더가 나오면 거기에 실행시키고 싶은 프로그램을 넣으면 된다.
개발 도중 @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) 을 사용하여 isDeleted를 is_deleted로 보냈는데 날라가는 메세지를 보니 deleted로 날라갔다. 찾아보니 직렬화 하는 도중에 is가 제거된다.. @get:JsonProperty("is_deleted") @param:JsonProperty("is_deleted") var isDeleted: Boolean? = false, 를 사용하면 is를 사용할 수 있다. 참고로 요즘 개발할 때에는 형용사 앞에 is 붙이는 걸 선호하지 않는다. 어차피 값은 true 혹은 false일 것이기 떄문.
Go를 이용해서 Rest Api를 개발하고 있는 도중 middleware를 사용할 일이 생겨 사용할려다보니 내부적으로 이해가 안되서 정리함. 어댑터 패턴은 간단하게 말해서 A타입을 사용하고 싶은데 우리에게 B타입밖에 없다면 어댑터를 이용해서 B타입을 A타입으로 바꿔주는 역할을 하는 것이다. Go에서 middleware를 사용하기 위해 Gorlia Mux의 router.Use라는 function을 사용할 건데 func (r *Router) Use(mwf ...MiddlewareFunc) { for _, fn := range mwf { r.middlewares = append(r.middlewares, fn) } } type MiddlewareFunc func(http.Handler) http.Handler..
Go를 공부하다가 Interface를 사용하는게 신기해서 아주 간단한 예를 들어 정리하고자한다. 먼저 신기한 이유는 인터페이스를 구현할 때 다른 언어와 달리 implemnt와 같은 명시를 안해줘도 된다. 명시하지 않아도 내재적으로 상속한다고 보기때문이다. 코드를 보면 납득이 될 것이다. package main import "fmt" type Book struct { title string author string copyRight string } func (b Book) String() string { return fmt.Sprintf("제목은 %s 작가는 %s 저작권은 %s", b.title, b.author, b.copyRight) } func print() { fmt.Println(Book{"자바의..
spring data mongo에서 지원하는 Agggregation에서 $lookup operation은 from, localfield, foreinfield, as로 한정적이다. 따라서 collection의 한가지 field로만 join하여 사용할 수 있다. 하지만 필자는 2가지 이상의 필드를 이용하여 join할 필요가 있어 CustomAggregation 만들어 사용했다. import org.bson.Document import org.springframework.data.mongodb.core.aggregation.AggregationOperationContext import org.springframework.data.mongodb.core.aggregation.ExposedFields impor..
why we use inline function in kotlin 1. inline function을 사용하지 않으면 high-order-function을 사용할때 새로운 functnion 을 new해서 사용해 메모리낭비, plus 새로 invoke를 하기 때문에 메모리낭비 when we use inline function in kotlin 1. kotlin high-order-function 즉 람다를 사용하거나 reflection function을 인자로 받을 때 사용 2. reified type parameter를 사용하고 싶을 때 사용 when not to use inline 1. 함수를 인자로 받지 않을 때 즉 high-order-funtion이 아닌 경우 2. 함수를 인자로 받긴 하지만 그 함..
SSH 터널링 목적: 고객사의 DB에 접근하고 싶으나 열린포트는 오직 22(ssh) 뿐임 사용 Tool 은 putty로 사용 가정 고객사의 서버 IP 는 10.10.10.10 DBIP는 10.10.10.20 port는 27017 로컬 mongoCompass에 고객사의 db를 연결하고 싶음 먼저 putty를 이용해 ssh connect session을 만듦 그 후 터널링을 이용해 source는 2000번 destination은 localhost(remote):3000번으로 열어둠 그 후 10.10.10.10에서 다시한번 터널링 ssh -L 3000:10.10.10.10:27017 root@10.10.10.20 명령어를 통해 터널링 그 후 local로 돌아와 mongoCompass를 2000번 포트로 연결
Point 1. 코드를 작성할때에는 항상 주위의 코드와 더불어 코드를 작성하기 마련이다. 이때 주위의 코드를 읽는 시간이 길어질 수록 개발기간이 늘어나고, 안 좋은 코드를 작성할 가능성이 높아진다. 2. 코드를 읽는데 굉장히 시간이 많이 걸리고 1을 바꾸기위해 10을 바꿔야하기 때문에 유지, 보수, 새 기능 추가에 비용이 너무 높아진다. 3. 좋은 코드의 책임은 모두 프로그래머에게 있다. 촉박한 시간, 업무량 등을 핑계로 나쁜코드를 작성하게 되는데 이는 오히려 시간을 늦추게 된다. 주의깊게 좋은 코드를 작성하는 것이 시간을 줄이는 좋은 방법이다. 4.우아한( 보기 즐거운 ) 코드를 작성하자. 5.깨끗한 코드는 잘 쓴 문장 처럼 읽혀야 한다. 6.다른사람이 보기도 쉽고 고치기도 쉬운 코드를 작성하자. 7...
코드를 짜는중 데이터베이스 접근해서 In절로 데이터를 가져오되 In절에 담긴 순서대로 데이터를 가져오고 싶었습니다. 여러 구글링 합쳐본 결과 aggregation을 통해서 해결할 수 있었습니다. 방식을 먼저 설명하면 match 를 통해 데이터를 찾오고 addField와 IndexOfArray를 이용하여 order라는 attribute를 하나더 만들어 줍니다. 생긴 order을 이용하여 Sort를 하여 가져오면 됩니다. fun getData(list: MutableList): List { val match = match(Criteria.where("_id").`in`(list)) val addField = addFields().addField("_order").withValueOf(IndexOfArray...