일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ipfs singletone
- 익명 객체 @transactional
- spring mongodb switch
- go
- nodejs rabbitmq
- kotiln functional interface
- spring mongoTemplate
- rabbitmq 싱글톤
- spring mongodb
- 백준 연결요소 자바
- Spring ipfs
- java 1509
- 전략 패턴이란
- 자바 백준 팩토리얼 개수
- 안정해시
- 백준 특정한 최단 경로
- java 팩토리얼 개수
- java 백준 1509
- 자바 1676
- java 파티
- ipfs bean
- kotiln const val
- 백준 2252 줄세우기
- Java Call By Refernce
- 백준 1504 java
- javav 1676
- spring mongoTemplate switch
- kotiln const
- java 1238
- mongodb lookup
- Today
- Total
목록web study (49)
공부 흔적남기기
문제 발생 프로젝트에서 12시마다 특정 주기를 가진 아이템을 새로 생성해주는 스케쥴러가 있다. 서버를 k8s에 pod가 4개인 replica로 배포했는데 12시마다 4개의 아이템이 중복 생성되는 것을 확인. 해결 방법 구색 Shced Lock을 통해 하나의 작업에 대해 여러 스케줄러가 동시에 접근하지 못하도록 Lock을 걸 수 있음 SchedLock이란 스프링 스케줄러가 태스크를 시작하기전에 (아마 AOP 를 통해서겠지) DB에 요청을 보내 Lock이 걸렸는지 확인한다. Lock이 걸렸다면 태스크를 Wait(기다리기)하지 않고 Drop(아에 실행 시키지 않음)한다. Lock이 걸리지 않았다면 task를 수행한다. SchedLock은 DB table 을 필요해 하는데 다음과 같다. @Document(Sch..
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가 있었고 이것을 자동으로 호출해서 발생하는 문제였다 . 다음..
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..
dsn : 나의 오류를 보낼 API endpoint (dsn이 없다면 자동으로 sentry가 적용되지 않는다) sentry turn on/off 설정 가능 . debug : sentry가 잘 작동하는지 이상하진 않는지 확인해줌 -> 개발환경에선 키지 않는 걸 권장( test할 때 잘 동작하는지 확인하고 배포할때는 끄고 배포하자) diagnosticLevel : debug mode와 함께 사용되는 option 특정 범위에서만 debug가 보이게 할 수 있음 이것도 테스트할 때나 사용하자 dist : 이미지를 release 해두고 여러곳에 배포할때 dist를 설정해서 나눠서 볼 수 있다? 이정도? release : 릴리즈 버전 단위로 서비스 에러를 관리 할 수있음 ex) front, backend 를 릴리즈..
최근 출퇴근길에 심심해서 공부하고 있는 주제 비대칭키 먼저 좀 더 쉬운 대칭키를 떠올려보면 간단하다 . "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"라는 값이 나왔고..