본문 바로가기

전체 글97

[배열과 리스트 연습문제] 숫자와 합 구하기 (백준 11720) N이 만 이하의 수이므로 int나 long으로 저장할 수 없다. 1. string으로 받아 toCharArray를 사용해 캐릭터형으로 배열을 만든 후 2. 아스키 문자에서 문자와 숫자 차이가 48임을 고려해 3. 각 수의 합을 구한다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); String sNum = sc.next(); char[] cNum = sNum.toCharArray(); int sum = 0; for(int i =0; i< cNum.length;i++) { sum += cNum[i] - '0'; //아스키 코드 48차이남 }.. 2024. 2. 26.
동시성 처리의 중요성과 방법 부트캠프에서 강의를 들으며 추가적으로 공부한 내용을 정리한 글입니다! 부족한 부분이 있다면 댓글 달아주시면 감사하겠습니다. 언제든 환영! 동시성 처리의 중요성 동시에 여러 요청이 들어오면 결과값이 정확하게 반영되지 않을 수 있습니다. 예를들어 100개의 재고량에 A가 5개, B가 3개, C 가 1개를 요청했다면, 우리가 생각하기에는 100-5-3-1 을 해서 요청 후 재고량은 91이라고 생각할 수 있습니다. 하지만 만약 요청이 동시처럼 보일만큼 비슷한 시점에 들어왔다면, 커밋 포인트가 95 일수도, 98일수도, 99가 될 수도 있습니다. (락으로 제한하는 방법이 있다) 또한 선착순 이벤트와 같이 순서가 중요한 상황에서는, 동시성 문제를 해결하지 못한 경우 요청이 유실되고 제한수 이상으로 쿠폰이 발급되는 .. 2024. 1. 26.
Queue 생성하기 Failed to declare queue: QUE_NAME(예시로 큐 이름을 QUE_NAME이라고 짓겠음) 조회시에 디비에 접근하기 전에 순서를 보장하고, 어느정도 동시성을 보장하기 위해 레빗엠큐를 사용했다. 위와 같은 에러가 뜨고 코드가 종료돼서 읽어 보니 큐가 없다는 거였다..ㅋㅋㅋ 작업하는 컴퓨터를 바꾸면서 세팅을 새로 했는데 이참에 큐 생성하는 것을 기록하고자 한다. 생각보다 쉬웠음! 래빗엠큐 관리자 페이지에 접근하기 위해 아래의 명령어를 cmd창에 입력한다. cmd 창 여는 단축키는 참고로 window+r ! (윈도우 기준) docker exec rabbitmq rabbitmq-plugins enable rabbitmq_management 그리고 래빗엠큐를 켜서 8080 경로에 들어간다. 그리.. 2024. 1. 12.
No spring.config.import property has been defined spring: config: import: "optional:configserver:" yml 혹은 properties 파일에서 위의 설정을 추가해주면 된다아.. 2024. 1. 10.
CQRS 패턴 적용기 - 배민 우아콘 정리 MSA로 프로젝트를 진행하며 한 레포지에 조회와 생성 메서드가 다 들어가있으니 가독성도 떨어지고 DB를 직접 조회하는 것에 대하여 부담을 느꼈다. 서비스 구현이 많지 않은데도 불구하고 벌써부터 이런 문제가 생기면 안 되겠다 싶어 찾아보니 CQRS 패턴을 알게 되었고, 배민에 괜찮은 강의가 있어 보고 정리하였다. 확장성을 고려해 CQRS 패턴을 꼭 도입하고 싶은데, 다음엔 직접 적용한 경험을 기록하겠다! 1.B마트를 운영하며 마주한 문제 RDBMS 기반의 서비스들이 그렇듯 아주 많은 서비스가 데이터를 관리하는 차원에서 정규화한 데이터와 노출 도메인의 데이터 구조가 다르다. B마트도 MySQL을 이용하고 있으며 지점, 카탈로그, 상품에 대한 메타 정보를 입력, 수정, 노출하며 이를 위한 매핑 설정을 최종 단.. 2023. 12. 9.
[Query DSL] not initialized in the default constructor query dsl 은 추가적으로 설정을 해줘야 한다. 스프링 부트 버전에 따라 설정이 달라져 번거로운 부분이 있는데 이 글은 스프링부트 3 을 기준으로 진행했다. not initialized in the default constructor compile 중 생긴 에러이다. 객체의 기본 생성자에서 초기화 되지 않은 멤버 변수를 사용하려고 할 때 나오는 에러인데, 나같은 경우에는 서비스단에서 발생했다고 알림이 떴다. 쿼리 dsl 설정 전에는 잘 돌아가던 코드라 코드 문제가 아닌 설정 문제라고 생각했다. gradle 버전 5를 사용하는데 버전 4로 설정이 되어있어 의존성을 다시 심어주었다. 이왜진,, gradle도 버전이 올라가면서 프로젝트에 추가하는 방법이 달라졌다고 한다. 그래들 버전을 확인한 후 맞는 주.. 2023. 12. 7.