2019/05

FK가 잡혀있을 때, 키 값이 업데이트가 되지 않는 경우가 존재한다. 학생 테이블 학생ID 학생 나이 학교 ID .. 학교 테이블 학교 ID .. 예를 들어 테이블이 이렇게 존재한다고 하자. (어디까지나 예이다...) 테이블이 존재함과 더불어 이미 데이터들이 들어있으며, 학생테이블 학교ID 와 학교테이블 학교ID는 FK 관계이며 제약조건(CONSTRAINT)까지 걸려있다. 그런데 중간에 학교 ID 채번룰이 바뀌었다. 따라서 바뀐채번룰에 맞게 기존 데이터를 변경하려고 한다. 학생 테이블에 UPDATE 문을 날렸다. UPDATE 학생테이블 SET OLD_학교ID = NEW_학교ID WHERE 학교ID = OLD_학교ID 오류가 난다. CONSTRAINT에 위배가 된다고 한다. 그렇다면 학교 테이블부터 변경해..
자바 동시성 프레임워크에는 모든 기본 타입을 덮어씌우는 AtomicInteger, AtomicBoolean 같은 Atomic 클래스들과 참조 타입에 대한 AtomicReference클래스가 추가되었다. 이 클래스들은 모두 원자(atomic)연산을 보장한다. AtomicInteger를 사용하면 동기화된 블록은 더 이상 필요하지 않다. AtomicInteger클래스가 값을 읽고 쓰는 동안 변경되지 않는다는 걸 보장해주기 때문이다. public class SharedState { @Test public void sharedState(){ final ExecutorService executorService = Executors.newCachedThreadPool(); final AtomicCounter coun..
public class SharedState { @Test public void sharedState(){ final ExecutorService executorService = Executors.newCachedThreadPool(); final SimpleCounter simpleCounter = new SimpleCounter(); executorService.execute(new CounterSetter(simpleCounter)); simpleCounter.setNumber(200); assertEquals(200, simpleCounter.getNumber()); } private static class CounterSetter implements Runnable{ private final S..
컴파일 컴파일러는 맨 처음 문법에 맞게 프로그램을 작성했는지, 적합한 타입을 사용했는지 등의 규칙을 확인한다. 컴파일 결과로 .class 확장자를 가진 파일인 바이트코드가 생성되는데, 실행파일과 유사한 바이너리 형식이며 JVM용이다. 클래스 로딩 클래스 정의의 바이트코드를 실행 중인 JVM의 메모리로 가져오는걸 클래스 로딩이라고 한다. JVM은 .class 바이너리 파일을 가져와서 메모리에 저장할 수 있는 클래스 로더가 있다. 검증 일단 클래스가 로드되면 JVM은 바이트코드가 유효한지 검증한다. 바이트코드 검증을 포함한 일부 검증들은 자신의 클래스 바이트가 있는 메모리 외부로 메모리 위치를 확장하지 않는지 확인하고, 코드 상의 명령어가 완벽한지 확인한다. 해석 코드가 검증되면 JVM은 코드가 실행되는 아..
2019/03/19 - [그 외 ... (정리해야함)/꿀팁] - [JAVA] JVM 메모리 관련 설정(옵션) [JAVA] JVM 메모리 관련 설정(옵션) JVM 메모리 구조 참조 2018/06/29 - [프로그래밍 노트/JAVA] - [JAVA] JVM 메모리구조 애플리케이션을 실행하다가, outOfMemoryError 가 발생하였다면 우리는 JVM의 메모리 설정을 다시해 줄 필요가 있다. java.la.. cornswrold.tistory.com JVM은 각각의 메모리 영역에 할당된 메모리의 크기를 지정할 수 있는 커맨드라인 매개변수를 제공한다. -Xmx : 최대 힙 크기를 지정할 수 있다. ex) java -Xmx 512M JVM이 512MB의 최대 힙 크기를 가진 JVM을 생성한다. JVM은 메모리..
자바 가상머신(JVM)은 프로그램이 실행되는 플랫폼이다. 각각의 운영체제와 아키텍쳐용으로 만들어져 있고, 운영체제와 애플리케이션 사이에 위치하면서 플랫폼에 상관없이 독립적으로 실행될 수 있도록 만들어 준다. javac를 이용해 .java파일을 바이트코드(bytecode)로 컴파일 할 수 있다. 이 바이트코드는 JVM에서 명령어들을 아키텍처와 운영체제용으로 해석한다. 메모리는 어떻게 할당하는가? new 키워드는 자바 힙(heap) 영역에 메모리를 할당한다. 객체를 할당할 때 메모리가 충분하지 않으면 JVM은 가비지 켈럭션(Garbage Collection)을 이용해 힙에서 메모리를 재사용하려고 시도한다. 충분한 메모리가 존재하지 않는다면 OutOfMemoryError가 발생하여 JVM이 종료된다. 힙은 제..
클라이언트가 서버에게 자원을 요청할 때 자원의 위치는 일반적으로 URL을 사용해서 나타낸다. 하지만 검색엔진을 검색한 결과와 같이 동적으로 생성된 정보는 URL로 표현할 수 없다. 따라서 동적문서를 요청하는 경우, URL과 사용자 질의를 합쳐서 URI(Uniform Resource Identifier) 로 표시한다. URL과 URI 구별은 힘들지만, UIRL은 자원의 위치만 나타내는 반면 URI는 자원의 위치에 전달될 인자까지 포함한다는 점에서 차이가 있다. (URL은 URI의 특수한 형태라고 보면 된다.) protocol://[userid:passwd@][:port]//[path-info?query-sting] protocol 어떤 프로토콜을 사용해서 자원을 가져올 것이냐를 뜻함 (http, ftp, ..
평일에 하루에 한번씩 HTTP Header 속성을 보고, 포스팅 할 것
빌드 이식성 이식성(portability)의 핵심은 특별한 수정이나 변경 없이도 다양한 환경에 배포하고 운영하는 것이 가능해야 한다는 것을 뜻한다. 빌드 이식성은 서로 다른 환경에서 추가적인 설정 파일의 변경을 하지 않더라도 빌드가 가능한 환경을 만드는 것이다. ex) 운영체제(OS)가 다른 환경(윈도우, 리눅스, 맥 등) JDK 버전이 다른 환경에서도 추가 설정 없이 가능한 애플리케이션을 빌드할 수 있어야 하는 것을 의미한다. 대부분 프로젝트를 하다보면 개발 환경(로컬, 개발, 운영 서버)에 따라 설정이 달라질 때가 있기 때문에 개발 환경마다 다른 빌드 스크립트를 만들지 않으면서 하나의 빌드 스크립트에서 서로 다른 설정이 가능해야 한다. 데이터베이스 설정 로깅 설정 프레임워크 관련 설정 서버 설정 컴파..
2019/03/20 - [프로그래밍 노트/JAVA] - [JAVA] 동기화된 컬렉션(thread-safe collection), 병렬처리 가능한 컬렉션 Hashtable 클래스는 동기화할 수 있으며 병렬처리에 효율적이다. 하지만 오버헤드 때문에 성능이 상당히 저하된다. HashMap은 오버헤드의 문제는 없지만, 동기화할 수 없다는 특징이 있다. 따라서 동시성 요구든 용도에 맞게 map 클래스를 사용해야 한다. 병렬 환경에서의 Map 인터페이스를 사용하는 곳에는 ConcurrentHashMap(자바5이상)를 사용하는 것이 좋다.
깡냉쓰
'2019/05 글 목록 (2 Page)