Keyclock 컨테이너를 postgresql db와 함께 사용하는 방법에 대하 알아봅니다.

 

 

 

0. 참고

 

jbos/keycloak는 더 이상 관리되지 않습니다. 현재 글 작성 시점에 dockerhub에는 공식 keycloak 이미지가 배포되고 있지 않습니다. 

 

 

 

1. docker-compose.yml

 

다음과 같이 docker-compose.yml을 작성합니다.

 

version: '3.8'

services:
  keycloak:
    image: quay.io/keycloak/keycloak:24.0.2
    ports:
      - "8080:8080"
    environment:
      KC_DB: postgres
      KC_DB_URL: jdbc:postgresql://your.dbhost.com:5432/yourdbname
      KC_DB_USERNAME: yourdbuser
      KC_DB_PASSWORD: yourdbpassword
      KC_HTTP_ENABLED: true
      KC_HEALTH_ENABLED: true
      KEYCLOAK_ADMIN: yourkeycloakuser
      KEYCLOAK_ADMIN_PASSWORD: yourkeycloakpassword
    command: 
      - start-dev 
      - --import-realm
    volumes:
      - /home/keycloak/realm.json:/opt/keycloak/data/import/realm.json

 

환경 변수에대해 간단하게 설명하자면 다음과 같습니다.

  • KC_DB: 사용할 데이터베이스의 종류입니다. postgres로 두면 됩니다.
  • KC_DB_URL: postgres 접속 정보입니다. host, port, db이름을 변경해 사용하시면 됩니다.
  • KC_DB_USERNAME: DB 접속 계정 정보입니다. 변경해 사용하시면 됩니다.
  • KC_DB_PASSWORD: DB 접속 계정의 암호입니다. 변경해 사용하시면 됩니다.
  • KC_HTTP_ENABLE: HTTP를 통해 접근 가능한지 여부를 결정합니다. 
  • KC_HEALTH_ENABLED: 상태 확인 엔드포인트를 활성화할지 여부를 결정합니다. true로 설정한 경우 다음과 같은 엔드포인트가 활성화됩니다.
    • /health/live
    • /health/ready
    • /health/started
    • /health
  • KEYCLOAK_ADMIN: 관리용 페이지에 로그인할 수 있는 계정을 설정합니다.
  • KEYCLOAK_ADMIN_PASSWORD: 관리용 페이지에 로그인 할 수 있는 계정의 암호를 설정합니다.

 

 

 

 

 

반응형

 

 

 

일반적으로 lib는 C++에서, dll은 양쪽 모두에서 사용할 수 있는 라이브러리 산출물로 알려져 있습니다.

그동안 이를 당연하게 여기고 별 의문 없이 관습적으로, 사용하던 대로 사용하곤 했습니다.

이 글에선 lib와 dll이 무엇이고 어떤점이 다르길래 왜 C#에선 lib를 사용할 수 없는지 알아보고자 합니다.

 

 

 

.lib와 .dll 파일

 

.dll 파일과 .lib 파일은 모두 C++ 프로그래밍에서 사용되는 파일 형식입니다. 하지만 그들의 역할과 구성은 다릅니다.

 

.dll 파일은 실행 중에 다른 프로그램에 의해 호출되는 코드와 데이터의 모음입니다. 이는 동적 라이브러리라고 부르며 프로그램이 실행될 때에만 필요한 함수 및 데이터를 메모리에 로드합니다.
여러 프로그램에서 공유하여 사용할 수 있으며, 코드 및 데이터의 재사용을 용이하게 합니다. dll은 주로 라이브러리나 플러그인 형태로 사용되며, 함수와 데이터를 외부에 공개하기 위한 인터페이스 역할을 합니다.

 

.lib 파일은 프로그램이 컴파일될 때 링커(Linker)에 의해 사용되는 라이브러리 파일입니다. 정적 라이브러리라고 부르며 해당 파일에 포함된 코드와 데이터가 컴파일 시에 프로그램에 직접 포함됩니다.
프로그램을 실행할 때 .lib 파일이 필요하지 않으며, 해당 파일에 포함된 코드 및 데이터가 이미 실행 파일에 포함되어 있습니다. 주로 컴파일러에 의해 생성된 객체 파일(Object File)을 묶어 놓은 형태로 사용되며, 함수 및 데이터의 정의를 포함합니다.

 

주요한 차이점은 .dll 파일이 실행 중에 필요한 코드와 데이터를 제공하는 동적 라이브러리인 반면, .lib 파일은 컴파일 시에 링크되는 정적 라이브러리입니다. 또한 .dll 파일은 외부 프로그램에서 호출되고 공유될 수 있지만, .lib 파일은 컴파일 시에 해당 프로그램에 포함되어 실행된다는 점 입니다.

 

 

 

그래서 왜 C#에서는 lib 파일을 사용할 수 없을까?

 

.lib 파일은 C++에서 사용되는 라이브러리 파일로, 컴파일러에 의해 링크되어 프로그램에 포함됩니다. 이 파일은 주로 함수와 기호의 정의를 포함하고 있을 뿐 .lib 파일 자체는 실행 코드를 포함하고 있지 않습니다.

C++에서는 컴파일 시에 .lib 파일이 필요하며, 링크 과정에서 이 파일이 사용됩니다. 그러나 C#은 .NET Framework 또는 .NET Core와 같은 가상 머신 위에서 실행되는 고수준 언어로, 직접적으로 .lib 파일을 사용하는 것은 불가능합니다.

대신에, C#에서는 Platform Invocation Services(P/Invoke)를 통해 외부 DLL에 있는 함수들을 호출할 수 있습니다. 따라서 .lib 파일을 사용하는 대신 해당 .lib 파일로부터 생성된 DLL 파일을 사용하여 P/Invoke를 통해 함수를 호출해야 합니다.

길지만 결국 근본적으로는 언어 및 런타임 환경이 서로 다르기 때문입니다.

 

C# 코드는 CLR(Common Language Runtime)이라고 불리는 가상 머신에서 실행됩니다. 이는 메모리 관리, 예외 처리 및 스레드 관리와 같은 기능을 제공합니다. 반면에 C++ 코드는 운영체제의 네이티브 코드로 컴파일되어 실행됩니다.

 

따라서 C#에서는 .lib 파일에 포함된 네이티브 코드를 직접적으로 이해하고 호출할 수 없습니다. 대신에, C#에서는 P/Invoke를 사용하여 외부 DLL 파일에 포함된 함수들을 호출할 수 있습니다. 이렇게 함으로써 C#은 외부 C++ 코드와 상호작용할 수 있습니다.

 

 

 

 

반응형

 

C#에서 LINQ와 람다(Lambda)식에 대해 알아봅니다.

 

 

 

1. LINQ란?

 

LINQ (Language-Integrated Query)는 C# 언어에 통합된 쿼리 언어입니다. 이는 데이터 소스에서 데이터를 쿼리하고 조작하는 데 사용됩니다.

 

LINQ를 사용하면 배열, 컬렉션, 데이터베이스, XML 등과 같은 다양한 데이터 소스에서 데이터를 추출하고 변환할 수 있습니다.


일반적인 LINQ 쿼리는 from, where, select와 같은 키워드를 사용하여 데이터를 선택하고 필터링하는 데에 사용됩니다.

 

int[] numbers = [ 0, 1, 2, 3, 4, 5, 6 ];

// LINQ를 이용해 짝수를 쿼리.
var evenNumbers = from num in numbers
                  where num % 2 == 0
                  select num;

 

 

 

2. 람다식(Lambda Expressions)이란?

 

람다식은 익명 함수를 간결하게 표현하는 방법입니다. 주로 LINQ와 함께 사용되며, 간단한 인라인 함수를 정의할 때 효과적입니다.


람다식의 일반적인 구문은 input => expression 형태로 표현됩니다. 여기서 input은 매개변수를 나타내고, expression은 함수의 몸체를 나타냅니다.


람다식은 더 간결하게 코드를 작성할 수 있게 해 주며, LINQ에서는 특히 읽기 쉽고 간편한 필터 및 프로젝션 작업에 자주 사용됩니다.

 

// LINQ에 람다식을 함께 사용.
var evenNumbers = numbers.Where(num => num % 2 == 0);

 

 

 

3. LINQ와 람다식

 

LINQ와 람다식을 조합하여 사용하면 코드를 간결하게 유지하면서도 더 복잡한 조건이나 작업을 처리할 수 있습니다.

 

두 가지를 조합하면 다음과 같은 이점을 얻을 수 있습니다.

1. 람다식은 코드를 더 간결하게 만들어주기 때문에 LINQ와 함께 사용하면 코드가 간편하고 가독성이 높아집니다.

2. 람다식을 사용하면 더 복잡한 조건을 지정할 수 있고, 필요에 따라 쉽게 추가 또는 수정할 수 있습니다.

3. LINQ 메서드와 람다식을 함께 사용하면 메서드 체이닝을 통해 여러 작업을 한 줄로 연결할 수 있습니다.

4. 간단한 연산이나 프로젝션을 람다식 내에서 인라인으로 정의할 수 있어 코드를 더 직관적으로 만들 수 있습니다.

 

 

 

 

 

 

반응형

+ Recent posts