트랜잭션 격리 수준이란 트랜잭션끼리 얼마나 고립되었는지를 나타내는 것이다. 트랜잭션 격리 수준이 높아질수록(트랜잭션 레벨이 높아질수록) 트랜잭션간의 고립도가 높아지는 대신 성능이 떨어지게 된다. 트랜잭션 레벨 0: READ UNCOMMITED 트랜잭션 레벨 1: READ COMMITED 트랜잭션 레벨 2: REPEATABLE READ 트랜잭션 레벨 3: SERIALIZABLE 이러한 트랜잭션 격리의 이유는 동시성 제어(Concurrency Control)때문이다. 동시성 제어란 DB 시스템에서 실행되고 있는 여러 개의 트랜잭션이 작업을 성공적으로 마칠 수 있도록 트랜잭션의 실행 순서를 제어하도록 하는 것. 이를 위해서 일부 트랜잭션에 변경이 생기더라도 하나의 트랜잭션이 시작되고 종료되기까지 데이터를 중도..
AJAX (Asynchronous Javascript And Xml) JS의 라이브러리 중 하나로, 전체 페이지를 고치지 않고도 페이지의 일부만을 위한 데이터를 로딩하는 기법. 자바스크립트를 이용해서 서버에 데이터를 요청하는 것을 말한다. 즉 웹 브라우저에 어떤 요청을 했을때 페이지 전체를 새로고침하는 것이 아닌, 일부를 랜더링하여 뷰를 갱신할 수 있다. ajax를 사용하는 이유 1. 요청이 아닌 응답을 html이 아닌, data(json)을 이용하여 받을 수 있다 회원가입을 서버에 요청했다면, 서버는 정보를 DB에 저장하고 그에 대한 응답을 해주게 되는데, ajax가 없다면 데이터를 이용하는 것이 불가능하다. (만약 서버가 html로만 응답할 수 있다면, 환경에 따른 response의 폭이 좁아지고 한..
1. Cannot Connect to Database Server 자기 직전까지 사용하다가 껐는데 자고 일어나니 이런 오류가 뜸. 시스템 종료중에 업데이트 하라고해서 했는데 그 까닭일까 기본적으로 설정된 Local instance wampstackMySQL은 동작하는데, 새로 만든 mysql connection이 동작하지 않음. localhost:3306은 동작하는데 127.0.0.0.1:3306은 동작하지 않았던 것인데, 온갖 블로그랑 스택오버플로 다 뒤져가면서 해결책이라고는 다 따라해봤는데 전혀 안먹었고, netstat -a -o로 3306 포트번호의 PID를 찾고 taskkill /f /pid * 해준 후에 서비스를 재시작하니깐 동작한다. localhost와 127.0.0.1이 동일하게 동작하는 이..
https://eckrin.tistory.com/entry/Spring-MVC-%EA%B2%80%EC%A6%9D앞서 요청 검증방법에 대해서 알아봤다. 하지만 검증 기능을 지금처럼 매번 코드로 작성하는 것은 매우 번거롭다. 따라서 어노테이션을 이용한 검증방법인 Bean Validation에 대해서 알아보자. Bean Validation은 검증 어노테이션과 인터페이스들의 모음이며, 일반적으로 하이버네이트 Validator를 사용한다. Bean ValidationBean Validation을 사용하면 다음과 같은 검증 어노테이션들을 지원한다.@NotBlank : 빈값 + 공백만 있는 경우를 허용하지 않는다. @NotNull : null 을 허용하지 않는다. @Range(min = 1000, max = 1000..
Validation 개요 웹 어플리케이션 폼에서 숫자를 문자로 작성하는 등의 오류가 발생할 수 있다. 이러한 처리를 별도로 해주지 않는다면 사용자는 오류 페이지로 이동하고, 처음부터 다시 입력해야 하는 문제가 생긴다. (실제 서비스에 적합하지 않다). 실제로 사용되는 웹 서비스들은 오류가 발생하면, 고객이 입력해놓은 데이터를 유지한 상태로 오류 현황을 알려주곤 한다. 타입 검증: 가격, 수량에 문자가 들어가는 등의 오류 필드 검증: 공백이 허용되지 않거나, 수 범위가 설정되는 등의 제약 필드 조합 검증: 여러 필드의 값을 조합하여 검증 (ex.가격*수량의 합이 10000 이하) 일반적으로 검증은 클라이언트 검증과, 서버 검증이 존재한다. 클라이언트 검증(using js)은 조작을 이용한 보안에 취약하다는..
개요"JAVA는 자바 가상 머신(Java Virtual Machine) 위에서 동작한다" - 자바를 처음 배울 때 들어봤을 개념이다. 그렇다면 왜 자바는 가상머신 위에서 동작하도록 설계된 것일까? 이번 포스팅에서는 자바의 동작 방식과 배경에 대해서 정리해보도록 하겠다. C언어로 프로그램을 작성해 본 적이 있다면, 아마 다음과 같은 과정을 거쳐 소스파일을 실행파일로 변환했을 것이다.gcc -c test.c -o test.o # 소스파일(test.c)을 이용해 오브젝트 파일(test.o)를 만든다.gcc test.o -o test.out # 오브젝트 파일(test.o)를 이용해 실행 파일(test.out)을 만든다. C언어는 "Write Once, Complie Anywhere"(WOCA)라는 특징을 가진다..
개요 - 메세지 협업이나 실무의 과정에서 화면에 보이는 문구를 고치기 위해서는 HTML에 일일히 하드코딩된 단어들을 변경해야 할 수 있다. 이러한 경우 실수가 일어날 수 있고 단어의 수에 따라 매우 번거로울수도 있다. 따라서 이러한 단점을 해결하기 위해서 메세지를 한 곳에서 관리하는 방법이 있다. item=상품 item.id=상품 ID 이런 식으로 messages.properties와 같이 메세지 관리 파일을 만들고, HTML에서는 해당 데이터를 key값으로 불러서 사용하는 것이다. - 국제화 메세지를 각 나라별로 별도로 관리하면, 서비스 자체를 국제화 할 수 있다. properties파일을 여러개 만들어서 분리해서 접속 지역(HTTP 헤더 accept-language)에 따라서 별도의 파일이 사용되게 ..
1. MVC (Model - View - Controller) Model: 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분 View: UI(User Interface) Controller: 사용자의 입력을 받고 처리 - 동작 1. 사용자의 Action이 Controller로 전달된다. 2. Controller는 사용자의 Action에 따라서 Model을 업데이트한다. 3. Controller는 Model을 나타내줄 View를 선택한다. 4. View는 Model을 이용하여 화면을 나타낸다. (View가 직접 업데이트(Model이용 or 변경감지), Model이 View에 Notify) - 특징 > Controller는 여러개의 View를 선택할 수 있는 1:n관계를 가지며, View를 선택할..
더보기 https://www.youtube.com/watch?v=jit8j4gblIk&list=PLxTmPHxRH3VXHOBnaGQcbSGslbAjr8obc&index=1&ab_channel=%EC%98%A4%EC%A4%80%EC%84%9D%EC%9D%98%EC%83%9D%EC%A1%B4%EC%BD%94%EB%94%A9 를 보고 연습해보기.. + developer 사이트 뒤지는거 너무 번거롭다 + 버전오류도 엄청 많이나는것같음 (unresolved나 메소드 못찾는 등 오류 뜨면 거의 버전오류임) 1. Room DB를 이용하여 데이터 저장하기. 안드로이드 공식사이트(developer.android.com)를 참조해보면 ROOM DB 사용을 위해서 가장 먼저 build.gradle을 수정해주자 //room ..
Singleton(싱글톤 패턴) 어떤 클래스가 최초 한번만 메모리를 할당하고, 그 메모리에 객체를 만들어 재사용하는 디자인 패턴을 의미한다. 즉, 생성자의 호출이 반복적으로 호출되었을 때에도 실제로 하나의 객체만이 생성되어 사용되는 패턴으로, 특히 스프링에서 스프링 빈의 관리를 싱글톤으로 하여 객체 인스턴스를 하나만 생성하여 DI(Dependency Injection)와 OCP(개방 폐쇄 원칙) 위반없이도 자유롭게 싱글톤을 사용하게 한다. 이는 메모리의 낭비를 방지할 뿐만 아니라, 객체가 전역성을 띄기에 다른 객체와 공유 또한 용이하다. - 싱글톤 인스턴스는 전역 인스턴스로 데이터를 공유하기 쉽다.- 공통된 객체를 여러개 생성해서 사용해야 하는 상황에서 많이 사용한다.- 두 번째 이용시부터는 객체 로딩 ..
1-1. 람다 함수형 프로그래밍의 핵심이라고 할 수 있는 람다는 value처럼 다룰 수 있는 익명함수를 의미한다. 람다는 메소드의 파라미터로 넘겨줄 수 있으며, return값으로 사용할 수도 있다. val lamdaName:Type = {argumentList->codeBody} 선언과 타입(input,output)을 적고, 파라미터를 적고 어떻게 할지를 적어주는 식으로 동작한다. 예를 들면, val square = {number:Int->number*number} //방법 1 val square: (Int)->(Int) = {number->number*number} //방법 2 와 같이 작성하면, Int를 받아서 Int로 반환하는데, number를 받아서 number*number로 반환한다는 것을 알 ..
뱀 성공다국어 한국어 시간 제한메모리 제한제출정답맞힌 사람정답 비율 1 초 128 MB 49416 20232 13459 39.229% 문제 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 보드의 상하좌우 끝에 벽이 있다. 게임이 시작할때 뱀은 맨위 맨좌측에 위치하고 뱀의 길이는 1 이다. 뱀은 처음에 오른쪽을 향한다. 뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따른다. 먼저 뱀은 몸길이를 늘려 머리를 다음칸에 위치시킨다. 만약 이동한 칸에 사과가 있다면, 그 칸에 있던 사과가 없어지..