안녕하세요, Brad입니다. 어제 오늘 새로 알게된 사실에 대해 정리해볼게요. Content Length 오류 관련 미션을 수행하면서 클라이언트에서 Content Length 관련한 오류가 많았습니다. 그래서 전 처음에 제가 적어주는 Response Header의 내용 때문에 그런 오류가 발생하는 줄 알고 이후에 해결하기로 하고 넘겼습니다. 그런데 어제 Pobi에게 물어보면서 제가 코드를 잘못 짠 결과라는 것을 알게되었습니다. Response의 body부분을 인스턴스 변수로 사용하다보니 생긴 문제였습니다. 200코드 Response 객체를 싱글턴으로 사용하고 있었습니다. 그런데 이 안에 인스턴스 변수로 body를 사용하다보니 여러 요청 간 간섭이 생겼던 것입니다. 스택영역에 저장되는 메서드와 지역변수와 ..
서버N대성능개선 안녕하세요, Brad입니다. 어제 수업시간에 서버가 여러 대일 경우 성능개선 방안에 대해 배웠는데요. 정리해볼게요. Scalibility Scalibility는 우리말로 말하면 '확장성'이죠. 확장성은 트래픽 양에 관계없이 유연하게 처리할 수 있는 능력을 말합니다. scale을 하는 방법은 2가지가 있는데요. scale up과 scale out입니다. scale up 기존 하나의 서버를 더 크고 빠른 서버를 교체하는 것을 말합니다. 이 방법은 보통 scale out 방식에 비해 비용이 비싸다는 점이 좋지 않지만 설계의 복잡도는 크지 않다는 점에서 장점이 있습니다. scale out 서버의 개수를 늘려서 규모를 늘리는 것을 말합니다. 비용이 상대적으로 저렴하지만 설계가 복잡하다는 단점이 있..
programmers. 서울에서 경산까지 이 또한 동적문제인데요. 이 전 문제에서 동적계획문제에 대한 감을 잡았다고 생각했는데 생각보다 쉽지 않더라구요. 이전에도 말씀드렸듯이 동적문제에서는 dp배열을 어떻게 정의하느냐가 가장 중요합니다. 저는 처음에 이렇게 가정했습니다. dp[i][j] : 도보로 i번째, 자전거로 j번째 이동했을 때 최대 모금액 그럴듯하죠. 이전에도 이런식으로 문제를 풀었으니까요. 그런데 이게 제대로 작동할까요? 아닐 것 같습니다. 이전 카드문제에서는 left, right 배열이 각각 따로 주어져서 '왼쪽에서 i번째, 오른쪽에서 j번째'가 가능했습니다. 하지만 이번의 경우는 조금 다릅니다. 왜냐하면 하나의 일련의 구간에 대해 도보와 자전거 중 하나를 골라서 타야하기 때문이..
programmers. 카드 게임 문제의 갈피를 잡지 못해 다른 사람의 코드를 참고하였습니다. 동적계획문제 라는 것이 그 느낌을 알기전엔 참 어떻게 해결해야 할지 알기가 힘든 것 같아요. 그래도 이번 문제를 통해 또 다시 쪼금(?!) 감을 잡을 수 있었습니다. 동적계획에서 dp배열을 만들때는 그것을 어떻게 정의하는지가 중요합니다. 이 문제 같은 경우 이와같이 정의할 수 있죠. dp[i][j] = 왼쪽 i번째, 오른쪽 j번째일 때 최대값을 가진다 위와 같이 정의한다면 문제의 상황은 다음과 같이 해석할 수 있을 것입니다. dp[i - 1][j - 1] = 양쪽 모두 버릴 때 dp[i - 1][j] = 왼쪽만 버릴 때 dp[i][j - 1] + right[j - 1] = 오른쪽만 버릴 때 처음보았을 때 이게 ..
Today's Dev Notes(2019-01-20) 안녕하세요, Brad입니다. 약 3일동안 틈틈히 '웹 서버'를 만드는 미션을 진행해봤는데요. 최근 손으로 기록하면서 메모를 하고 그게 익숙하지 않아 매일 정리하지 못했네요. 오늘 step1 PR을 끝냈는데요. 진행하면서 고민되었던 부분, 그리고 해결한 내용에 대해 정리해볼게요. 기존에 Spring 프레임워크를 사용하다가 막상 프레임워크 없이 코드를 짜려고 하니 정말 막막하고 여기저기 infra 코드들이 섞이다보니 정말 보기 좋지 않더라구요. 그래서 사실 step1은 다른것 구현없이 요구사항에 맞춰서 진행하면 되는데 욕심내면서 Spring프레임워크를 만드려고 했습니다. 물론 구현하는 것은 대충이나마 큰 문제가 없었지만 효율성 측면이나 복잡한 코드에 대해..
Today's Dev Notes(2019-01-17) 안녕하세요, Brad입니다. 오늘은 Java의 고급주제 중 하나인 Reflection에 대해 배웠는데요. 정리해볼게요. Java Reflection (발표 : soop) Java Relection없이는 자바는 동적으로 클래스를 생성할 수 없습니다. 동적으로 객체를 만든는게 왜 중요할까요? 반대로 정적인 것은 뭘 의미할까요? 동적으로 객체를 만든다는 것은 컴파일 시에 new 를 사용해서 일반적으로 객체 생성하는 것과 다르게 런타임 시에 클래스 경로를 통해 객체를 만드는 것을 말합니다. 자바는 인터프리터 언어가 아닌 컴파일 언어입니다. 인터프리터 언어와 컴파일 언어는 뭐가 다를까요? 인터프리터 언어는 한번에 기계어로 바꾸는 컴파일 과정 없이 바로바로 소스..