프로그래밍
프로그래밍/Programming
2021. 3. 1.
[AWS] API Gateway 리소스 정책 사용하기
AWS의 API Gateway는 간편하게 Public API 환경을 구축할 수 있는 서비스이다. 인프라의 상당수가 AWS Resource로 구성되어 있다면, API Gateway를 활용하게 되는 Case가 많이 발생할 것이다. 하지만, API GW는 생성 시점부터 Access Control이 설정되지 않은 완전한 Public 구성으로 되어있기 때문에 보안상의 이슈와 직결될 수 밖에 없다. 사내에 보안팀이 별도로 있다면, API GW의 필요성과 API에 대한 접근 제한을 요청하는 보안팀의 요청을 겪게 될 확률이 높다. 물론 AWS에서는 API에 대한 ACL 설정을 위해 리소스 정책(Resource Policy)을 제공하고 있다. (참고) 리소스 정책에는 다음과 같은 3가지 기준을 설정할 수 있다. AWS ..
프로그래밍/Programming
2020. 8. 31.
[Kubernetes] 쿠버네티스(Kubernetes)란? (3편) External Traffic
(1)편과 (2)편에 걸쳐서 Cluster에서 서비스가 동작되는 데에 요구되는 Hardware와 Software 구성을 살펴보았다. 그렇다면 이번에는 외부의 요청(External Traffic)이 어떻게 Cluster로 유입되는 지를 살펴보려고 한다. ClusterIP _ Default Service Type in Kubernetes ClusterIP는 Kubernetes의 Default Service Type이다. ClusterIP는 Cluster 내의 다른 service와 통신할 수 있도록 한다. 외부 접근(External access) 그 자체를 의미하는 것이 아니며, proxy를 통해 외부 요청(External Traffic)이 service에 접근이 가능하다는 것이다. 하지만 Kubernetes..
프로그래밍/Programming
2020. 8. 30.
[Kubernetes] 쿠버네티스(Kubernetes)란? (2편) Software
Container Container는 각 Application의 실행 환경을 다른 Application 구성 요소와 분리하여 갖고 있다. Pods _ Group of Containers Pod는 Container의 그룹으로 Kubernetes에서 동작이 이뤄지는 가장 작은 단위에 해당한다. Pod에는 복수의 Container가 포함될 수 있지만, Kubernetes에서 복제가 이뤄지는 단위가 Pod이기 때문에 일반적으로는 Pod당 1개의 Container를 설정한다. Deployments _ Manager for Pods Deployment의 주된 역할에는 각 Pod과 Pod의 Replica Set에 업데이트 된 부분을 일괄로 전달하는 것에 있다. 이 때, 얼마나 많은 Replica Set을 구동시킬 것..
프로그래밍/Programming
2020. 8. 25.
[Kubernetes] 쿠버네티스(Kubernetes)란? (1편) Hardware
Programming Language도 시간이 지남에 따라 많은 부분에서 비슷한 특징을 공유하게 되는 것과 같이 Service 구성을 위한 Technical Stack도 트렌드에 따라서 전체적인 Service Architecture도 유사한 구성을 보이게 된다. 이번에는 그 중에서 MSA(Micro Service Architectrue), Cloud Computing, Serverless Architecure가 주된 흐름을 보이는 최근의 Tech 트렌드에 유용한 Kubernetes에 대해서 한번 간략하게 살펴보고자 한다. (공식 문서와 구글링에 기반하여 직접 학습을 하면서 작성하는 기록의 형식이 될 것으로 보여, 틀린 부분과 수정이 필요한 부분이 있을 수도 있음을 미리 밝힌다) Nodes _ Worker..
프로그래밍/Database
2020. 8. 23.
[MySQL] Explain_Query 동작 방식 및 성능 파악하기
DB Schema 설계는 Business Logic에 대한 이해로부터 비롯된다. 이 때, Schema의 설계에는 2가지가 포함된다고 생각한다. Business Logic에 부합하는 Entity들을 구상하여 Entity들 간의 관계(Relation)를 확실하게 규정하는 것과 실제 사용성의 측면에서 지나치게 복잡한 구조는 지양하여, 효과적인 쿼리 수행 성능을 위한 구조를 마련하는 것이 포함된다. 이 중, Entity 들 간의 관계를 규정하는 부분에 대해서는 아래 링크의 포스팅을 통해 언급한 적이 있다. 2020/04/07 - [프로그래밍/Database] - [DB] 정규화(Normalization)와 역정규화(DeNormalization) [DB] 정규화(Normalization)와 역정규화(DeNorma..
프로그래밍/IoT
2020. 8. 20.
[AWS IoT] MQTT Republish Rule Action 사용시 주의점
요구사항은 다음과 같았다. IoT Device에서 발생한 특정한 이벤트에 대하여 실시간으로 정보를 받고 싶다는 외부의 요청이 있었다. 협업을 하는 외부 조직이다보니 빠르게 대응을 해줘야했지만, 우리가 갖춰야 하는 중요한 Business Logic과는 관련이 없는 부분이었기 때문에 로직을 관리하는 코드를 더럽히고(?) 싶지 않았다. 단순한 API 연동이었기 때문에 특정 Topic으로 발생한 이벤트를 catch하여, 전달받은 API로 POST요청을 하면 되는 상황이었다. 이 때 발생한 고민 포인트가 또 한가지 있었다. HTTPS API 연동을 Lambda와 같은 서비스를 사용해서 처리할 지, 다행스럽게도 AWS IoT에서 제공하는 HTTPS Downstream Rule을 사용하여 처리할 지.. 위의 고민 포..
프로그래밍/Database
2020. 8. 17.
[MySQL] Order By한 뒤, Group By하는 방법
Data가 적재된 방식에 따라 Group By의 결과가 달라지게 될 것이다. Group By를 통해 얻고자 하는 값이 Sum이거나 Count와 같이 가공이 이뤄지는 값이라면 아래의 쿼리 들은 큰 의미가 없을 것이다. 하지만 만약에 데이터가 기록된 시간 또는 업데이트 된 시간에 따라 정렬한 뒤 Group By를 하고자 하는 경우가 있을 것이다. 간단하게 생각하여 쿼리를 작성한다면 아래와 같을 것이다. SELECT * FROM order_book ORDER BY created_at DESC GROUP BY product; 하지만 위의 쿼리는 에러가 발생한다. Depth가 동일한 쿼리에서 Order By와 Group By를 동시에 사용할 수 없다는 의미의 쿼리 에러가 발생하는 것이다. 그렇다면, Sub Que..
프로그래밍/Database
2020. 8. 5.
[MySQL] Roll-Up Query
Roll Up 쿼리는 Group By와 함께 사용되는 조건 구문이다. Group By 쿼리에 의해서 grouping된 결과에 대해서 보다 상세한 정보를 반환하는 기능을 수행한다. ROLLUP 쿼리를 사용한다면 그룹화된 row들에 대한 중간 합(결과)에 대한 새로운 row가 추가되어 쿼리의 결과를 얻을 수 있게 된다. 아래의 정보들이 저장되어 있다고 할 경우, ROLLUP 쿼리를 쓴 결과는 아래와 같다. warehouse product model quantity San Francisco Apple iPhone XS 50 San Francisco Apple iPad Pro 10 San Francisco Apple Apple Watch 200 San Francisco Samsung Z Flip 200 San ..
프로그래밍/Big Data
2020. 7. 19.
[Big Data] 101 _ Big Data 어떻게 시작할까?
서비스의 운영을 위해서, 서비스의 향상을 위해서, 새로운 가치를 창출하기 위해서 Log라는 것을 정의하게 된다. 단순한 로깅을 넘어 서버, Web/App Client, IoT Device, Serverless 환경의 각 Instance나 Component들에서 발생하는 이벤트들에 대한 포괄적인 정의를 할 수 있다면 이는 더 이상 단순한 Log라 정의할 수 없으며 방대한 Data 즉, Big Data의 일환으로 기록될 것이다. 실제로 Big Data의 데이터 원천(Data Source)에 대한 개념들은 점차 확대되고 있다. IoT 서비스라면 IoT Device에서 발생하는 이벤트 로그들이나 센서 로그, 서버나 클라이언트에서의 Request/Response 로그나 사용자 행동 로그, 혹은 RDBMS에서 추출..