- Today
- Total
목록java (24)
개발하는 고라니
코딩테스트 연습 - 여행경로 [["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"] programmers.co.kr [DFS + 백트래킹] 1) 도시에 각각 고유 번호를 부여해서 , 맵을 각각 만든다. 2) 도시 번호와 도시명이 있으니 티켓을 반복해 돌며 인접리스트를 만든다. 3) 탐색을 한다. /* * ticketSize = 주어진 티켓이 총 몇장인지? * size = 현재 티켓을 몇 장째 처리하고 있는지 * cur = 현재 방문하고 있는 도시의 번호 * */ static boolean DFS(int ticketSize, int size, ..
Spring을 사용해보았다면 필요한 객체를 주입받는 @Autowired 어노테이션을 알 것이다. 이는 어플리케이션 전체에 공유되는 하나의 객체를 Spring IoC 컨테이너에서 주입받아 사용하는 것인데, 이는 Singleton 패턴이라고 한다. Spring의 @Autowired를 사용하지 않고 모든 곳에서 공통으로 사용될 수 있는 하나의 객체를 만들어보자. 내용 3개의 컨트롤러와 3개의 View가 필요하다. AController, BController, CController /a/index.html, /b/index.html, /c/index.html 전역에서 쓰일 객체 SimpleStorage private Map map을 멤버로 갖는다. map은 key('a', 'b', 'c')로 value(List..
진행하기 앞서... RDB에 Member라는 테이블이 있고, PK는 id이고 salary라는 컬럼이 존재하며 이는 연봉을 나타낸다. 연봉 3000만원 미만의 Member의 salary를 일정 크기만큼 인상한다면 어떻게 SQL을 짜겠는가? 나라면, UPDATE MEMBER SET SALARY = SALARY * 1.3 WHERE SALARY 영속성 컨텍스트에 반영된다. 3. Commit 시점에 변경 감지(Dirty Checking..
진행하기 앞서.. JPA를 한다면 JPQL(Java Persistence Query Language)의 사용은 필수적이다. JPQL에는 경로 표현식이라는 것이 존재하는데, 경로 표현식이란 점(.)을 찍어 객체 그래프를 탐색하는 것이라고 설명할 수 있다. SELECT M.name FROM Member M #상태필드 SELECT M.team FROM Member M #단일 값 연관 경로 SELECT T.memberList FROM Team T #컬렉션 값 연관 경로 위 3가지에 따라 결과가 달라지고, 내부적으로 동작하는게 달라지므로 꼭 주의해서 사용해야한다. 상태필드 : 단순하게 값을 저장하는 필드 연관필드 : 연관 관계를 위한 필드 단일 값 연관 필드 : @ManyToOne, @OneToOne 처럼 xxx..
Spring Boot 환경에서 RabbitMQ로 메세징 해보는 간단한 예제이고, 원본은 spring.io의 docs이다. 이 예제를 구현해보기 위해 RabbitMQ가 설치되어있어야 한다( 혹은 docker로 가능). 이 예제는 AMQP RabbitMQ Server를 설정하는 과정을 겪을 수 있고, 메세지를 발행(pub)과 소비(sub)하고 스프링부트 어플리케이션을 만들어 RabbitMQ 서버와 상호작용한다. Spring AMQP(Advanced Message Queuing Protocol)의 RabbitTemplage을 사용함으로써 메세지를 발행(pub)하고, MessageListenerAdapter를 사용해 POJO(Plain Old Java Object) 형태의 메세지를 소비(sub)하는 어플리케이션..
Remote procedure call (RPC) 요청 / 응답 패턴 예시 저번 2번째 튜토리얼에서 여러 worker들 사이에 시간이 걸리는 업무를 분배하는 법을 배웠다. 그러나 원격 컴퓨터에서 기능을 동작해야하고 결과를 기다려야한다면 어떨까? 이는 좀 다른 얘기이다. 이 패턴은 보편적으로 Remote procedure call 또는 RPC라고 알려져있다. 이번 튜토리얼에서 우리는 RPC 시스템을 구축하기 위해 RabbitMQ를 사용할 것이다. (하나의 client와 확장가능한 RPC서버를). 분배할 가치가 있는 어떤 업무도 갖고있지 않을 때, 피보나치 수열을 반환하는 더미 RPC 서비스를 만들 것이다. Client Interface RPC 서버 사용법을 설명하기 위해 간단한 client 클래스를 만들 ..
Topics 패턴(주제)에 기반한 메세지만 받아보기 이전 튜토리얼에서 logging System을 개선했다. * 요약 - before : 하나의 producer -> 하나의 exchange (fanout) -> 여러개의 Queue -> 각 Queue에 모든 메세지 push -> 모든 consumer 동일한 메세지 수신 - after : 하나의 producer -> 하나의 exchange (direct) -> 여러개의 Queue -> 각 Queue마다 원하는 severity의 메세지 push -> 각 consumer가 받아보는 메세지가 다를 수 있음 'fanout' 타입의 교환자는 오직 가짜 방송을 할 수 있는 대신, 우리는 'direct' 타입의 교환자를 사용했고, 선택적으로 log를 수신하는 가능성을 ..
Routing [RabbitMQ] Tutorials (3) Publish / Subscribe [RabbitMQ] Tutorials (2) Work Queues - worker들에게 작업을 분배(경쟁 consumers 패턴) 저번 포스팅에서 우리는 이름붙인 큐로부터 메세지를 주고받고 하는 프로그램을 짰다. 이번 튜토리.. dev-gorany.tistory.com 이전 튜토리얼에서 간단한 logging System을 만들어보았다. 많은 수신자들에게 로그 메세지를 송출할 수 있었다. 이번 튜토리얼에서는 특징을 추가할 것 이다. (메세지들 중 일부만 subscribe하는 것이 가능하게 할 것이다.) 예를 들어, 콘솔에서 모든 로그 메세지를 계속 출력하는 동안, 디스크 공간을 절약하기 위해 중요한 오류 메세지만..