반응형

AWS API Gateway는 RESTful API를 간편하게 구축할 수 있는 서비스이며, AWS Lambda는 서버리스 기술을 사용하여 코드를 실행하는 서비스입니다. 두 서비스를 통합하여 파일 업로드 기능을 구현할 수 있습니다.

  1. AWS Lambda 함수 생성하기
  • AWS Management Console에서 AWS Lambda로 이동합니다.
  • "Create function"을 클릭합니다.
  • "Author from scratch"를 선택하고, 함수 이름, 런타임, 권한을 설정합니다.
  • "Create function"을 클릭하여 함수를 생성합니다.
  1. AWS Lambda 함수 코드 작성하기

AWS Lambda 함수에서는 파일 업로드를 처리하는 코드를 작성할 수 있습니다. 아래의 샘플 코드는 파일 업로드를 처리하는 Node.js 코드입니다.

 

const AWS = require('aws-sdk');
const s3 = new AWS.S3();

exports.handler = async (event, context) => {
  const { file } = JSON.parse(event.body);
  const buffer = Buffer.from(file.replace(/^data:image\/\w+;base64,/, ""), 'base64');

  const params = {
    Bucket: 'my-bucket',
    Key: 'my-file',
    Body: buffer,
    ContentEncoding: 'base64',
    ContentType: 'image/jpeg'
  };

  await s3.putObject(params).promise();
반응형

'개발 > Cloud' 카테고리의 다른 글

AWS lambda payload 6mb limit - chatGPT 작성  (0) 2023.02.07
AWS Lambda Cold Start & Warm Start - chatGPT 작성  (0) 2023.02.06
블로그 이미지

민오라방구

개발 , 여행, 일상 아직 배울게 많은 개발자

,
반응형

postgresql jsonb array타입(jsonb list)에 대해 json 추가/수정/삭제

 

Insert

INSERT INTO table_name (column1, column2, column_jsonb_list)
VALUES ('value1', 'value2', '["jsonb_value1", "jsonb_value2", ... ]'::jsonb[])

 

Update

UPDATE table_name
SET column_name = array_to_json(
  array_agg(
    CASE
      WHEN element->>'id' = 'uuid_value' THEN
        jsonb_set(element, '{deactive_dt}', to_jsonb(current_date))
      ELSE element
    END
  )
)
FROM (
  SELECT jsonb_array_elements(column_name) AS element
  FROM table_name
) sub;

Delete

SELECT jsonb_set('{"data": [1, 2, 3, 4, 5]}'::jsonb, '{data}', '[]');
반응형
블로그 이미지

민오라방구

개발 , 여행, 일상 아직 배울게 많은 개발자

,
반응형

AWS Lambda는 Amazon Web Services(AWS)에서 제공하는 서버리스 컴퓨팅 플랫폼으로 서버를 관리하지 않고도 코드를 실행할 수 있습니다. 이 플랫폼의 제한 사항 중 하나는 Lambda 함수에 전달할 수 있는 페이로드의 최대 크기인 6MB입니다.

6MB 페이로드 제한은 Lambda 함수가 트리거될 때 전달될 수 있는 데이터의 크기에 영향을 미치는 제약 조건입니다. 즉, 함수에 6MB 이상의 데이터가 필요한 경우 이 제한을 해결할 방법을 찾아야 합니다.

AWS Lambda에서 6MB 페이로드 제한을 극복하는 방법에는 여러 가지가 있습니다. 한 가지 접근 방식은 Amazon S3 버킷에 데이터를 저장한 다음 함수가 실행될 때 데이터를 검색하는 것입니다. 또 다른 접근 방식은 데이터를 여러 청크로 분할한 다음 각 청크를 개별적으로 처리하는 것입니다.

솔루션을 선택할 때 다양한 옵션 간의 장단점을 고려하는 것이 중요합니다. 예를 들어 S3 버킷에 데이터를 저장하는 것은 많은 양의 데이터를 저장해야 하는 경우 좋은 옵션일 수 있지만 S3 버킷에서 데이터를 검색해야 하므로 함수의 대기 시간이 증가할 수도 있습니다. 반면에 데이터를 여러 청크로 분할하는 것은 데이터를 병렬로 처리해야 하는 경우 좋은 옵션일 수 있지만 코드의 복잡성을 증가시킬 수도 있습니다.

결론적으로 AWS Lambda의 6MB 페이로드 제한은 Lambda 함수에 전달할 수 있는 데이터의 크기에 영향을 미치는 제약 조건입니다. 이 제한은 문제가 될 수 있지만 S3 버킷에 데이터를 저장하거나 데이터를 여러 청크로 분할하는 등 여러 가지 방법으로 이를 해결할 수 있습니다. 솔루션을 선택할 때 다양한 옵션 간의 장단점을 고려하는 것이 중요합니다.

반응형
블로그 이미지

민오라방구

개발 , 여행, 일상 아직 배울게 많은 개발자

,
반응형

MyBatis는 Java 애플리케이션을 위한 강력하고 유연한 SQL 매핑 프레임워크입니다. Spring은 엔터프라이즈급 애플리케이션을 구축하기 위한 널리 사용되는 Java 프레임워크입니다. 이 블로그 게시물에서는 Spring 프레임워크와 MyBatis를 통합하여 두 프레임워크의 기능을 모두 활용하는 방법을 보여줍니다.

1단계: 프로젝트 설정

시작하려면 필요한 종속성으로 프로젝트를 설정해야 합니다. Maven 또는 Gradle과 같은 빌드 도구를 사용하여 종속성을 관리할 수 있습니다. 이 예제에서는 Maven을 사용합니다.

pom.xml 파일에 다음 종속성을 추가합니다.

 

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.5</version>
</dependency>

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis-spring</artifactId>
  <version>2.0.3</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.3.1</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>5.3.1</version>
</dependency>

 

2단계: 마이바티스 설정

mybatis-config.xmlMyBatis를 구성하기 위한 구성 파일을 만듭니다 . 이 파일에서 JDBC 속성과 매퍼 위치를 지정합니다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test"/>
        <property name="username" value="root"/>
        <property name="password" value="password"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="mapper/UserMapper.xml"/>
  </mappers>
</configuration>

 

3단계: MyBatis 매퍼 생성

매퍼 인터페이스 및 XML 파일을 생성하여 매퍼에 대한 SQL 문을 정의합니다.

public interface UserMapper {
  User selectUser(int id);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
  <mapper namespace="org.mybatis.example.BlogMapper">
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>
반응형

'개발 > Java' 카테고리의 다른 글

리눅스 Java 설치 및 환경변수 설정  (0) 2017.12.11
블로그 이미지

민오라방구

개발 , 여행, 일상 아직 배울게 많은 개발자

,
반응형
 
 

AWS Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있는 서버리스 컴퓨팅 플랫폼입니다. Lambda 함수에 대한 요청이 있을 때 AWS는 요청을 처리하기 위해 컨테이너라고 하는 함수의 새 인스턴스를 생성합니다. 새 컨테이너를 만드는 이 프로세스를 콜드 스타트라고 합니다.

콜드 스타트는 컨테이너를 만들고 필요한 리소스를 로드하는 데 추가 시간이 필요하기 때문에 새 컨테이너에 대한 첫 번째 요청에 대한 응답 시간이 느려질 수 있습니다. 이는 많은 종속성이 필요한 더 큰 함수나 함수에서 특히 두드러집니다.

반면에 웜 스타트는 매번 새 컨테이너를 생성하는 대신 컨테이너를 재사용하여 후속 요청을 처리할 때 발생합니다. 필요한 리소스가 이미 로드되어 있으므로 응답 시간이 빨라집니다.

콜드 스타트의 영향을 줄이기 위해 다음 전략을 사용할 수 있습니다.
1. 함수 및 해당 종속성의 크기를 줄입니다.
2. 함수에 대해 지정된 수의 컨테이너를 미리 준비하는 기능인 프로비저닝된 동시성 사용
3. 호출 간에 재사용할 수 있는 메모리에 데이터 저장


다음은 콜드 스타트 ​​시간을 줄이기 위해 데이터를 메모리에 저장하고 여러 호출에서 재사용하는 방법을 보여주는 Python의 예제 코드입니다.

import json

cached_data = {}

def handler(event, context):
    if not cached_data:
        # Fetch data from database or external API
        data = fetch_data()
        cached_data[‘data’] = data

    # Use cached data for subsequent requests
    response = {
        “statusCode”: 200,
        “body”: json.dumps(cached_data[‘data’])
    }

    return response

이 예제에서 함수가 처음 호출되면 외부 소스에서 데이터를 검색하고 이를 cached_data 사전에 저장하기 위해 fetch_data() 함수가 호출됩니다. 후속 호출에서는 캐시된 데이터가 사용되므로 응답 시간이 빨라집니다.

AWS Lambda에서 콜드 스타트와 웜 스타트의 개념을 이해하면 더 나은 성능을 위해 기능을 최적화하고 사용자에게 더 나은 경험을 제공할 수 있습니다.

반응형
블로그 이미지

민오라방구

개발 , 여행, 일상 아직 배울게 많은 개발자

,
반응형

Elasticsearch는 인기 있는 오픈 소스 검색 및 분석 엔진입니다. 검색, 성능 분석, 로깅 등 다양한 목적으로 사용됩니다. 아래는 Elasticsearch와 REST API를 사용하여 기본 검색을 수행하는 방법의 예입니다.

curl -X GET "localhost:9200/{index_name}/_search?q={field_name}:{value}"

이 명령은 Elasticsearch에 GET 요청을 보냅니다. 지정된 색인 (index_name)에서 지정된 필드 (field_name)이 제공된 값 (value)와 일치하는 문서를 검색합니다.

결과는 일치하는 문서를 포함하는 JSON 개체가 됩니다. JSON 개체의 구조는 다음과 같습니다.

{
  "took": 3,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1.0,
    "hits": [
      {
        "_index": "index_name",
        "_type": "type_name",
        "_id": "document_id",
        "_score": 1.0,
        "_source": {
          "field_name": "value",
          ...
        }
      }
    ]
  }
}

이는 기본적인 예일 뿐이며 Elasticsearch는 훨씬 더 고급 검색 및 작업이 가능합니다. Elasticsearch의 기능과 사용 방법에 대해 자세히 알아보려면 공식 Elasticsearch 설명서를 참조하는 것이 좋습니다.

반응형
블로그 이미지

민오라방구

개발 , 여행, 일상 아직 배울게 많은 개발자

,
반응형

java 설치 및 java 환경 변수 설정 완료 기준으로 설명하겠습니다.

 

 

  • apache 및 gcc 설치
    • $ yum -y install httpd httpd-devel gcc gcc-c++
  • tomcat connectors 다운로드 및 설치
    • 다운로드
      wget https://archive.apache.org/dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.48-src.tar.gz
    • 압축 해제
      $ tar zxvf tomcat-connectors-1.2.48-src.tar.gz
    • 이동
      $ cd tomcat-connectors-1.2.48-src/native/
    • 설정
      $ ./configure --with-apxs=/bin/apxs
    • 빌드(설치 완료 후 mod_jk.so 파일 생성 완료)
      $ make / $make install
      (/usr/lib64/httpd/modules/mod_jk.so 설치 확인)
  • httpd.conf 설정(포트 및 jk_module 설정
    • 기본 설치 경로에 httpd.conf 수정

      $ vim /etc/httpd/conf/httpd.conf
    • 포트 변경(80 > 8081)

    • jk_module 추가
      httpd.conf 파일 제일 아래 아래 코드 추가

      LoadModule jk_module /usr/lib64/httpd/modules/mod_jk.so
      <lfModule jk_module>
          JkWorkersFile /etc/httpd/conf/workers.properties
          JkLogFile /var/log/httpd/mod_jk.log
          JkLogLevel info
          JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
          JkMount /* loadbalancer
      </IfModule>

  • workers.properties 파일 생성
    • vim /etc/httpd/conf/workers.properties
      아래 파일 파일 내용 추가

      worker.list=loadbalancer, jkstatus
      worker.jkstatus.type=status

      worker.loadbalancer.type=lb
      worker.loadbalancer.balance_workers=WAS1,WAS2
      worker.loadbalancer.sticky_session=1

      worker.WAS1.type=ajp13
      worker.WAS1.host=192.168.1.101 #was 1번 아이피
      worker.WAS1.port=8009             #ajp protocol port 번호 server.xml 파일 확인
      worker.WAS1.lbfactor=1

      worker.WAS2.type=ajp13
      worker.WAS2.host=192.168.1.101
      worker.WAS2.port=8009
      worker.WAS2.lbfactor=1
  • 세션클러스터링 설정
    • web.xml의 web-app 태그 안에 
      <distributable/> 추가
  • httpd 재시작
    • /usr/sbin/httpd -k restart
반응형

'개발 > WAS' 카테고리의 다른 글

jboss maxParameterCount 설정  (0) 2018.08.02
Linux Jeus7 설치  (0) 2018.08.02
블로그 이미지

민오라방구

개발 , 여행, 일상 아직 배울게 많은 개발자

,
반응형

계정 생성 - 버전별 방법이 용이함

- 1.

mysql > create user 계정@% identified by '비밀번호';

- 2.

mysql > USE mysql;     // mysql database 선택
mysql > INSERT INTO user (Host, User, Password) VALUES ('localhost', '계정', password('비밀번호'));
mysql > INSERT INTO user (Host, User, Password) VALUES ('%', '계정', password('비밀번호'));
mysql > FLUSH privileges; 



권한 설정

mysql > GRANT ALL PRIVILEGES ON *.* TO 계정@'%' IDENTIFIED BY 'password'; -- 모든 테이블의 권한


권한 확인

mysql > SHOW GRANTS FOR 계정@localhost;  -- 계정과 호스트를 붙인다

mysql > SHOW GRANTS FOR 계정@'%';

mysql > SHOW GRANTS FOR 계정@'192.168.1.1';



권한 삭제

mysql > revoke all on DB.테이블명 from 계정;



계정 삭제 - 버전별 방법이 용이함

- 1.

mysql > drop user '계정'@localhost;

- 2.

mysql > select * from user;
mysql > delete from user where user = '계정';  

반응형
블로그 이미지

민오라방구

개발 , 여행, 일상 아직 배울게 많은 개발자

,
반응형

Apache Flume : 데이터수집기

- 플럼(Flume)는 분산 환경에서 대량의 로그 데이터를 효과적으로 수집하여, 합친 후 다른 곳으로 전송할 수 있는 신뢰할 수 있는 서비스다.

플럼은 단순하며 유연한 스트리밍 데이터 플로우(streaming data flow) 아키텍처를 기반으로 한다.



Apache Kafka : 메시지 저장소

- 분산 메시징 시스템으로써 대용량의 실시간 로그처리에 특화된 아키텍처 설계를 통하여 기존 메시징 시스템보다 우수한 TPS를 보여주고 있다.

Kafka는 발행-구독(publish-subscribe) 모델을 기반으로 동작하며 크게 producer, consumer, broker로 구성된다.



Apache Zookeeper : 분산 코디네이터

- 분산처리 환경에서는 많은 서버가 필요한데 예상치 못하는 네트워크장애, 서비스/기능 장애, 서비스 업그레이드, 

서버 확장들의 장애 등에 문제가 발생할 경우 일괄적으로 관리해주는 시스템이다.



Elasticsearch : 검색엔진

- Lucene 기반으로 개발한 오픈소스 실시간 분산 검색 엔진(서버)으로 JSON 기반의 비정형 데이터 분산 검색과 분석을 지원합니다. 

설치와 서버확장이 매우 편리하다는 장점과 실시간 검색 서비스 지원, 분산 및 병렬 처리 그리고 멀티테넌시 기능을

제공하며, 다양한 기능을 플러그인 형태로 구현하여 적용할 수 있는 것이 큰 특징입니다.



Apache Kibana : 데이터 시각화

- Elasticsearch에 저장된 Data를 사용자에게 Dashboard 형태로 보여주는 솔루션이다.



Apache Storm: 실시간 분산 처리

- 실시간 데이타 분석 분산처리를 위한 시스템이다. Hadoop과 비슷하고, Hadoop에서는 Map-Reduce 작업을 실행하는 반면 Storm은 토폴로지 작업을 수행한다.

Map-Reduce 작업과 토폴로지의 차이는, Map-Reduce 작업은 정해진 데이터 세트를 처리한 후 완료되지만 토폴로지는 계속해서 메시지를 처리한다는 점이다.

반응형
블로그 이미지

민오라방구

개발 , 여행, 일상 아직 배울게 많은 개발자

,
반응형

[Oracle] 

SELECT empno, ename, job, sal, 

            ROW_NUMBER() OVER(PARTITION BY job ORDER BY sal) AS rnum 

FROM scott.emp;




[MySQL]

SELECT empno, ename, job, sal, rnum

FROM (

   SELECT a.*, 

           (CASE @vjob WHEN a.job THEN @rownum:=@rownum+1 ELSE @rownum:=1 END) rnum,

           (@vjob:=a.job) vjob

   FROM emp a, (SELECT @vjob:='', @rownum:=0 FROM DUAL) b

   ORDER BY a.job, a.sal                  

) c;

반응형
블로그 이미지

민오라방구

개발 , 여행, 일상 아직 배울게 많은 개발자

,