본문 바로가기

전체 글

@Service, @Controller, @Repository 과 @Component의 차이는? @Component를 구현한 @Service, @Repository, @Controller에 대해서 @Component의 차이는 무엇인지 왜 @Component만 사용하면 안되는지 의문점이 생겨 알아보았는데요. @Repository Spring에서 지원하지 않은 Exception을 Spring Exception으로 전환하기 위해서는 @Repository 애노테이션을 사용해야합니다. @Repository 애노테이션이 적용된 메소드에서 Exception이 발생할 경우 UnChecked Exception인 DataAccessException으로 전환시킨다고 합니다. ex) 선언적 트랜잭션을 적용한 메소드에서 DB관련된 오류가 발생해도 롤백이 가능한 이유 CheckedException, UnCheckedExce.. 더보기
MariaDB에서 사용하는 스토리지 엔진에 대해 알아보자 오늘은 MariaDB에서 사용하는 스토리지 엔진에 대해서 알아볼텐데요. 스토리지 엔진의 종류은 8가지이나 여기서는 MyISAM과 InnoDB만 다룰예정입니다. MariaDB에서 테이블을 생성할 때 기본적으로 적용되는 엔진이 InnoDB입니다. 그렇다면 각각의 스토리지 엔진에 대한 특징을 알아보겠습니다. MyISAM Table-Level Locking 트랜잭션과 ACID를 지원하지 않음 외래키 지원 X InnoDB Row-Level Locking 트랜잭션과 ACID를 지원 외래키 지원 MyISAM은 Table Level로 Locking하기 때문에 CRUD가 빈번한 서비스의 경우 적절하지 않으며 검색 위주의 서비스에 적절하다.(InnoDB에 비해 검색 속도가 빠름) 반면 InnoDB는 트랜잭션과 ACID를 .. 더보기
View란 무엇인가? View는 하나 또는 그 이상의 기본테이블로부터 만들어지는 가상의 테이블입니다. 기본테이블의 경우 물리적으로 데이터가 저장되는 반면 View는 뷰의 정의만 시스템 내에 저장되어있다가 실행시간에 테이블을 구축합니다. 뷰는 다음과 같은 특징을 가지고 있습니다. 데이터 검색의 경우 기본 테이블과 아무런 사용없이 사용가능합니다. 뷰에 대한 갱신(삽입, 삭제, 수정) 연산은 제약이 존재합니다. 뷰 생성 SQL CREATE VIEW 뷰이름 AS SELECT 문 WITH CHECK OPTION 뷰 제거 SQL DROP VIEW 뷰이름 {RESTRICT | CASCADE} 뷰의 제약조건 집계 함수(COUNT, SUM, AVG, MAX, MIN)가 관련되어 정의된 경우 DISTINCT, GROUP BY, HAVING이 .. 더보기
SOAP에 대해서 알아보자 Simple Object Access Protocol의 약자로 보안이나 메시지 전송 등에 있어서 많은 표준이 있기 때문에 많이 사용되고 있는 REST에 비해 복잡합니다. REST와 마찬가지로 HTTP를 이용하지만 HTTP뿐만 아니라 다른 프로토콜을 사용하여 통신할 수 있습니다. 다음은 SOAP에 대한 특징입니다. 자체적인 ACID 기준으로 가지고 있음 XML을 데이터 포맷으로 사용 WS-Security와 SSL을 지원 REST에 비해 상대적으로 더 많은 대역폭과 리소스가 필요 엄격한 통신규약을 갖고 있으며 모든 메시지는 보내기 전에 알려야함 다음은 SOAP에 통신과정입니다. Client -> 중계자 -> 중계자 -> Default Actor 1. Client에서 요청을 하면 중계자에서 처리할 것인 있는지.. 더보기
플랫폼 API 호출 시 발생하는 오류 CORS란 무엇인가? Cross Origin Resource Sharing의 약자로 HTTP 프로토콜의 헤더를 사용하여 하나의 출저 or 도메인에서 다른 출저 or 도메인의 리소스에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제 브라우저의 보안상의 이유로 스크립트의 CORS HTTP 요청을 제한 Web API(XMLHttpRequest) or Fetch API는 동일 출저 정책에 따라 다른 출저 리소스를 접근하기 위해서는 CORS 헤더를 포함한 응답을 받아야합니다. CORS 종류는 다음과 같습니다. simple requests preflight requests credential reqeusts non-credential reqeusts 1. simple requests GET, POST, HEAD Method .. 더보기
트랜잭션에서 사용되는 ACID란? 데이터베이스의 트랜잭션이 성공적으로 수행하는 것을 보장해야하는 성질들의 앞글자를 표현한 약어 원자성(Atomicity) 일련의 작업들이 하나의 작업과 같이 모두 성공처리하거나, 실패처리해야하는 성질 일관성(Consistency) 데이터베이스의 무결성제약을 위반하면 트랜잭션은 중단되는 성질 고립성(Isolation) 하나의 트랜잭션이 실행될 때, 다른 트랜잭션이 실행하는 것을 방지하는 성질 ex) 고립성이 없다면 Dirty Read, NonRepeatable Read, Pantom Read가 발생할 수 있습니다. 지속성(Durability) DBMS가 트랜잭션에 대한 응답을 사용자에게 응답해야할 때, 데이터베이스의 장애가 발생하더라도 트랜잭션에 대한 커밋은 보장되어야 하는 성질 DBMS는 지속성을 보장하기.. 더보기
XSS(Cross Site Scripting)란? XSS란? 웹 애플리케이션에서 입력값에 대한 검증이 이뤄지지 않은상태에서, 공격자가 입력 폼(문자열을 입력할 수 있는 화면)에서 악의적인 스크립트를 삽입하여 희생자 측에서 의도하지 않은 스크립트가 실행되는 공격방법입니다. 대응방법 1. 입력값에 대한 검증을 서버단에서 검증한다. Spring의 경우 네이버에서 만든 lucy-XSS-filter 라이브러리를 사용하면 되나, 송수신하는 데이터 포맷형식이 JSON형식 이라면 XSS Filter가 적용되지 않는다. 2. 입력문자열에서 HTML 코드로 인식되는 특수문자들을 일반 문자열로 치환한다. HTML 특수문자 HTML Entity HTML 특수문자 HTML Entity > / / ( ( ) ) & & " " ' ' 참조 stupidsecurit.. 더보기
자바의 기초를 쌓아보자 1편(JDK, JRE, JVM) * 제가 개발을 하면서 알고있었지만 잊어버렸던, 잘못알았던 지식들을 바로잡기 위해 JAVA에 대한 게시글을 작성하는 것이며 잘못된 내용이 있을경우 댓글로 피드백 주시면 감사합니다. 자바를 통해서 개발하기 위해서는 JDK, JRE에 대해서 많이 들어보셨을텐데요. JDK, JRE가 대체 왜 필요하지라는 의문을 가져보신 분들이 계실겁니다. 이번장에서는 JDK, JRE 그리고 더 나아가 JVM에 대해서 알아보도록 하겠습니다. JRE(Java Rumtime Environment) JRE는 JVM과 JVM이 자바 프로그램을 실행시키기 위한 필수 라이브러리들을 가지고 있습니다. 즉 JRE가 설치되어 있어야 자바로 개발된 프로그램들을 실행할 수 있습니다. JDK(Java Development Kit) JDK는 자바 프.. 더보기