본문 바로가기
반응형

Back-End/Spring Boot24

트랜잭션 트랜잭션 ACID 원자성(Atomicity) : 원자처럼(원자는 절대 깨지지 않는것 처럼) 마치 하나의 작업인것처럼 일관성(Consistency) : 무결성 제약 조건 항상 만족 격리성(Isolation) : 동시에 같은 데이터를 수정하지 못하도록 지속성(Durability) : 중간에 시스템에 문제가 발생해도 데이터베이스 로그 등을 사용해서 성공한 트랜잭션 내용을 복구해야 함 격리성 완전한 격리성을 보장하려면 직렬처리가 가장 적합하나, 성능이슈가 생기기 때문에 트랜잭션 격리 수준(Isolation level)을 선택할 수 있다. 수동 커밋 모드 set autocommit false; 락(lock) SET LOCK_TIMEOUT 10000 (10초안에 락을 얻지 못하면 LOCK TIMEOUT 오류 발생됨.. 2023. 9. 4.
JDBC 이해 JDBC 표준 인터페이스 JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트 하는 방법을 제공한다. Connection - 연결 Statement - SQL 전달 ResultSet - 결과 응답 JDBC 드라이버 JDBC 인터페이스를 각각의 DB 벤더(회사)에서 자신의 DB에 맞도록 구현해서 라이브러리로 제공한다. PreparedStatement Statement의 자식 타입 '?'(물음표 기호)를 통한 파라미터 바인딩을 가능하게 해줌 SQL Injection 공격을 예방하려면 PreparedStatement를 통한 파라미터 바인딩 방식을 사용해야함 DriverManagerDat.. 2023. 8. 30.
파일 업로드 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.
반응형