기술 면접 스터디
트랜잭션( Transaction )이 무엇인지 설명해 주세요.
- 데이터 베이스의 상태를 변경시키기 위하여 수행되는 작업의 단위이다. ( CRUD )
- 트랜잭션은 상황에 따라 여러개가 만들어질 수 있으며 하나의 트랜잭션은 Commit (저장) 되거나 , RollBack (철회)될 수 있다.
- 사람이 설계한 논리적인 작업 단위로서, 일처리는 작업단위 별로 이루어 져야 사람이 다루는데 무리가 없다.
- 여러개의 쿼리를 묶어놓은 것
Commit - 하나의 트랜잭션이 성공적으로 끝나 , 데이터 베이스가 일관성 있는 상태에 있을 때 의미한다.
Rollback - 트랜잭션의 원자성이 깨진 것 , 하나의 트랜잭션 처리가 비정상적으로 종료됨 , Rollback 실행시 트랜잭션의 재시작 , 부분적 변경 결과를 취소할 수 있다.
ACID
- 원자성 (Atomicity) :
한 트랜잭션의 실행한 작업들은 하나로 간주한다. ( 모두 성공 또는 모두 실패 )
ex. 내가 친구한테 10,000원을 이체한다. → 내 잔액 데이터 -10,000 , 친구 잔액 데이터 +10,000 → 한쪽만 변경이면 원자성 깨짐
- 일관성 ( Consistency) :
트랜잭션은 일관성있는 데이터 베이스 상태를 유지한다 ( 데이터 타입의 반환 후와 반환 전이 동일해야한다. )
트랜잭션이 일어난 이후의 데이터 베이스는 데이터 베이스의 제약 조건이나 규칙을 만족해야한다.
트랜잭션이 진행되는 동안에 데이터베이스가 변경 되더라도 업데이트된 데이터베이스로 트랜잭션이 진행되는것이 아니라, 처음에 트랜잭션을 진행 하기 위해 참조한 데이터베이스로 진행된다. (get update get의 상황에서 flush가 안 된 상태여서 업데이트 전 get ㄷㅔ이터를 가져옴 왜나면 트랜잭션이 안 끝났으니까 1차 캐시 내용)
- 독립성 ( Isolation ) :
각각의 트랜잭션은 다른 트랜잭션에 끼어들 수 없고 각각 독릭적임을 의미 서로 간섭이 불가능하다.
- 리드 커밋티드 : mysql, oracle에서 기본 값으로 되어있음.
- 하나
- 시리어 라이저블 : 제일 엄격한 수준으로 관리. 트랜잭션을 무조건 순차적으로 진행. 교착 상태가 일어날 확률이 높아서 성능 젤 구름
- 지속성 ( Durability ) :
트랜잭션을 성공적으로 마치면 항상 결과가 영구적으로 저장된다.
버디님께 여쭤보기~~ !
트랜잭션에 대해서,,,, 너무 어렵
웹 서버와 WAS의 차이는?
1) 웹 서버?
- HTTP 프로토콜을 기반으로 하여 웹 브라우저의 요청을 서비스하는 어플리케이션
- 정적인 컨텐츠( .html / .png / .jpg / .css 등)를 제공할 때에는 WAS를 거치지 않고 바로 제공한다.
- 동적인 컨텐츠 요청이 들어왔을때에는 해당 요청을 WAS에 보내고 처리한 결과는 WAS가 전달하게 된다.
- 예를 들면 Apache Server, Nginx, IIS 등이 있다.
2) WAS(Web Application Server)?
- 웹 서버 + 웹 컨테이너로 웹 상에서 사용하는 컴포넌트를 올려 놓고 사용하는 서버
- 웹 컨테이너 : 서블릿 컨테이너 라고도 불리우며 JSP, Servlet을 실행시킬수있는 소프트웨어를 통칭
- DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 HTTP 통신을 통해 제공하는 기능을 담당
- 분산 트랜잭션, 보안, 메시징, 스레드 처리 등의 기능을 처리하는 분산 환경에서 사용
- 예를 들면 Tomcat, JBoss, Jeus, Web Sphere 등이 있다.
👀 분산트랜잭션이란?
다중 시스템 환경에서는 사용자가 원격 자원에 액세스해야 하므로 시스템 간의 데이터 전송이 필요합니다.
이러한 자원을 관리하는 데는 네트워크 자원이 사용됩니다. 그러나 과도한 네트워크 사용으로 인해 성능 문제가 발생할 수 있습니다. 따라서 애플리케이션 디자인의 방향을 자원 소유 리젼의 자원과 연관된 처리를 수행하는 쪽으로 맞춘다면 성능상의 이점을 얻을 수 있습니다.
중앙 처리 지점에 데이터를 집중시켜서 네트워크 자원을 과도하게 사용하는 대신, DTP를 사용함으로써 사용자는 발생 위치에서 데이터를 처리할 수 있습니다.
물론 DTP를 사용하는 데는 다른 이유도 있습니다. DTP는 다음을 수행합니다.
- 병렬 처리의 일부 조치에 따른 응답 시간 단축을 허용함
- 여러 서로 다른 트랜잭션에 의해 연결되는 트랜잭션에 공통 인터페이스를 제공함
- 기타 시스템(특히 비-CICS® 시스템)에서 실행 중인 애플리케이션과의 통신을 허용함
- 어떤 애플리케이션도 파일 레코드의 형식을 알 필요가 없도록, 보안에 민감한 파일 또는 데이터베이스와 애플리케이션 간에 버퍼를 제공함
- 목적지가 원격 시스템인 덜 긴급한 데이터의 일괄처리를 허용함
https://www.ibm.com/docs/ko/cics-ts/5.5?topic=processing-why-distributed-transaction
3) 차이점
웹 컨테이너가 있느냐 없느냐의 차이이다.
웹 서버는 정적인 컨텐츠를 제공, WAS는 웹 컨테이너를 이용해 동적인 컨텐츠를 제공한다.
👇 참고 블로그
알고리즘 스터디
초기값 0 설정 중요! 널포인트 안 갖게 해야 함.
[JAVA] 코딩테스트 연습 > 가운데 글자 가져오기
글자 수 자르는데는 substring 만큼 편한게 없음ㅇㅇ. 모르면 외워두자. 자르기는 substring!
그리고 이 문제는 가운데 글자를 가져오는 거고, 짝수일 경우 가운데 글자 2개를 가져와야하니까 저렇게 짜주면 된다.
class Solution {
public String solution(String s) {
int length = s.length();
int mid = length/2;
String answer = "";
if(length % 2 == 0){
answer = s.substring(mid-1, mid+1);
}else{
answer = s.substring(mid, mid+1);
}
return answer;
}
}