본문 바로가기

분류 전체보기

(104)
[Ktor] Ktor와 Koin을 사용해서 스프링부트 따라잡기 최근에 접하게 된 Ktor 프레임워크와 injection(주입)을 도와주는 Koin 라이브러리를 이용해서 기존에 사용했던 스프링 부트 프로젝트를 대체할 수 있도록 공부하기 위해 작성한 게시글입니다. Ktor 자체의 정보도 아직은 많지 않고 정식으로 배우고 정리하는 글이 아니기 때문에 정상적이지 않은 코드와 불편함을 느낄만한 요소들이 있을 수 있습니다. (너그럽게 봐주세요 ㅎㅎ) 시리즈 진행상황 시리즈 1. 간단한 Api 호출과 MVC 구조 따라하기, 프로파일 구분하기 코드 참고 사이트 : https://ktor.io/docs/welcome.html (Ktor 가이드) Github : https://github.com/MarrRang/ktor-go-to-lunch/tree/master/src/main/ko..
[DB] Transation Isolation Level Transaction 트랜잭션(Transaction)이란, 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위라고 할 수 있습니다. 여기서 단위라고 하다 보니 정해진 범위가 있을 것 같지만 사용자가 정할 수 있는 범위입니다. 따라서 아래의 트랜잭션의 4가지 특징을 지키는 선 안에서 수행이 되어야 성공적인 트랜잭션의 사용법이라고 할 수 있습니다. 원자성 (Atomicity) 일관성 (Consistency) 독립성 (Isolation) 지속성 (Durability) 하지만 개발을 하다 보면 효율적인 성능을 위해 굳이 다른 트랜잭션에서 데이터 참조를 막을 필요가 없을 수도 있습니다. 아니면, 절대로 참조가 되면 안 되게 설정해야 할 필요가 있겠죠. 그래서 이러한 점을 개발자가 어느 정도는 설정을 해주..
[Ktor] Ktor 소소하게 알아보기 - Server 방식 개요 저희가 Ktor Application을 구동시키기 위해서는 Netty와 같은 서버 엔진을 구동시켜야 하고 이후에 저희의 application을 해당 엔진에 올려야 합니다. 모든 프로젝트의 시작이 될 이 부분을 Ktor에서는 어떤 방식으로 처리하고 있을까요? Ktor server application을 동작시키기 위한 서버 생성 방식 EmbeddedServer EngineMain EmbeddedServer embeddedServer() 메서드를 이용하는 방법이 서버를 구동시키기 가장 쉬운 방법입니다. 아래의 예시는 Netty 엔진을 8080 포트로 띄우는 코드입니다. fun main() { embeddedServer(Netty, port = 8080) { routing { get("/") { call..
[Kubernetes] Kubernetes tls Secret 생성하기 Kubernetes에 TLS secret을 추가해야 할 일이 있어서 정리해놓으면 편하겠다 싶어서 정리하게 됐습니다. Openssl을 이용해서 Private Key, Public Key 생성 Private Key를 이용한 CSR(Certificate Signing Request 생성) CRT 인증서 만들기 CRT파일을 PEM파일로 변환 Kubernetes에 secret 생성 1. Openssl을 이용해서 Private Key, Public Key 생성 Private Key 생성 명령어 openssl genrsa -out [파일명] [bit길이] 예시) openssl genrsa -out test.key 2048 Public Key 생성 명령어 openssl rsa -in [privateKey 파일명] -p..
[IF KAKAO 2021] <카카오톡 서버의 스프링 공화국 탈출기> 정리 및 후기 https://if.kakao.com/session/49 이 글은 IF KAKAO 세션 내용을 정리 및 후기를 적은 글입니다. 단순히 추후에 쉽게 보기 위해서 적는 글이지 내용을 도용하려는 의도는 없습니다. 해당 세션을 우선 보는 것을 추천드립니다. 해당 세션은 기존의 많이 사용하는 Spring Framework의 장단점과 이를 벗어나 다른 프레임워크를 사용해보는 것이 세션의 주 내용이었습니다. 여기서 Spring의 대체재로 사용된 것이 Ktor입니다. Kotlin을 기반으로 한 프레임워크라고 하는데 이후에 추가적으로 사용해보고 정리가 필요하다고 느꼈습니다. Spring Framework의 장점 생태계가 잘 구성되어 있어 서버 개발 기간 단축 개발자 풀(Pool)이 넓어서 인력 추가 투입이 쉬움 프레임워..
[Java] Sealed Class Java 17의 release note를 보다 보면 Sealed Class가 정식으로 확정된 것으로 보입니다. JDK 15부터 프리뷰로 추가되었던 것 같은데 한 번도 써본 적이 없네요. ㅎㅎ 오늘 알아보도록 하겠습니다. Sealed Class Sealed Class, Interface는 간단하게 상속하거나(extends), 구현(implements)할 클래스를 지정해두고 해당 클래스들만 상속 혹은 구현을 허용하는 키워드입니다. public sealed interface CarBrand permits Hyundai, Kia{} public final class Hyundai implements CarBrand {} public non-sealed class Kia implements CarBrand {} ..
[Spring Cloud] Feign에 대해서 Feign이란 MSA환경에서는 각 서비스 간의 호출이 기존의 단일 시스템일 때보다 증가하게 됩니다. 이러한 상환에서 Feign은 API 간의 호출을 편하게 해 주기 위해서 만들어졌습니다. 기존에는 HttpClient의 설정을 Java에서 설정해주고 주입받아서 사용하는 방식을 해야 했습니다. 이 부분을 간편하게 바꿔주는 것이라고 생각하면 될 것 같습니다. 예시 코드 1. @EnableFeignClients 추가 @SpringBootApplication @EnableFeignClients public class Application { public static void main(String ...args) { SpringApplication.run(Application.class, args); } } @En..
[Java] HashTable, ConcurrentHashMap에 대해서 HashTable vs HashMap Java를 사용하면서 HashMap은 많이 사용해봤지만 HashTable은 들어만 보고 거의 사용해본 적은 없는 것 같습니다. 하지만 DB나 여러 라이브러리에서 사용하고 있을 것으로 생각이 되어서 정리해보려 합니다. 우선은 ConcurrentHashMap을 알아보기 전에 HashMap과의 차이를 알아보겠습니다. HashTable은 HashMap과 매우 유사합니다. 아래에서 사용법을 알아볼텐데 메서드 명조차 거의 동일합니다. 가장 큰 차이점은 Thread-safe 여부입니다. HashTable 내부에서는 synchronized 키워드를 이용해 Thread-safe하도록 구현되어 있습니다. 이외에도 Key값에 Null을 허용하는지 여부와 에러를 발생시킬 수 있는 코드를 ..
[Kotlin] 코틀린과 자바의 차이 저는 Java를 주로 사용합니다. 그런데 취미로 Flutter를 이용해서 앱을 만들어보려고 하던 중 Java와 완전호환성을 가지고 있고 새로운 언어인 Kotlin에 관심이 가더라구요. 하지만 Java보다 어떤것이 더 나은지 아니면 차이점은 무엇인지 정도는 알고 써야 제가 익숙한 Java를 사용하지 않는 이점이 있을 것 같아서 찾아보고 정리하게 되었습니다. kotlin이란 Java Platform을 대상으로 하는 새로운 프로그래밍 언어로서 즉, JVM에서 돌아가는 언어이다. Jetbrains에서 만들었다. Kotiln의 철학 실용성 Kotlin은 다른 프로그래밍 언어가 채택한 검증된 해법과 기능을 사용하여 복잡도를 줄인 실용적인 언어를 지향하고 있습니다. 간결성 코드를 더 간단하고 간결하게 만들어 내용을 ..
[Java] this 키워드에 관해서 this 키워드 java를 사용하다보면 this.~~ 방식으로 사용하는 키워드를 보게 됩니다. 단순하게는 객체 자기 자신을 가르킨다라고 생각하면 되는데요. 사용하다가 약간의 헷갈리는 부분이 생겨서 정리하게 됐습니다. this 키워드의 역할 클래스가 인스턴스화 되었을 때 자기 자신의 메모리 주소를 담고 있는 키워드 인스턴스의 지역변수로 숨겨진 채로 존재한다 자신의 인스턴스 필드임을 명시하고자 할 때 사용한다 기본적인 사용법 public class Car { private String name; private int power; public Car(String name, int power) { this.name = name; this.power = power; } } 기본적으로 생성자에서 주로 사용하게 되는..