react lazy 로딩

React.js 2024. 5. 9. 09:19

lazy로딩은 별도로 사용할 수도 있으나 아래와 같이 라우터와 함께 사용될 때 더욱 효과적이다.

(예시 코드)

import React, { Suspense } from 'react';
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';

const Home = React.lazy(() => import('./Home'));
const About = React.lazy(() => import('./About'));

function App() {
  return (
    <Router>
      <Suspense fallback={<div>Loading...</div>}>
        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/about" element={<About />} />
        </Routes>
      </Suspense>
    </Router>
  );
}

export default App;

 

 

Posted by yongary
,

 

PostgreSQL의 psql은 PostgreSQL 데이터베이스와 상호작용하기 위한 커맨드 라인 툴입니다. psql 내에서는 \로 시작하는 다양한 명령어가 있으며, 이를 메타 명령이라고 부릅니다. 여기 몇 가지 유용한 예제를 소개합니다:

  1. \c [database_name]
    데이터베이스 연결을 변경합니다. 예를 들어, 다른 데이터베이스로 전환하고 싶을 때 사용합니다.
  2. \d [table_name]
    특정 테이블의 스키마를 보여줍니다. 테이블 이름을 생략하면 모든 테이블, 뷰, 인덱스 등의 목록을 보여줍니다.
     
     
  3. \dt
    데이터베이스 내의 모든 테이블을 보여줍니다.
  4. \l
    사용 가능한 모든 데이터베이스의 목록을 보여줍니다.
    \l
  5. \i [filename]
    지정된 파일에서 SQL 명령을 읽어서 실행합니다.
    \i setup.sql
  6. \s [filename]
    psql 세션에서 실행한 명령어의 기록을 파일로 저장하거나 보여줍니다.
    \s commands.log
  7. \e
    기본 텍스트 에디터에서 마지막으로 실행한 SQL 명령을 편집할 수 있습니다. 에디터는 환경변수 EDITOR로 설정됩니다.
  8. \x
    쿼리 결과를 확장된 형식으로 보여줍니다. 컬럼이 많은 경우에 유용합니다.
     
  9. \conninfo
    현재 데이터베이스 연결 정보를 보여줍니다.
     
     
  10. \q
    psql에서 나갑니다.
Posted by yongary
,



CREATE USER otheruser WITH PASSWORD 'password';


GRANT INSERT, UPDATE, DELETE ON othertable TO otheruser;

이렇게만 하면, 기존 사용자는 그대로 crud가 가능한 상태에서,
새로운 특정사용자에게 othertable 특정테이블만  권한을 주게된다. 


(확인)

SELECT grantee, privilege_type
FROM information_schema.table_privileges
WHERE table_name='mytable';

 

 

///실 사용예제.

$ psql -h dbURL -U postgres -d postgres
> \c testdb
> CREATE USER otheruser WITH PASSWORD 'test';
> GRANT INSERT, UPDATE, DELETE, SELECT ON monthlydata TO otheruser;

> \c testdb otheruser
> SELECT grantee, privilege_type
FROM information_schema.table_privileges
WHERE table_name='monthlydata'

Posted by yongary
,

. 특정 컬렉션에 대한 접근 제한 설정

MongoDB에서는 특정 컬렉션에 직접적으로 접근을 제한하는 내장 기능을 제공하지 않습니다. 하지만, 역할 기반의 접근 제어(Role-Based Access Control, RBAC)를 사용하여 사용자 정의 역할을 생성하고, 이 역할을 통해 특정 컬렉션에 대한 접근을 제어할 수 있습니다.

먼저, mydatabase 데이터베이스에서 사용자 정의 역할을 생성합니다.

 

use mydatabase
db.createRole({
  role: "collectionReadWrite",
  privileges: [
    { resource: { db: "mydatabase", collection: "mycollection" }, actions: ["find", "update", "insert", "remove"] }
  ],
  roles: []
})

 

그런 다음, 이 역할을 사용자에게 할당합니다

 

db.updateUser("myUser", {
  roles: [
    { role: "collectionReadWrite", db: "mydatabase" }
  ]
})

 

 

======== 사전에 mongoDB에 사용자가 설정되지 않았다면 다음스텝 필요==========

1. MongoDB 인증 활성화

먼저 MongoDB 서버에서 인증을 활성화해야 합니다. 이는 위에서 설명한

 

mongod.conf 파일을 편집하여 security.authorization 옵션을 enabled로 설정함으로써 이루어집니다. 서버 재시작 후 인증이 필요하게 됩니다.

 

security:
  authorization: enabled

 

2. 관리자 생성

$ mongo

> use admin
> db.createUser({
  user: "admin",
  pwd: "password",
  roles: [{ role: "userAdminAnyDatabase", db: "admin" }]
})

 

==> 모든 db에 비번에 필요할듯함. 

 

 

2.1 위에서 설명한 사용자 생성.

3. Spring Boot 애플리케이션 설정 변경

기존에 인증 없이 연결하던 Spring Boot 애플리케이션의 MongoDB 연결 설정을 업데이트하여 사용자 이름과 비밀번호를 포함하도록 해야 합니다. application.properties 또는 application.yml 파일에서 MongoDB 연결 URI를 다음과 같이 수정합니다:

 

# application.properties
spring.data.mongodb.uri=mongodb://username:password@host:port/database

Posted by yongary
,

동영상 녹화

Mac 2024. 4. 29. 17:39

 

1. QuickTime Player를 수행한다.  혹시 파일선택 팝업이 뜨면 취소를 누른다.

 

2. C-C-N 키를 누르면  우측에  "영역선택/전체화면" 을 선택해서 "기록"을 누르면 시작된다.
  (Command-control-N)

3. C-C-Esc 키를 누르면 녹화가 취소된다. 
(Command-control-ESC )

Posted by yongary
,

 

mongoDB의 CSFLE라고 불리는 필드암호화는 mongoDB 4.2이상에서 지원된다.

(단, mongoDB enterprise에서만 지원된다)

 

스텝별로 살펴보면 다음과 같다.

 

1. KMS 서비스를 통해 key 생성. (아래는 AWS KMS이용 예제이지만,  azure의 keyVault나 Google Cloud KMS도 가능)

 

AWS Management Console에 로그인하여 KMS 서비스로 이동합니다.
새로운 키 생성을 선택하고, 키 유형으로 "대칭"을 선택합니다.
키에 이름을 부여하고, 필요한 권한을 설정합니다.
IAM 정책 설정:

키 사용 권한을 가진 IAM 사용자 또는 역할을 생성합니다.
생성된 KMS 키에 대한 액세스 권한을 해당 IAM 사용자 또는 역할에 부여합니다.

 

2. MongoDB 설정에 ClientEncryptions  설정.

@Bean
public MongoClient mongoClient() {
    Map<String, Object> awsKmsProvider = Map.of(
        "accessKeyId", "<AWS_ACCESS_KEY_ID>",
        "secretAccessKey", "<AWS_SECRET_ACCESS_KEY>"
    );

    Map<String, Map<String, Object>> kmsProviders = Map.of("aws", awsKmsProvider);

    AutoEncryptionSettings autoEncryptionSettings = AutoEncryptionSettings.builder()
            .keyVaultNamespace("admin.dataKeys")
            .kmsProviders(kmsProviders)
            .build();

    MongoClientSettings settings = MongoClientSettings.builder()
            .applyConnectionString(new ConnectionString(uri))
            .autoEncryptionSettings(autoEncryptionSettings)
            .build();
    return MongoClients.create(settings);
}

@Bean
public MongoTemplate mongoTemplate() throws Exception {
    return new MongoTemplate(mongoClient(), dbName);
}

 

3. entity class의 필드에 @Encrypted 적용 

 

@Document
public class User {
    @Encrypted
    private String sensitiveData;
    
    private String generalData;
}
Posted by yongary
,

centos7 time 설정

Linux 2024. 4. 15. 17:20

AWS ec2 에서 최근에는 ntp보다 chrony를 많이 사용한다.

 

1. sudo vi /etc/chrony.conf 에서
    server 169.254.169.123 prefer iburst
를 넣는다. 1줄만 있어도 된다.

 

2. sudo systemctl restart chronyd

 

 

3. chronyc sources -v   

  -> 소스서버가 제대로 반영되었는지 확인 (check)

 

4. date 로 시간확인.

Posted by yongary
,

 

단, https에서만 동작한다.

 

async function copyImageToClipboard(imageUrl) {
    try {
        const response = await fetch(imageUrl);
        const blob = await response.blob();
        await navigator.clipboard.write([
            new ClipboardItem({
                [blob.type]: blob
            })
        ]);
        console.log('Image copied to clipboard');
    } catch (err) {
        console.error('Failed to copy image: ', err);
    }
}

// 이미지 URL과 버튼 클릭 이벤트 핸들러
document.getElementById('copyImageButton').addEventListener('click', function() {
    const imageUrl = 'path/to/your/image.png';
    copyImageToClipboard(imageUrl);
});
Posted by yongary
,

 

로드밸런서 설정시

HTTPS:443 설정에서 아래처럼 하면 웹서버로는 http가 전달되며, 이를 SSL Termination 이라고 부름.

  • 이 설정에서, 트래픽의 "Default actions"을 웹 서버로 트래픽을 HTTP로 전달하도록 구성합니다. 여기서 SSL 종료가 발생하며, ALB가 SSL/TLS 암호화를 해제하고, 결과적으로 내부 서버에는 암호화되지 않은 HTTP 트래픽으로 데이터를 전송합니다. 이는 내부 네트워크의 보안을 기반으로, 성능 최적화와 구성의 단순화를 도모할 수 있습니다.
  • 대상그룹으로 전달해도 동일한 효과가 발생할 것으로 예상됩니다.

 

참고 - NGINX로 전달한 블로그 : https://medium.com/@vdongbin/aws-elb%EC%99%80-nginx%EB%A1%9C-https-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0-736b8c5ee76  

 

Posted by yongary
,

CentOs7 에 폰트 설치

Linux 2024. 4. 12. 17:42

1.  폰트 위치는 /usr/share/fonts/arial 

이며, msttcore 폴더 밑에 ms 기본 폰트들이 있는지 확인가능.

 

 

2. 없을시 설치 방법.
  a.  $wget https://www.itzgeek.com/msttcore-fonts-2.0-3.noarch.rpm 
  b.  sudo rpm -Uvh msttcore-fonts-2.0-3.noarch.rpm

  c. 

sudo fc-cache -f -v

 

Posted by yongary
,