-
java-ims 파일 업로드 기능 만들기 먼저 자바 파일 IO부터 알아보기 파일 쓰기 jvm 데이터를 API를 통해 파일에 쓰기 FileOutputStream : 파일 쓰기 API, 생성할 때 경로를 지정하지않으면 해당 프로젝트 루트 경로에 생성됨(절대경로 지정이 아니면 프로젝트 루트 디렉토리를 기준으로 생성 혹은 쓰기) IO를 위한 자원 사용 후 해제까지 해줘야함 데이터 쓰기 : byte 타입(배열까지) - FileStream이라면 byte 단위 쓰기, FileWriter를 사용하면 문자, 문자열 입력가능 덮어쓰기와 붙여쓰기도 고려해야함 : 각 io API마다 덮어쓰기를 할 것인지 붙여쓰기를 할...
-
java-ims ControllerAdvice, RestControllerAdvice @RestController와 @Controller의 차이 : 응답 데이터가 json이냐 뷰(.html)냐 차이 @RestControllerAdvice : response를 json으로 변환해주는 역할, rest api 구현할 때 사용 컨트롤러의 타입에 따른 예외처리 분기 같은 타입의 예외지만 각기 다른 처리를 할 수 있음 : json 응답, redirect 혹은 특정 view 응답 /* RestController */ @RestControllerAdvice(annotations = RestController.class) @Order(1) public class SecurityRestControllerAdvice { ... } /* Controller */ @ControllerAdvice(annotations = Controller.class) @Order(2) public class SecurityControllerAdvice { ... } ResponseEntity static 메소드 ResponseEntity의...
-
JPA DDL : 테이블 생성, 변경 등의 쿼리, 테스트 서버에서는 자동 변경하도록 설정하는 것이 괜찮지만 실서버에서는 그러면 안됨 스키마 : 데이터베이스 테이블 정보를 집약해서 하나 만들어두고, 레퍼런스 삼아서 JPA(정확히는 구현체) 작업을 함 키(pk) 생성할 때 : 대리키를 사용하라 키 생성 전략(자동 - 대리키) : 엔티티에 키를 할당하는 전략, 데이터베이스 마다 각각 다른 전략을 취하고 있음 IDENTITY : 키 생성부터 할당까지 데이터베이스에서 함, auto_increment 전략을 사용하려면 해당 전략을 사용해야함 SEQUENCE : 키 생성은 데이터베이스 시퀀스(키 생성...
-
java-ims layerd architecture - 계층을 만들어놨으면 이용하기 계층을 만들어놨으면 뛰어넘으려고 하지말고 해당 계층을 거치도록 코딩하기 아래 코드의 상황은 IssueController에서 Milestone의 정보를 얻어야하는데, 곧바로 MilestoneRepository로 가지말고 서비스 계층을 거치도록(직접적으로 사용하지말자 - 중간 계층이 상황에 따라 요청에 따른 응답 결과를 달리할 수 있도록) @Controller @RequestMapping("/issues") public class IssueController { @Autowired private MilestoneService milestoneService; @GetMapping("/{id}") public String show(@PathVariable Long id, Model model) { model.addAttribute(getEntityName(ISSUE), issueService.get(id)); model.addAttribute(getMultipleEntityName(MILESTONE), milestoneService.get()); return String.format("/%s/show", getEntityName(ISSUE)); } } 통합테스트(AcceptanceTest) 할 때, 테스트 할 때...
-
토비의 스프링으로 스프링 들여다보기 AOP 핵심 핵심 기능은 아니지만 필요한 부가기능이면서, 산발적으로 퍼져있는 것을 따로 모은 뒤 API를 통해서 핵심 기능을 가진 타겟 객체에 부가 기능을 적용시키는 것 부가기능의 모듈화 ProxyFactoryBean 사용해서 타겟의 메소드에 어드바이스 적용하기 Advise 인스턴스를 타겟마다 만들지않고 재사용할 수 있게 됨 : DI(타겟을 Advise에서 없애버리고 하나의 판을 만들고 advise와 target을 DI 받도록 해서 적용) 문제점 : 프록시를 적용할 타겟마다 ProxyFactoryBean을 사용해서 프록시 객체를 만들고 있음 - 이 자체도 낭비다(중복된 코드) @Test public...