
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 가 있다. (구현했던 거 표현하기)
이번 프로젝트에서 사용한 웹 프레임워크는 Sanic, 파이썬에서 제일 빠르다. (Python 3.5에 추가된 async / await 구문을 사용할 수 있어 코드가 차단(Blocking)되지 않고 빠르다) Flask와 AIOHTTP를 섞어 놓은 것 같은 느낌이 드는 프레임워크이다. Flask의 심플하고 가벼운 점을 채택하고 AIOHTTP의 ASGI를 선택하였으며, GINO를 사용하여 논블로킹 ORM을 구현하였고, Class-based view를 지원한다. 또한, 플라스크처럼 블루프린트와 서브 라우팅을 애플리케이션 안에서 지원한다. 빠른 웹 서버 내장 프로덕션 준비 뛰어난 확장성 ASGI 준수 간단하고 직관적인 API 디자인 커뮤니티에 의한, 커뮤니티를 위해 파이썬 웹프레임워크 리스트 Django - ht..
- Total
- Today
- Yesterday
- aws공부순서
- aws기초
- aws시작
- amazon web services
- aws공부
- AWS
- aws개발공부
- 클라우드 컴퓨팅
- 아마존 웹 서비스
- cloud computing
- 클라우드 컴퓨팅(Cloud computing)
- 클라우드 컴퓨팅과 아마존 웹 서비스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |