본문 바로가기
반응형

전체 글183

파일 업로드 enctype = "multipart/form-data" 다른 종류의 여러 파일과 폼의 내용을 함께 전송할 수 있다. (그래서 이름이 multipart) 멀티파트 사용 옵션 properties 파일에 업로드 사이즈 제한 코드 작성 가능 spring.servlet.multipart.max-file-size=1MB spring.servlet.multipart.max-request-size=10MB 파일 업로드 실제 경로 입력 file.dir=파일 업로드 경로 설정 예) /User/Kim/study/file MultipartFile 파일 저장 로직 @Value("${file.dir}") private String fileDir; @PostMapping("/upload") public String saveFil.. 2023. 8. 25.
스프링 타입 컨버터 스프링 타입 변환 적용 예 스프링 MVC 요청 파라미터 @RequestParam, @ModelAttribute, @PathVariable @Value 등으로 YML 정보 읽기 XML에 넣은 스프링 빈 정보를 변환 뷰를 렌더링 할 때 conversionService 인터페이스 컨버팅 가능 여부 확인, 컨버팅 지원 인터페이스 분리 원칙(Interface Segregation Prinsipal) 클라이언트가 자신이 이용하지 않는 메소드에 의존하지 않아야 한다. 컨버터를 사용하는 클라이언트는 'ConversionService'만 의존하면 되므로, 컨버터를 어떻게 등록하고 관리하는지는 전혀 몰라도 된다. FormatterRegistry.addConverter() 컨버터를 추가하면 추가한 컨버터가 기본 컨버터 보다.. 2023. 8. 25.
예외처리 서블릿 밖으로 까지 예외가 전달되는 경우 서블릿의 예외 처리 방식 @GetMapping("/error-ex") public void errorEx() { throw new RuntimeException("예외 발생"); } @GetMappint("/error-500") public void error500(HttpServletResponse response) throw IOException { response.sendError(500); } 'Exception'의 경우서버 내부에서 처리할 수 없는 오류가 발생한 것으로 생각해서 HTTP 상태 코드 500을 반환한다. 서블릿의 예외처리 2가지 방식 Exception (예외) reponse.sendError (HTTP 상태코드, 오류메세지) Exception.. 2023. 8. 25.
로그인 처리 쿠키와 보안문제 쿠키값은 브라우저상에서 쉽게 바꿀수 있기 때문에 보안문제가 생길 수 있다. (클라이언트가 쿠키의 값을 강제로 변경하게되면 다른 사용자 로그인이 돼버린다) 쿠키에 보관된 정보를 훔쳐갈 수 있다. 해커가 쿠키를 한번 훔쳐가면 평생 사용할 수 있다. 로그인 유지를 하려면 쿠키가 사용되야하지만 보안이슈가 있다. 이 문제를 해결하기 위해 쿠키에 세션 저장소의 개념을 도입시켜 사용한다. 세션을 이용한 쿠키 보안문제 해결 예상 불가능한 복잡한 세션 id를 사용한다. 해커 입장에서 세션 id를 알게되어도 세션 id 자체만으로 알아낼 수 있는 중요한 정보가 없다. 세션 만료 시간을 짧게 설정하여 해커가 토큰을 알아내도 시간이 지나면 사용할 수 없게 또는 해킹이 의심되는 경우 해당 세션을 강제로 제거하면 .. 2023. 8. 19.
검증 처리 (Validation) Safe Navigation Operator "Object?." 문법은 Object가 null일경우 nullPointerException이 발생하는 대신, null을 반환하는 SpringEL 문법 BindingResult 스프링이 제공하는 검증오류를 보관하는 객체 바인딩할 model attribute가 있어야 하기 때문에 파라미터 순서가 무조건 @ModelAttribute가 먼저 와야함 @ModelAttribute에 데이터 바인딩 시 오류가 발생해도 컨트롤러가 호출됨 #fields BindingResult가 제공하는 검증 오류에 접근할 수 있다. FieldError FieldError는 두가지 생성자를 제공하는데 그 중 한가지 생성자에는 오류 필드를 담을 수 있다. FieldError 파라미터들 obje.. 2023. 8. 17.
메세지, 국제화 메세지 기능 다양한 메세지를 한곳에서 관리하도록 하는 기능 예) messages.properties 라는 메세지 관리용 파일을 만든 후 item=상품 item.id=상품 ID item.itemName=상품명 item.price=가격 item.quantity=수량 ... html들은 해당 데이터를 key 값으로 불러서 사용하는 것 국제화 메세지 파일(messages.properties)을 각 나라별로 별도로 관리하여 서비스를 국제화함 messages_ko.properties / messages_en.properties 등으로 나누어 관리할 수 있음 MessageSource 스프링 부트에서는 MessageSource를 자동 빈 등록 해줌 MessageSource 수동 빈 등록 방법 @Bean public M.. 2023. 8. 16.
타임리프 - 스프링 통합과 폼 th:object = "${item}" 에서 사용할 객체를 지정한다. th:field = "*{itemName}" 선택 변수식을 사용하여 field 이름만으로도 바인딩이 가능하다 태그 속성으로 id, name을 field명으로 자동 생성해주고, field의 값을 value에 자동으로 넣어준다. 단일 체크박스 form에서 _open(히든 필드 추가)을 사용하면 null로 넘어온 open의 값을 false로 바꿔준다. 스프링 MVC가 언더바가 붙어있는 필드명의 값만 들어온것을 확인하고 필드명의 값을 false로 바꿔줌 더 간단한 방법으로 th:field를 사용하면 히든필드를 추가할 필요없이 자동으로 처리된다. (히든필드를 타임리프가 자동으로 만들어줌) th:field를 사용하면 불러온 값이 true일 때 c.. 2023. 8. 15.
타임리프 기본 표현식 / 리팩토링 - 타임리프 표현식 수정 간단한 표현 변수 표현식: ${...} 선택 변수 표현식: *{...} 메시지 표현식: #{...} 링크 URL 표현식: @{...} 조각 표현식: ~{...} 리터럴 텍스트: 'one text', 'Another one!',… 숫자: 0, 34, 3.0, 12.3,… 불린: true, false 널: null 리터럴 토큰: one, sometext, main,… 문자 연산 문자 합치기: + 리터럴 대체: |The name is ${name}| 산술 연산 Binary operators: +, -, *, /, % Minus sign (unary operator): - 불린 연산 Binary operators: and, or Boolean negation (unary operator): !, not 비교와 .. 2023. 8. 14.
취업 준비, 프로젝트 리팩토링 중단 / 강의보기 시작 리팩토링 순서 1. 테이블 재정의 → 테이블 정의서 새로 만들기 [20230727 테이블 정의서 완료] 2. erd 재정의 → 기존 erd 수정하기 [20230728 erd 수정 완료] 3. jar로 배포 → 기존 jsp 사용으로 인해 war로 설정했던 부분을 jar로 변경 [20230730 프로젝트 생성 완료] 4. 패키지 구조 변경 → 정리되어있지 않은 기존의 패키지 구조(특히 repository부분)를 변경 [20230730 구조 변경 완료] 5. 템플릿 엔진 thymeleaf로 바꾸기 → 기존의 jsp의 흔적 없애기, 불필요한 페이지나 버튼 제거 [20230731~ 진행 중] 6. 재정의된 테이블 구조에 맞는 프로젝트로 코딩 [20230731~ 진행중] 7. mybatis를 jpa로 변경(아직 공.. 2023. 8. 12.
반응형