| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- spring mongoTemplate
- go
- 자바 백준 팩토리얼 개수
- spring mongodb
- javav 1676
- 백준 1504 java
- mongodb lookup
- java 팩토리얼 개수
- Java Call By Refernce
- java 파티
- rabbitmq 싱글톤
- ipfs bean
- java 1509
- java 백준 1509
- spring mongoTemplate switch
- 백준 2252 줄세우기
- 익명 객체 @transactional
- 안정해시
- kotiln const val
- 백준 특정한 최단 경로
- Spring ipfs
- java 1238
- kotiln const
- 자바 1676
- spring mongodb switch
- 백준 연결요소 자바
- ipfs singletone
- Claude Intelij 연결
- nodejs rabbitmq
- kotiln functional interface
- Today
- Total
목록분류 전체보기 (199)
공부 흔적남기기
먼저 Call by Value가 됐든 Refernce가 됐든 여기서 말하는 Call 이란 무엇일까?여기서 Call 의 의미는 메소드를 호출해서 인수를 넣을 때를 말하는 것이다.Call by Value call By Value는 인수가 메소드 블럭으로 넘어갈 때 새로운 변수 (스택에 생성)에 이전 블럭에서 사용하던 변수의 값 자체를 넣어주는 것이다. Call by Referencecall By Reference 는 인수가 메소드 블럭으로 넘어갈 때 새로운 변수 (스택에 생성)에 이전 블럭에서 사용하던 변수의 값 자체가 아닌 참조를 넣어줌으로서 새로운 변수와 이전 블럭에서 선언한 변수가 같은 주소를 가리키게 하는 것이다. C에서 흔히 포인터를 통해 Call By Reference를 사용할 수 있다. Java..
How to use switch case on spring mongo data mongotemplate 프로젝트에서 mongodb를 사용하는데 project시 분기를 태워서 나타내야하는 field가 존재했다. 예를들어 student { id: ObjectId, name: String, stauts: int, } 이라는 객체가 있다고 가정하자 status가 0일때 ABSENT, 1 일때 ATTENDANCE, -1 일떄 FIRE 로 표현해야한다. 물론 data를 그냥 받아서 for문을 돌려서 바꿔줄 수 있지만 project를 통해 충분히 구현이 가능하고 성능으로 봐도 더 좋을 것이라 생각했다. mogodb stage에서는 아주 간단했다. 이곳을 참조하면 쉽게 구현할 수 있다. https://www.mongo..
스프링 & 코틀린 프로젝트에서 gradle build가 자꾸 'compilejava' task (current target is 11) and 'compilekotlin' task (current target is 1.8) jvm target compatibility should be set to the same java version. error가 뜨면서 stuck이 되는 문제가 있었다. tasks.withType { kotlinOptions { freeCompilerArgs = listOf("-Xjsr305=strict") jvmTarget = "11" } } 이 적혀있음에도 계속 오류가났다. 그래서 java 버전이 잘못되었나 확인도 해보았고, gradle에 이것저것도 추가해보고 컴퓨터도 껏다켜보고 ..
파일, 이미지, 폴더 등 저장소로 IPFS 를 사용하고 있는데 스프링 빈으로 등록하여 사용시 자꾸 IPFS 데몬이 꺼지는 문제점이 발생 코드는 다음과 같다. @Configuration class IpfsConfig( private val appProperties: AppProperties, ) { @Bean fun ipfs(): IPFS{ return IPFS(appProperties.ipfsHost, 5001) } } 왜 그런지 고민을 좀 해보다가 @Bean의 destroy method가 shutdown이나 close를 추론해서 자동으로 빈이 사라지기 전에 호출한다는 것이 기억이 났다. 찾아보니 IPFS Class에 shutdownMethod가 있었고 이것을 자동으로 호출해서 발생하는 문제였다 . 다음..
d1과 d2는 0.001로 서로 같아보이지만 사실 자리수때문에 서로 아주 미세하게 다른값을 가지게된다. 근데 clion ide가 무조건 true라는 웃긴 스니펫을 보여줘서 남겨본다.. #include #include int main(){ using namespace std; double d1 = (100 - 99.99); double d2 = (10-9.99); if(d1 == d2){ cout
동시성 문제에 대한 테스트를 위해 100개의 스레드에서 서비스에 접근하는 테스트를 하는 도중 latch.await을 했음에도 불구하고 계속해서 thread들이 끝나지도 않았는데, 테스트가 끝나는 문제가 있었다. 코드를 자세히 살펴보면 문제가 보이나, 맞다고 생각하고 대충보면 문제가 보이지 않는다... 이것 때문에 대략 1시간은 뻘짓을 한 것 같다.. @Test fun decrease_concurrent() { val threadCount = 100; val executorService = Executors.newFixedThreadPool(threadCount) val latch = CountDownLatch(threadCount); for (i in 1..threadCount){ kotlin.runCa..
node.js 에서 rabbitmq를 사용하는데 매번 message가 보내질때마다 connection이 생기고 channel이 생기는게 너무 비효율적이라고 생각 들어서 싱글톤으로 구현함 import * as amqp from 'amqplib/callback_api'; import {URL} from 'url'; export interface Config { url: string; username: string; password: string; } export class RabbitMq { private connection: amqp.Connection | null private channel: amqp.Channel | null private config: Config; constructor(config..
리액트에서 불변성과 State는 큰 연관관계를 맺고있다. 리액트는 state가 변경될 때 리렌더링을 하게 끔 구현되어있다. 즉 리액트가 화면을 렌더링 해주는 기준이 state가 변경되었을 경우에 해당한다. 따라서 일반변수를 할당해서 변경하더라도 리렌더링은 되지 않는다 하지만 useState를 통해 생성된 변수는 setState를 통해 값을 바꾼다면 react가 리렌더링을 해준다. 이 과정중에 중요한게 불변성이다. primitive type은 불변성을 띄기 떄문에 setState를 통해 값을 바꾸는 경우 리액트가 인식하지만 Literal type의 경우에는 변수가 주소값을 가지고 있기 때문에 메모리의 내부 객체의 값을 변경하더라도 주소값은 변경되지 않기 떄문에 리렌더링을 해주지 못한다. 따라서 해결법을 위..
전략 패턴이란 컨텍스트(변하지 않는 부분) 안에서 전략(변하는 부분)을 전달받아 실행하는 패턴이다. 전략은 컨텍스트에서 인터페이스로 존재하며 여러 전략들이 인터페이스를 구현하여 컨텍스트에 주입되어 사용하게된다. 스프링에서 자주사용하는 DI도 전략패턴의 예라고 할 수 있다. 전략 패턴은 추상 클래스를 사용하는 템플릿 메소드 패턴와 달리 인터페이스를 사용하기 때문에 OCP 원칙에 좀 더 알맞고 부모클래스와의 의존관계가 없기 때문에 느슨한 결합을 추구할 수 있다. 언제사용할까? 변하는 로직과 변하지 않는 부분이 로직이 존재하고, 변하지 않는 로직에서 변하는 로직을 여러개로 갈아 끼울때, 예를들어 게시판을 만드는 서비스에서 mysql도 사용하고 싶고 mongodb도 사용하고 싶다면 board라는 컨텍스트가 있을..
템플릿 메서드 패턴.. 그전에 템플릿이란 ? 템플릿은 큰 구조를 만들어 놓고 내부는 사용자가 직접 구현해 사용하도록 하는 것이다. 흔히 mongodTemplate, redisTemplate 등 다양한 곳에서 사용된다. 템플릿 메서드 패턴도 결이 비슷한데, 중복되는 로직들을 (변하지 않는 부분들) 모아서 템플릿화 시키고 (추상 클래스 생성) 이를 상속하여 변하지 않는 부분을 구현 시키는 것이다. 예를들어 모든 서비스 로직에 로그를 단다고 가정하면, 로그 다는 부분을 추상클래스로 만들고 이를 상속해서 서비스를 구현하면 되는 것이다. 즉 다형성의 원리를 사용하여 단일 책임원칙을 지켜 객체지향적 코드를 작성할 수 있게 된다. (중복되는 부분을 고칠 때 템플릿 부분만 고치면됨) @Slf4j public abstr..