일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 유레카
- Zuul
- 도커
- 백트래킹
- 다익스트라
- 이분 탐색
- 플로이드 와샬
- spring boot
- Gradle
- BFS
- Logback
- 메모이제이션
- 이분 매칭
- Spring Cloud Config
- Java
- 구간 트리
- 달팽이
- 주울
- 스택
- 비트마스킹
- ZuulFilter
- 게이트웨이
- 완전 탐색
- spring cloud
- 스프링 시큐리티
- docker-compose
- 트리
- dp
- 구현
- 서비스 디스커버리
- Today
- Total
목록분류 전체보기 (387)
Hello, Freakin world!
단위 테스트 ... import static org.assertj.core.api.Assertions.assertThat; public class TestChatRoomController { ChatRoomController controller; DummyRequestHandler requestHandler; @Before public void init() { controller = new ChatRoomController(); requestHandler = new DummyRequestHandler(); } @Test public void testInvoke_bracedUrlMethod() throws NoSuchMethodException, InvocationTargetException, Illega..
글의 제목만으로는 추가하려는 기능의 정의가 와닿지 않는다. 간단하게 코드를 이용해 추가하려는 기능을 정의하자. 기능 정의 @RequestMapping(method = Method.GET, url = "/room/{id}") public Response canJoinRoom(Request request, int id) { ... } @RequestMapping의 url 속성의 값을 살펴보자. 특이한 점은 "{ id }" 라는 중괄호가 포함된 url을 가지고 있다. 이는 스프링 프레임워크를 써본 사람이라면 한번 쯤은 써본 기능이다. 중괄호는 일종의 유연한 url 매핑이 가능하도록 해준다. 예를 들어, "/room/12", "/room/idstring" 은 모두 위의 url을 만족한다. 다만, 아래 인수의 i..
public Response dispatch(Request request) { Method[] methods = RequestHandler.class.getMethods(); Optional handlerOpt = findHandler(methods, request.getUrl(), request.getMethod()); try { Method handler = handlerOpt.orElseThrow(() -> new NotFoundException("url 에 해당하는 핸들러를 찾지 못했습니다.")); return invoke(requestHandler ,handler, request);; } catch (NotFoundException e) { e.printStackTrace(); return ne..
이걸 알아내서 뭐하냐 싶기도 하지만, 이걸 알아야만 구현이 가능한 것들이 있었다. 예를 들면, Spring에서 지원하는 @RequestMapping(url = "/hello/{id}") 에서 요구되는 기능들이다.스프링에서 위 애너테이션은 url을 매핑할 뿐만 아니라 인수 중 id와 이름이 같은 인수에 값을 바인딩해준다. 이를 구현하기 위해서는 메서드 인수의 이름을 알아야 한다. 그래야 이름을 이용해 인수가 선언된 순서를 알 수 있고, 순서를 알아야 순서에 따라 해당값들을 바인딩해서 넘겨줄 수 있다.(자세한 구현은 나중에 토이 프로젝트에 이 부분을 정리할 예정이다.) 그런데 인수의 이름을 알려면, 단순하게 api만 사용해서 알아낼 수 없다는게 문제다.컴파일 옵션에 "-parameters" 추가해줘야 한다...
이 프로젝트는 본래 채팅앱 프로젝트의 일부분이었으나, 현재 채팅 프로젝트의 덩치가 워낙 커지는 바람에... 따로 분리했습니다. 그리고 이 부분은 애너테이션, 정규표현식, 리플렉션 등을 이용한 프레임워크에 필요한 편리한 기능을 구현하는 바탕이 될 수 있다고 판단해 따로 정리해두려고 합니다. 시나리오 서버는 클라이언트의 요청을 받고 controller 에 해당하는 객체에 request 정보를 넘겨 준다. 컨트롤러는 request에 포함된 url에 따라 핸들러를 매핑할 책임을 가진다. 우리는 이 핸들러들을 식별하기 위해 handlers 클래스를 작성할 때, 미리 식별정보를 같이 적어둔다. @RequestMapping 이라는 애너테이션을 이용해 이를 수행한다. @RequestMapping에 url format을..
plugins { id 'java' } group 'org.example' version '1.0-SNAPSHOT' sourceCompatibility = 12 tasks.withType(JavaCompile) { options.compilerArgs.add("-parameters") } 핵심이 되는 코드는 맨 아래부분 tasks.~ 부분이다. 위는 그루비라는 언어로 작성됐다. 하지만 자바와 비슷한 구석이 많아, 자바만 알아도 얼핏 이해는 된다. JavaCompile 은 Task의 타입 이름이다. Gradle은 빌드에 필요한 기능에 따라 Task라는 것으로 그룹화했다. JavaCompile 관련은 Gradle 공식 문서에서 이 부분을 뒤져보면 알아볼 수 있다. JavaCompile는 options 라는 ..
자바에서 정규표현식을 사용하기 위해 알아야 하는 클래스는 두 가지입니다. Pattern 과 Matcher 클래스입니다. (api 자체에 대한 설명은 넘어가겠습니다. 너무 간단하기 때문입니다!) 일단 예제를 통해 살펴보겠습니다. import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexExample { @Test public void testRegex() { String source = "/hello/{id}/{name}"; // 찾을 대상이 포함된 전체 문자열 Pattern pattern = Pattern.compile("\\{[\\w\\d]+\\}"); // 찾고 싶은 문자열 혹은 문자열의 패턴 Matcher ma..
POST /room | 채팅방 생성 요청 응답 : 성공 또는 실패여부 GET /room/{ id } | 채팅방 조회 요청 응답 포맷 상태코드 설명 ChatRoom Json객체 GET /rooms | 채팅방 리스트 요청 응답 : List POST /room/{roomId} | 채팅방 참가 요청 응답 : 참가 가능시 id에 해당하는 ChatRoom 객체를 body에 Json 형태로 보낸다. 참가 불가능시 body는 null이다. DELETE /room/{roomId} | 채팅방 삭제 요청 응답 : 성공 또는 실패 여부 Request 메세지 형식 | method url | | [data] 응답 메세지 형식 | 상태코드 [상태 설명] | | [data]
오해 동기 방식의 IO 작업에서 서버소켓은 한 클라이언트와 통신 중일때, 다른 클라이언트와 통신할 수 없다. 그래서 나는 서버소켓에서 accept()를 호출하면 서버소켓과 클라이언트 소켓이 서로 1:1로 연결되는 이미지로 이해했는데, 이는 2퍼센트 부족한 이해였다. 부족했던 2퍼센트 때문에 어떻게 동기방식의 서버가 다수의 클라이언트의 요청을 처리하게 만들지 상당히 고민했었는데, 몇몇 예제들을 살펴보니 내가 accept()의 동작 방식을 완전히 잘못 이해하고 있다는 것을 깨달았다. 추정 이 그림은 동작테스트를 통해 내가 추정하는 모델이다. 클라이언트에게 공개되는 entry port가 존재한다. accept는 entry port로 접근하는 클라이언트 소켓을 내부에서 자동 지정된 포트 번호의 소켓에 매핑해주는..