-
java-ims 내부 flow Request 메세지 파싱 Request 객체 생성 Request에 핸들러(컨트롤러) 요청 : path를 가지고 있기때문에 위임 컨트롤러에 Request 넘겨주며 처리 요청 ResponseEntity(HttpMethod, Header, Body) 생성 Response 객체 응답하기 Response 작성할 때 필요한 데이터를 가진 ResponseEntity 만들기 빌더 패턴으로 만들기 장점 : 조립하듯이 객체를 생성할 수 있음, 객체 생성 시 설정해야할 필드가 많아지면서 선택적으로 필드를 설정할 수 있게할 때 좋음(유연성), 특정 필드만 깔끔하게 기본값을 설정해둘 수 있음, 필드 각각의 할당 조건이 생길 때 분리해두면 코드가...
-
java-was RequestLine/Headers/Body 생성자에서 처리하는 작업을 유틸리티 클래스를 만들기 보기좋은 코드를 만들기위해서 인자를 처리하는 작업만을 하는 클래스를 따로 만들기 상태값을 가지지않고 메소드 인자로 처리 대상을 받아 처리하기 : static 메소드 public class RequestUtils { public static List<String> splitRequestLine(String requestLine) { return Arrays.asList(requestLine.split(" ")); } public static List<String> splitPathAndParams(String pathAndParams) { return Arrays.asList(pathAndParams.split("\\?")); } public static Map<String, String> splitQueryString(String queryString) { return splitValues(queryString, "&"); } private static Map<String, String> splitValues(String target, String regex) { if (Strings.isNullOrEmpty(target)) {...
-
java-was 기존 코드 분석하기 서버 소켓(8080 - 웹서버가 80을 사용하고, WAS는 8080 리버스 프록시)을 만들어두고 클라이언트 소켓의 연결 요청을 기다림 클라이언트 소켓이 연결되면 클라이언트의 요청을 처리할 핸들러(쓰레드)를 실행시킴 : 클라이언트 연결 Request 만들기 Request 담당 오브젝트 테스트하면서 만들기 Request 생성자 설계 : InputStream을 인자로 받음 매번 브라우저로 요청을 보내고 HTTP 메세지를 읽지않기위해 모의 HTTP 메세지로 내용이 구성된 파일(request.txt)로도 읽을 수 있게) request.txt 읽기 gradle, maven은 정해진 디렉토리에 정해진 파일을 넣어야함 : resource를 class path에 넣어두고...
-
java-ims 다운로드 기능 수정하기 다운로드 리턴 타입 수정 이전 코드 : AttachmentService에 download를 요청해서 리턴받는 데이터의 타입이 PathResource였음 : PathResource는 프로젝트 패스에 존재하는 파일을 가져오는 API, 특정한 유형의 파일에만 국한된 코드였음 변경하기 : WritableResource로 리턴타입 변경하기 - PathResource의 상위타입(인터페이스), FileSystemResource, FileUrlResource, PathResource의 인터페이스 구체적인 타입이 아닌 확장성을 고려해서 인터페이스와 같은 추상적인 개념을 리턴타입, 파라미터 타입, 필드 타입으로 지정해야함 @GetMapping("/{id}") public ResponseEntity<WritableResource> download(@LoginUser User loginUser, @PathVariable Long issueId, @PathVariable Long id) throws IOException { . ....
-
java-ims 다운로드 기능 만들기 업로드 했던 파일을 반대로 다운로드 하는 기능을 만들어야함 특정 이슈에 특정 유저가 올린 특정 파일을 다운로드 업로드 했을 때 AttachmentRepository에 업로드 정보를 저장함 : 이슈 id, 사용자 id, 첨부파일 uuid(식별자 - 런타임 시에 고정된 전략이라서 static 메소드를 사용했지만 AttachmentNameConverter도 런타임 시에 다양한 전략을 사용하게끔 한다면 DI로 변경해도됨)와 origin name 등 public class AttachmentService { public Issue upload(User loginUser, Issue issue, MultipartFile file) throws IOException { String savedFileName = fileSaver.save(file, AttachmentNameConverter.convertName(file.getOriginalFileName())); Attachment...