Recent Posts
cover_image
 ・ 2 min

C 언어는 뭘까? 오픈소스일까?

42서울 개포 클러스터에서 문득 리눅스, Dart, Flutter 등 많은 프로젝트를 오픈소스라고 말하는데 그러면 C 언어도 오픈소스인가 하는 의문이 생겼어요. 찾아보니 C 언어는 소프트웨어가 아니였어요. 그래서 오픈소스라기 보다는 정의된 표준이였어요. 그래서 제각기 다양한 컴파일러를 구체적으로 구현하면서 정의된 표준을 준수하면서 C 컴파일러 오픈소스가 많아지게 되었어요. 예) GCC, MSVC C 언어는 언어를 위한 '표준'만을 말하는 거였어요. 누군가 소유할 수 있는 것이 아니고 모두가 사용할 수 있는 언어였어요. 이 표준을 사용해서 컴파일러나 인터프리터를 개발하는 건 누구나 가능했어요. 그렇지만 컴퓨터를 모르는 사람과 적은 인원으로는 언어를 만드는 게 쉬운 일이 아니였을 거예요. C 언어란 무엇인가? C 언어는 프로그램이 실행되기 위해 따라야 할 규칙들을 기준으로 .c 파일 형식으로 작성돼요. 작성된 소스 코드는 사람만 이해할 수 있으며, 컴퓨터가 직접 이해할 수 있는 것은 아니에요. 컴퓨터가 이해할 수 있도록 소스 코드를 기계어로 변환하는 과정이 필요한데, 이 과정에서 컴파일러라는 도구가 필수적이에요. 컴파일 과정에서는 소스 코드의 문법 오류를 검사하고, 해당 파일이 컴퓨터에서 실행 가능한 상태로 변환돼요. 전처리기를 통해 코드 전처리를 수행 컴파일러가 전처리된 파일을 기계어로 변환하여 개체 파일을 생성 링커가 개체 파일과 필요한 스타트업 코드 등을 결합해 최종 실행 파일을 생성 C 언어 컴파일러는 왜 다양할까요? C 언어는 다양한 운영 체제와 하드웨어에서 사용되기 때문에, 각 환경에 최적화된 컴파일러들이 필요했어요. 다양한 요구와 성능, 기능에 맞추어 다른 컴파일러가 개발되었고 오픈소스 컴파일러는 커뮤니티에서 자유롭게 수정되고 배포되어 특정 기능이나 환경에 맞춘 다양한 버전들이 파생되었어요. 컴파일 과정 컴파일 과정은 여러 단계로 이루어집니다. 이를 gcc 명령을 통해 단계별로 확인할 수 있어요. 전처리: gcc -E main.c -o main.i 전처리기는 include, define 등의 전처리 명령을 해석하고, 코드에서 필요한 외부 파일과 매크로를 처리하여 전처리된 파일을 생성해요 컴파일: gcc -S main.i -o main.s 전처리된 파일을 어셈블리 언어로 변환돼요. 어셈블리 언어는 특정 하드웨어에서 실행될 수 있도록 변환된 코드의 중간 형태예요 어셈블: gcc -c main.s -o main.o 어셈블리 코드를 기계어로 변환하여 개체 파일(.o)을 생성해요 링크: gcc main.o -o main.exe 링커는 개체 파일을 Startup 코드 등과 결합해 실행 파일을 만들어요. Startup 코드는 프로그램 실행 전 필요한 준비 작업을 수행하며, main() 함수를 호출하는 역할을 해요. Where focus goes, energy flows.— Tony Robbins
cover_image
 ・ 4 min

Route 53에서 레코드 입력 필드 살펴보기

Route 53에서 등록된 도메인의 레코드를 편집해야 하는 경우가 있어요. 그런데 주로 그때그때 입력하라는 것만 찾아봤었는데요. 그런데 각 입력 필드는 왜 있고 뭘 입력해야 하는지 잘 모른 채 쓰고 있었어요. Route 53이란 AWS가 제공하는 DNS 서비스예요. Route 53을 통해 도메인을 등록하고, 트래픽을 AWS 서비스나 다른 웹 애플리케이션으로 효율적으로 라우팅할 수 있어요. 그래서 이번에 한 번 정리해보려고 해요! AWS에서 Route 53에서 도메인을 하나 누르고 Create record 버튼을 누르면 아래와 비슷한 이미지가 나올 거예요. 파란색 Info를 누르면 영어로 된 설명을 볼 수 있어요. 호스팅된 영역의 각 레코드는 Route 53이 DNS 쿼리에 응답하는 방식을 정의해요. 여러 레코드에 대한 설정을 지정한 다음 한 번에 모두 만들 수도 있어요. Record name 도메인의 이름을 나타내며, 각 레코드가 어떤 도메인이나 하위 도메인에 속하는지 구분하는 역할을 해요. 도메인 루트 자체를 사용하고 싶다면 이 필드는 비워 두거나 @로 입력할 수도 있어요. 예) www.example.com 은 example.com의 하위 도메인이에요. Record type 선택한 옵션에 따라 Value에서 입력 예시가 변경돼요. 어떤 유형은 선택한 정책에 따라 사용하지 못할 수 있어요. A - IPv4 주소로 트래픽을 라우팅해요 AAAA - IPv6 주소로 트래픽을 라우팅해요 CNAME - 별칭처럼 다른 도메인 이름으로 트래픽을 라우팅해요 MX - 이메일 수신 서버를 지정해요 TXT - 도메인 소유 확인, 이메일 발신자 인증, 애플리케이션 설정에 사용돼요 PTR - IP 주소를 도메인 이름에 매핑해요 SRV - 특정 서비스를 제공하는 서버를 식별하는 데 사용돼요 SPF - 이메일 발신자 인증을 위해 사용되었으나 이제는 TXT 레코드로 구현해서 권장하지 않아요 NAPTR - 특정 통신 프로토콜이나 DDDS 애플리케이션에서 사용해요 CAA - 도메인에 대해 SSL/TLS 인증서를 발급할 수 있는 인증 기관을 제한해요 NS - 호스팅 영역 내의 권한이 있는 네임 서버를 지정해요 DS - DNSSEC를 위한 신뢰 체인을 설정하는 데 사용돼요 TLSA - 도메인 이름에 대해 TLS 인증서를 사용하는 서비스를 안전하게 설정하는 데 사용돼요 SSHFP - SSH 서버의 공개 키 지문을 DNS에 저장하는 데 사용돼요 HTTPS - HTTPS와 관련된 정보를 포함한 레코드예요 SVCB - 서비스 지점과 연결 설정 정보를 포함해요. 클라이언트와 서버 간의 연결을 최적화하는 데 도움을 줘요 Alias AWS Route 53에서 제공하는 특수 옵션이에요. 특정 AWS 리소스와 통합할 수 있어요. 이걸 사용하게 되면 Value와 TTL이 사라져요. 그리고 Route traffic to가 나와요. endpoint와 region을 선택해야 해요. Route traffic to Alias 옵션을 선택할 때 나타나는 옵션으로, 트래픽을 어디로 보낼지 지정해요. S3 버킷, ELB, CloudFront 배포, 또는 다른 Route 53 레코드로 연결할 수 있어요. 예) CloudFront 배포와 연결하면, 사용자는 도메인을 통해 CloudFront로 트래픽을 라우팅할 수 있으며 IP 변경 시에도 설정을 수정할 필요가 없어요. Value 각 레코드의 실제 값으로, IP 주소, 별칭 대상 도메인 이름, 메일 서버 주소 등 라우팅하려는 목적지 주소를 지정해요. TTL 레코드가 캐시에 유지되는 시간을 설정해요. TTL이 짧으면 캐시에서 빨리 갱신되지만, 자주 업데이트되므로 DNS 요청 비용이 증가할 수 있어요. Routing policy 선택한 정책에 따라 UI가 바뀌면서 입력 필드가 추가돼요. Simple: 단순 라우팅 가장 기본적인 라우팅 방식이에요. 하나의 도메인 이름에 대해 한 가지 IP 주소를 반환해요. 예) 사용자가 도메인 이름으로 요청을 하면, 설정한 단일 엔드포인트(서버)에 트래픽이 전송돼요. Weighted: 가중치 기반 라우팅 여러 엔드포인트에 걸쳐 트래픽을 분산하고자 할 때 사용해요. 각 엔드포인트에 가중치를 부여하여 특정 엔드포인트로 더 많은 트래픽이 가도록 하거나, 트래픽을 비율로 나눌 수 있어요. Geolocation: 지리적 위치 기반 라우팅 사용자의 지리적 위치에 따라 트래픽을 라우팅해요. 예) 한국에서 접속한 사용자와 미국에서 접속한 사용자가 있을 때, 각각 가까운 서버에 연결되도록 할 수 있어요. Latency: 지연 시간 기반 라우팅 사용자와 가장 짧은 지연 시간을 제공하는 엔드포인트로 트래픽을 보내요. 전 세계 여러 리전에 서버가 분산되어 있을 때 유용해요. Failover: 장애 조치 라우팅 장애 발생 시 백업 엔드포인트로 트래픽을 자동으로 전환하는 라우팅 방식이에요. 기본적으로 주 엔드포인트로 라우팅되지만, 장애가 감지되면 백업 엔드포인트로 전환돼요. Multivalue answer - 다중값 응답 여러 값을 가진 레코드를 반환하여 각기 다른 엔드포인트로 트래픽을 분산해요. 상태 검사를 통해 가용한 엔드포인트만을 반환하여 가용성을 향상할 수 있어요. IP-based - IP 기반 라우팅 IP 기반 라우팅은 사용자의 요청을 송신 IP 주소에 따라 특정 리소스에 라우팅하는 방식 특정 IP 주소 블록을 기준으로 트래픽을 라우팅할 수 있어, 특정 IP 대역을 타겟으로 특정 서버에 접근하도록 설정할 때 유용해요. 일반적으로 특정 IP 범위에 맞춘 사용자 집단에게 맞춤형 콘텐츠나 리소스를 제공해야 하는 경우에 사용돼요. Geoproximity - 지리적 위치 근접 기반 라우팅 AWS Global Accelerator와 연동하여 사용자가 위치한 물리적 거리와 지정된 비율에 따라 특정 리소스에 트래픽을 라우팅하는 방식이에요. 사용자가 리소스에 가까울수록 해당 리소스를 더 선호하게 설정할 수 있으며, AWS 콘솔에서 Bias 값을 조정하여 트래픽을 어느 위치에 우선적으로 보내게 할 것인지 세밀하게 제어할 수 있어요. 여러 AWS 리전 간의 트래픽을 분배하거나 지역별로 리소스를 최적화해야 할 때 유용해요. We know nothing of tomorrow, our business is to be good and happy today.— Sydney Smith
cover_image
 ・ 2 min

Flutter를 사용한다면 한번 볼만한 링크들

Flutter를 사용하면서 React나 Spring 같이 개발하는데 참고할만한 글이 많지 않은데요. 그렇지만 단비 같은 사이트들이 있어요. 링크를 통해 Flutter와 관련된 사이트를 소개할게요. Sites Flutter: Flutter를 배우기 위해서 꼭 찾아가야 하는 공식 사이트예요. Dart: Flutter를 쓰려면 Dart 언어를 배워야 해요. 이곳에서 배울 수 있어요. Medium - Flutter: Flutter 출시 소식이나 변경사항을 미디엄에서 만날 수 있어요. Flutter Samples: Flutter로 만들어진 것들을 볼 수 있어요. Flutter Gems: Flutter로 만들어진 것들을 볼 수 있어요2. IT's ALL Widgets!: Flutter로 만들어진 앱들을 볼 수 있어요. Flutter Awesome: 유용한 Flutter 위젯들을 볼 수 있어요. Flutter Tap: Flutter 소식을 영문 뉴스레터로 받아 볼 수 있어요. Blogs Code with Andrea: 안드리아라고 유명한 Flutter 개발자의 블로그예요. 도움 되는 글이 많아요. Zenn Flutter: Zenn이라는 사이트에서 Flutter가 태그된 글 모음이에요. ChristianFindlay.com Chooyan's Flutter Invertase Very Good Ventures Line Engineering Flutter와 관련된 글을 쓰시는 한국인들 🇰🇷 Cody Yun (Medium) Ximya (Velog) Henry95 (Tistory) 중고나라 기술 블로그 (Medium) 다나와 기술 블로그 (GitHub Pages) Links Visual Studio Code Shortcuts for Fast and Efficient Development: VS Code에서 Flutter 프로젝트 사용할 때 자주 사용되는 단축키를 설명한 글이에요. Flutter with Supabase: Supabase를 Flutter에서 사용할 수 있는 방법을 제공하는 재생목록이에요. Best practices for building a scalable Flutter app: Flutter 프로젝트 작성 모범 사례 글이에요. Gon이라는 일본 엔지니어가 수집한 글 목록 Conference 지역별로 만들어진 Flutter 행사 사이트예요. Flutter Connection FlutterFlow Developers Conference Flutter &x26; Friends Fluttercon USA Videos Top 35 Flutter Widgets: 자주 사용되는 위젯을 소개한 영상이에요. Flutter 프로젝트 flutter_template firebase_authentication_flutter_DDD go_router_riverpod If you tell the truth, you don't have to remember anything— Mark Twain
All Posts