본문 바로가기
자바로 배우는 리팩토링 입문 2 ※자바로 배우는 리팩토링 입문 책을 보고 작성하였습니다. 소스코드에 포함되는 특정한 숫자를 매직넘버라고 한다. 예를들어 '입력가능한 문자열의 길이는 100문자 이하'라는 제한이 있을때, 문자열 길이한계인 100이라는 숫자를 매직넘버라고 할 수 있다. 매직넘버를 쓰면 안되는 이유 1. 무엇을 뜻하는지 바로 알기 어렵다. 매직넘버(100) 대신에 상징이되는 이름(MAX_INPUT_LENGTH)을 사용하면 의미를 알기 쉬워진다. 기호상수란 MAX_INPUT_LENGTH처럼 기호를 사용한 상수이다. 2.매직넘버는 수정하기 어렵다. 현재는 '입력 가능한 문자열 길이는 100문자 이하'지만 훗날 요구사항이 변해서 '200문자 이하'가 될 지도 모른다. //before if (100 < input.length()) .. 2019. 7. 7.
인코딩 개념정리 Request Encoding 따로 인코딩 방식을 설정하지 않으면. Tomcat은 기본적으로 ISO-8859-1 으로 인코딩을 한다. 1. QueryString 인코딩 web.xml에서 설정은 쿼리스트링형태로 들어오는 문자들를 인코딩하는 방식을 결정한다. 따라서 get방식으로 전송하면 아래에서 설정한다. 2.Request Body 인코딩 POST방식은(Request Body에 포함된 데이터) HttpServletRequest의 인코딩 설정을 변경해야한다. *Servlet컨테이너가 POST를 파싱하기 전에 호출해야함* request.setCharacterEncoding('인코딩방식'); Response Encoding 1.JSP 에서 인코딩 PageEncoding으로 설정이 가능하다. 2.Response객.. 2019. 7. 6.
Traffic Control 정리 네트워크는 환경은 다양하다. 개발당시 테스트했던 환경보다 대역폭이 좁을수도 있고. 처리 지연율이 낮을 수도 있다. 그렇기 때문에 실제 상황에서는 개발 테스트에서 일어나지 않았던 문제들이 발생 하기도 한다. 이러한 상황을 전부 고려할 수 없겠지만, 실제 환경을 가정하여 네트워크성능을 측정하는것은 반드시 필요하다. 1. TC(Traffic Control)란? TC는 사용자로 하여금 네트워크의 Queue와 Queuing 매커니즘을 제어 할 수 있도록 하는 도구이다. 라우터에는 패킷을 수신 및 전송하는 대기열 처리 시스템과 매커니즘 경합이 있다. 이것을 Traffic Control이라고 한다. Traffic Control은 일반적으로 FIFO를 사용한다. (하나의 대기열에서 패킷을 수집하고 수집한 패킷을 대기열.. 2019. 7. 6.
form에서 파라미터를 전송하는데도 request.getParameter()에 실패할때 언젠가 한번, Form에서 input태그로 입력을 받고, 서버에 전송하는것을 Request문을 보고 확인했으나, 서버쪽에서 request객체의 getParameter메서드를 아무리 호출해도 값을 받을 수 없었던 문제를 겪었던 적이 있다. 그 이유는 Content-Type를 잘못 설정했기 때문이였다. request.getParameter로 데이터를 읽어들일때 서블릿컨테이너는 content-type이 application/x-www-form-urlencoded 이면 자동으로 request의 body를 읽어 Map 형태로 변환한다. 하지만 그 외의 content-type을 사용하고 있다면 POST요청시 위와같은 방법으로 데이터 추출이 불가능하다. request body를 stream을 이용하여 읽어와야 한다... 2019. 7. 3.
자바로 배우는 리팩토링 입문 1 ※자바로 배우는 리팩토링 입문 책을 보고 작성하였습니다. 단순히 돌아가는 코드를 넘어, 우아한 코드를 작성하고 싶은 마음에 이 책을 읽기 시작했다. 리팩토링이란 외부에서 보는 프로그램 동작은 바꾸지 않고 프로그램의 내부구조를 개선하는 것 단순히 소스코드를 정리하는 것이 아닌, 반드시 '외부에서 부는 프로그램 동작에 변화가 없음'을 확인해야 한다. 리팩토링해도 외부에서 보는 프로그램 동작은 변하지 않는다. 리팩토링 하면 프로그램의 내부 구조가 개선된다. 리팩토링과 유닛테스트 리팩토링 후 동작이 변하지 않았다는것을 확인하기 위해 최소한 유닛테스트(단위테스트)를 진행한다. 유닛테스트는 개발자가 직접 하는 부분테스트이며 보통은 클래스 하나 또는 패키지 하나를 테스트 대상으로 삼는다. 테스트 시점 리팩토링 전에 .. 2019. 7. 2.
파일업로드/삭제 로직개선 그동안 개인프로젝트를 진행하며 파일업로드/삭제는 DB에서 아래와 같이 구현해왔다. 업로드 사용자가 업로드 한다. DB에는 파일이름을 INSERT하고 서버는 파일을 저장. 삭제 사용자가 파일을 선택, 삭제버튼 클릭 DB에서 관련된 정보를 DELETE하고 서버에서는 파일을 삭제하는 로직을 돔 그런데.. 파일을 삭제하는 사용자가 많아지면 서버에서는 잦은 I/O연산을 하게된다. 책에서 본것을 조금 응용해서... 파일 삭제여부를 나타내는 컬럼을 하나 둔 다음에 사용자가 파일 삭제를 클릭하면, 바로 DB에서 정보를 삭제하고, 서버에서 파일삭제 로직을 도는것이 아닌 단순히 삭제여부 컬럼에 표시를 하는것이다. 당연히 사용자에게 뿌려줄 파일업로드 목록의 WHERE 조건에는 삭제여부 컬럼이 들어가겠지. select * f.. 2019. 7. 2.