
ReentrantLock은 Java에서 제공하는 Lock 인터페이스의 구현체 중 하나이다. ReentrantLock은 하나의 스레드에서 lock() 메소드를 호출하여 잠금을 획득할 수 있다. 이 때, lock() 메소드는 이미 잠금이 획득되어 있는 경우에도 호출할 수 있으며, 이 경우 호출한 스레드는 나중에 unlock() 메소드를 호출할 때까지 잠금이 풀리지 않는다. ReentrantLock의 특징은 lock() 메소드에서 잠금을 획득할 수 없는 경우, 잠깐의 시간 동안 대기하다가 다시 시도할 수 있다는 점이다. 이를 구현하기 위해 tryLock() 메소드와 lockInterruptibly() 메소드를 제공한다. ReentrantLock은 synchronized 키워드와 비교할 때 더 많은 기능을 제공..

Lock은 병행성(Concurrency) 문제를 해결하기 위해 사용하는 기술이다. 어떤 자원에 대한 접근을 단일 스레드에서만 허용하는 것으로, 다른 스레드가 같은 자원에 접근하려 할 때 대기 상태로 둔다. Java에서 Lock은 java.util.concurrent.locks 패키지에 포함된 Lock 인터페이스를 사용하여 구현할 수 있다. Lock 인터페이스는 기본적인 lock 기능을 제공하는 lock()과 unlock() 메서드를 가지고 있다. tryLock()메서드를 사용하면 현재 lock을 얻을 수 있는지 확인 할 수 있다. ReentrantLock, ReentrantReadWriteLock, StampedLock은 Lock 인터페이스를 구현한 구현체로 자세한 내용은 각각의 javadoc 참고 할수..

ClassNotFoundException 클래스를 찾지 못함 CloneNotSupportedException Cloneable 인터페이스 미구현 IllegalAccessException 클래스 접근을 못함 InstantiationException 추상 클래스 또는 인터페이스를 인스턴스화 하고자 할때 InterruptedException 쓰레드가 중단 되었을때 NoSuchFieldException 지정된 필드가 없을때 NoSuchMethodException 지정된 메소드가 없을때 [IOException] CharConversionException 문자 변환에서 예외가 발생했을때 [IOException] EOFException 파일의 끝에 도달했을때 [IOException] FileNotFoundExcept..

팀원과 대화를 하다가 Optional를 활용했을 때의 장단점에 관해 얘기를 하게 되었다. 그래서 Optional 활용에 대해 알아보았다. 1. Optional 변수에 null을 할당하지 않기 나쁜 예: Optional findById(Long id) { // find person from db if (result == 0) { return null; } } 좋은 예: Optional findById(Long id) { // find person from db if (result == 0) { return Optional.empty(); } } 반환 값으로 null을 사용하는 것이 위험하기 때문에 등장한 것이 Optional이다. 당연히 Optional 객체 대신 null을 반환하는 것은 Optional의..

최근 실서버 배포에서 두 번의 서비스 장애로 롤백을 하였다. QA에서 테스트를 하며 잘될 거라고 생각했던 배포에 대한 확신이 무너지는 경험이었다. 확인해보니 새로운 값만을 저장했기에 정상 동작을 하였고 데이터가 중복 값을 저장하려고 하면 데이터 없이 반환을 했던 코드 누락의 실수였다. 다른 서비스에서는 기존 값을 반환하여 서비스를 만들고 있었다. 요새 다른 프로젝트를 진행하면서 코드가 잘 동작하고 있는지 버그가 없는지 테스트를 하는 테스트 코드를 신경 쓰지 않았다. 그래서 발생한 일이기도 하다. 테스트를 범위에 따라 분류해보면 유닛 테스트, 통합 테스트, 기능 테스트로 나눠 볼 수 있다. 그중에서 통합 테스트로 진행해 오고 있으며 이번에 배포의 36개의 오류가 났음을 확인하여 테스트가 0개의 오류로 정상..

코드 리뷰를 하면서 값을 비교하는 코드가 있었는데 Equals 함수를 사용하였다. null 값일 경우엔 NullPointerException 이 발생했으며 이에 따른 다양한 처리 방법들을 정리해본다. 1. null객체 대신 리터럴 문자에서 equal 메서드를 호출함으로써 해결할 수 있습니다. String ptr = null; if (ptr.equal("abc") { // NullPointerException 발생! } if ("abc".equals(ptr)) { // 리터럴문자에서 equal 메소드를 호출 } 2. try - catch문 사용 : 다음과 같이 예외처리 문 사용 public class Main { public static void main(String[] arg) { String s = n..

개발하면서 기능 구현도 중요하지만 로그는 중요하다. 다양하게 표현할 수 있고 중요한 로그를 잘 남기면 운영과 개발에서 이로울 것이다. 어떤 순서로 작업이 진행되고 있는지, 요청 / 응답 값이 어떻게 표현되는지, 오류는 어디서 발생했는지 등의 정보가 중요하다 이 정보를 모아서 보는 방법 중에는 로그가 있다. 1) 콘솔에 로그 출력, 2) 파일에 저장하여 로그 보기 설정 방법으로는 xml, java, properties 가 있다. (구현했던 거 표현하기)

자바 네이티브 인터페이스(Java Native Interface, JNI)는 자바 가상 머신(JVM)위에서 실행되고 있는 자바 코드가 네이티브 응용 프로그램(하드웨어와 운영 체제 플랫폼에 종속된 프로그램들) 그리고 C, C++ 그리고 어셈블리 같은 다른 언어들로 작성된 라이브러리들을 호출하거나 반대로 호출되는 것을 가능하게 하는 프로그래밍 프레임워크이다. 프로젝스에서 regcomp()- 정규식 컴파일하여 정규식을 확인하는 기능을 추가해야했다. 처음에는 JAVA와 javascript를 찾아보았지만 Java에서 최선의 대안이라고 생각하여 C로 작성하여 자바에서 호출하는 기능 구현을 위해 JNI를 사용하였다. JNI를 사용하기 위한 절차 라이브러리 로딩 Native Method를 선언하는 자바 클래스 작성 및..
- Total
- Today
- Yesterday
- 클라우드 컴퓨팅과 아마존 웹 서비스
- 클라우드 컴퓨팅(Cloud computing)
- amazon web services
- aws공부순서
- aws시작
- aws공부
- 클라우드 컴퓨팅
- aws개발공부
- AWS
- cloud computing
- 아마존 웹 서비스
- aws기초
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |