일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Kotlin
- Algorithm
- kubernetes
- ingress
- 익명클래스
- Microservice
- cloud native java
- Stress test
- 마이크로서비스
- MSA
- ansible
- 헬름
- 쿠버네티스
- MySQL
- CRD
- 클라우드 네이티브 자바
- 자바
- nGrinder
- 클라우드 네이티브
- 코틀린
- 동기화
- Spring
- Adapter 패턴
- devops
- decorator 패턴
- 머신러닝
- spring microservice
- cloud native
- java
- Semaphore
- Today
- Total
목록분류 전체보기 (86)
카샤의 만개시기
Sealed클래스는 enum 클래스를 확장한 개념을 가진 클래스로써, 제한된 집합의 유형 중 하나를 가질 수 있지만 다른 유형은 가질 수 없는 제한된 계층 구조를 나타낼때 사용합니다. Enum 상수는 단일 인스턴스로 존재하는 반면, Sealed 클래스의 서브 클래스는 포함 할 수 있는 여러 인스턴스를 가질 수 있습니다. 일반 클래스와의 차이 Sealed를 이용하지 않아도 일반 클래스 내에 서브 클래스를 선언할 수 있고, 준비된 서브 클래스 중 하나를 대입하게 하여 프로그래밍 할 수 있습니다. 하지만 일반 클래스는 그 클래스 자체가 객체 생성이 가능하지만 sealed 클래스는 기본으로 abstract를 내장하고 있으므로 객체 생성이 불가능합니다. sealed class Shape { class Circle..
코틀린에서는 데이터와 관계 없이 특수 상황을 표현하기 위하여 Unit과 Nothing이라는 타입을 제공합니다. Unit Unit은 자바에서 void에 해당하는 예약어로써 아무것도 반환하지 않는 것을 의미합니다. 또한 Unit 예약어는 아래와 같이 생략이 가능합니다. fun func1() {} fun func2(): Unit {}자바에서 void는 존재하지 않음을 뜻하지만 코틀린에서 Unit은 아무것도 반환하지 않는 타입을 의미하기 때문에 약간의 차이가 있습니다. 자바에서 void 타입을 출력 할 수 없지만, 코틀린에서는 Unit이라는 타입은 출력이 가능합니다. val myVal: Unit = Unit fun main(args: Array) { println(myVal) } 출력결과 kotlin.Unit제..
Java에서 재귀함수를 사용하게되면 함수가 함수를 호출하면서 콜스택이 계속 적재되어 stack overflow 현상이 일어나기도 하고, 콜 스택 생성에 따른 성능 저하를 경험하기도 합니다. 꼬리 재귀 재귀 함수를 구현할 때 마지막(Tail)에 자기 자신을 호출(Recursion)하는 형태의 함수 kotlin에서 꼬리 재귀를 사용하게 되면 자바에서 있었던 이런 문제들을 해결할 수 있으며 적절하지 않은 코드가 작성이 되었을때 warning도 받을 수 있습니다. 다음과 같은 재귀함수를 작성하였고, 함수의 앞 부분에는 tailrec 예약어를 붙였습니다. tailrec fun tailrecPrint(no: Int = 1, count: Int = 1) { println("tailrecPrint") return if..
코틀린은 null 처리가 매우 엄격한데, null이 사용되지 않는 프로퍼티에 초기화 시점을 미룸으로써 null 허용으로 선언할 필요가 없습니다. lateinit class User { lateinit var lateData: String } fun main(args: Array) { val user = User() user.lateData = "hello world" println(user.lateData) } 실행결과 hello world사용 규칙 var로 선언한 프로퍼티에만 사용할 수 있다. 클래스 몸체에 선언한 프로퍼티에만 사용할 수 있다. 주 생성자에는 사용할 수 없다. 사용자 정의 getter/setter를 사용하지 않은 프로퍼티에만 사용할 수 있다. null 허용 프로퍼티에는 사용할 수 없다...
서류 이전 회사가 SI였기 때문에 다양한 프로젝트를 경험한 것과 작은 회사였기 때문에 팀장 역할을 한것에 대하여 어필 아닌 어필을 했습니다. 자기소개서는 간략하게 적고 자기주도적 성장에 대해 적어서 제출했습니다. 지원한 부문은 백엔드 개발자입니다. 코딩 테스트 문제수는 세문제였으며 전부 영어로 되어있었습니다. '카카오 블라인드 코딩 테스트' 이런거에 비해서 난이도는 낮다고 생각이 들었습니다. 그래서 주어진 시간이 세시간 정도였던거 같은데 1시간만에 다 풀어서 제출했습니다. 복잡한 알고리즘보다는 자료구조에 대한 이해도와 시간복잡도 혹은 간략하게 풀 수 있는 센스를 보는 문제라는 느낌을 받았습니다. 원격 인터뷰 원격 인터뷰는 전화로 이루어졌으며 시간은 30분 정도였습니다. 면접관은 스피커폰으로..
InnoDB에서 잠금은 두가지로 나눌 수 있다. FOR SHARE (LOCK IN SHARE MODE) FOR UPDATE FOR SHARE (LOCK IN SHARE MODE) 트랜잭션이 끝날 때까지 SELECT를 한 Row 값이 변경되지 않는 것을 보장한다. 해당 Row를 수정하려는 쿼리는 잠김 상태가 되어 트랜잭션이 끝날 때까지 대기하게 되고, 조회 쿼리는 여러 세션이 동시에 수행하는 것이 가능하다. 이는 트랜잭션이 끝나기 전까지만 유효하므로 auto_commit을 꺼야 한다. SELECT name FROM user WHERE id = 1 LOCK IN SHARE MODE; # 5.7 SELECT name FROM user WHERE id = 1 FOR SHARE; # 8.0 # 8.0 버전에서는 ..
동시성 프로그래밍을 할때 트랜잭션 처리는 반드시 고려해야 할 사항이다. 하지만 데이터베이스 트랜잭션 범위를 넘어가는 문제가 발생하는 경우도 있다. 예를 들어 사용자 A와 B가 동시에 동일한 위키백과 내용을 열람하고 이를 수정할때, A가 먼저 수정완료 버튼을 누르고 그 이후에 B가 수정완료 버튼을 누르는 경우가 있을 수 있다. 그렇게되면 먼저 완료 버튼을 누른 A의 수정사항은 사라지고 나중에 완료한 B의 수정사항만 남는 현상이 일어난다. 이를 Second Lost Updates Problem(두 번의 갱신 분실 문제)라고 한다. 이 문제를 해결하기 위해서는 3가지 선택 방법이 존재한다. 마지막 커밋 인정하기 위에서 설명한것과 같이 A의 수정사항은 무시하고 마지막에 커밋한 B의 내용만 인정하는 방법으로 가장..
낙관적 락 (Optimistic Lock) 트랜잭션 대부분 충돌이 발생하지 않는다고 가정하는 방법으로써 어플리케이션이 제공하는 락 방식입니다. 그러므로 읽는 시점에 Lock을 사용하지 않기 때문에 데이터를 수정하는 시점에 다른 사용자에 의해 데이터가 변경되었는지 변경여부를 확인해야 합니다. 이렇게 낙관적 락은 트랜잭션을 커밋하기 전까지는 트랜잭션의 충돌 여부를 알 수 없습니다. @Version JPA가 제공하는 낙관적 락을 사용하려면 @Version 어노테이션을 사용하여 버전 관리를 추가하면 되며 지원되는 타입은 long, Long, int, Integer, short, Short, TimeStamp 이다. @Version 어노테이션을 붙이면 엔티티가 수정될때 자동으로 버전이 하나씩 증가하며, 수정할때 ..