반응형
반응형

📝평문 저장

  • 비밀번호를 그대로 저장
  • 구현이 간단하지만 보안에 매우 취약하다

 

📝단순 해싱

  • 해시 함수를 이용해 해시값으로 변환하여 저장
  • 평문에 비해 보안이 향상되지만 무차별 대입 공격에 취약하며 동일한 비밀번호가 동일 해시값을 가짐으로 레인보우 테이블 공격에 취약하다

 

📝솔팅

  • 비밀번호에 무작위 값(Salt)을 추가한 후 해시 함수로 변환
  • 동일 비밀번호도 서로 다른 해시 값을 가져 레인보우 테이블 공격 방지 가능하지만 빠른 해시 함수는 무차별 대입 공격에 취약하다

 

📝키 스트레칭

  • 비밀번호에 무작위 값을 추가한 이후 해시 함수를 여러번 실행시킨다
  • 주로 CPU 사용량을 증가시켜 해시 계산 속도를 늦추는 데 중점을 둡니다
  • 최근 일반적 장비로는 1초에 50억개 이상의 해시값을 비교할 수 있지만 스트레칭을 적용하면 장비에서 1초에 5번정도만 비교가 가능하다. 즉, 무차별 대입 공격에 강하지만 나도 저장해야하기 때문에 서버에 부담이 된다.
    • PBKDF2 (Password-Based Key Derivation Function 2)
      • 비밀번호와 솔트를 결합한 후 여러 번 반복하여 해시 값을 생성합니다.
    • bcrypt
      • 키 스트레칭을 구현하며, 비교적 느리게 설계되어 공격자가 비밀번호를 추측하는 속도를 늦춥니다.

📝메모리 집약적 함수

  • 메모리 집약적 함수는 해시 계산 과정에서 많은 메모리 및 CPU를 사용하도록 설계되어, 하드웨어 가속 공격에 대한 저항력을 높입니다.
    • Argon2
      • 비밀번호 해시를 생성하는 최신 알고리즘으로, 메모리와 연산 시간을 조절할 수 있으며, 다양한 공격에 대해 강력한 보안을 제공합니다.
    • scrypt
      • bcrypt와 유사하지만, 메모리 사용량을 증가시켜 더욱 강력한 보안을 제공합니다.

 

반응형
반응형

📝OAuth 2.0이란

Authentication 사용자의 인증입니다
Authorization 사용자의 인가로 어떤 자원에 접근할 권한을 부여하는 것입니다
Access Token 리소스 서버에게서 리소스 소유자의 보호된 자원을 획득할 때 사용되는 만료 기간이 있는 Token입니다
Refresh Token Access Token 만료시 이를 갱신하기 위한 용도로 사용하는 Token입니다

 

📝OAuth 2.0의 4가지 역할

Resource Owner 사용자입니다.
Client 보호된 자원을 사용하려고 접근 요청을 하는 애플리케이션입니다.
예) 쇼핑몰 홈페이지
Resource Server 사용자의 보호된 자원을 호스팅하는 서버입니다.
예) 구글 사용자 정보 관리 서버
Authorization Server 권한 서버. 인증/인가를 수행하는 서버로 클라이언트의 접근 자격을 확인하고 Access Token을 발급하여 권한을 부여하는 역할을 수행합니다.
예) 사용자 서버

 

 

📝 OAuth 2.0 추가 및 보완된 기능

  • 1.0에 비해 구현이 쉬워졌습니다
  • 웹, 앱 데스크톱 등 다양한 환경에서 지원이 가능해집낟
  • 리프레시 토큰 개념이 추가 되었습니다
  • HTTPS를 통해 암호화를 강화시켰습니다

 

 

📝 OAuth 2.0 프로토콜

Authorization Code Grant

가장 많이 사용하고 기본이 되는 방식입니다. 로그인한 이후에 권한 부여 승인 코드를 전달 받습니다. 해당 코드는 일회용이며 해당 코드로 Access Token을 요청한 이후에 받아서 원하는 자원에 접근하게끔 사용합니다.

 

 

Implicit Grant 

권한 부여 승인 코드 없이 바로 Access Token을 발급합니다. 비교적 간소화 되기 때문에 빠른 응답이 있지만 Refresh Token이 사용 불가능하며(?) 안전하게 저장하기 힘든 클라이언트(JS 사용 브라우저)에 최적화된 방식입니다. → 서버가 없다는 거 자체가 이해가 안 된다.

 

Resource Owner Password Credentials Grant

username, password를 전달해 Access Token을 받습니다. 또한 Refresh Token이 사용이 가능합니다. 이 방식은 권한서버, 리소스 서버, 클라이언트가 모두 같은 시스템에 속해 있을 때 사용되어야하는 방식입니다. → Third Part를 사용 안 하고 내가 직접 인증서버를 관리할 때를 의미하는 거 같다

 

Client Credentials Grant

검증된 클라이언트 서버(예를 들면 쇼핑몰 웹서버)에서 자기는 안전하다고 판단한 경우에 사용됩니다. 이 경우에는 Resource Server는 사용자의 정보가 들어있는 곳보다는 모든 로그가 쌓여있고 필터링이 따로 필요 없는 서버를 접근하기 위한 것이고 이미 요청한 서버는 안전하다고 판단하기 때문에 Access Token을 요청하면 바로 해당 서버의 Acces Token을 바로 발급해주는 것입니다. Refresh Token은 사용할 수 없습니다.

 

📝 OIDC (Open ID Connect)

OAuth 2.0의 확장으로 Access Token으로 접근권한 뿐만 아니라 사용자 정보도 ID토큰으로 받아와 사용할 수 있습니다.

 

📝 개인적인 생각

위 프로토콜들이 이해가 안 되는게 많다 일단 로그인 처리가 되고 난 이후에 권한 부여 승인 코드를 따로 받는 것 그 이후에 그걸 가지고 Access Token을 굳이 또 요청해야하는 작업이 필요한 것일까? 로그인이 완료 되었으면 다 된 거 같은데 또한 Refresh Token을 못 쓴다는데 Refresh Token을 Access Token하고 같이 주면 되는 거 아닌가 싶다

 

 

🔗 참고 및 출처

https://blog.naver.com/mds_datasecurity/222182943542

반응형
반응형

📝Prettier 설치

https://www.npmjs.com/package/prettier

 

prettier

Prettier is an opinionated code formatter. Latest version: 3.3.3, last published: 12 days ago. Start using prettier in your project by running `npm i prettier`. There are 17948 other projects in the npm registry using prettier.

www.npmjs.com

 

📝eslint 설치

https://www.npmjs.com/package/eslint

 

eslint

An AST-based pattern checker for JavaScript.. Latest version: 9.7.0, last published: 12 days ago. Start using eslint in your project by running `npm i eslint`. There are 24284 other projects in the npm registry using eslint.

www.npmjs.com

 

📝파일저장시 Prettier 적용

File - Settings - Prettier에서 Automatic Prettier configuration, Run on Save 체크

 

📝Auto Import

 

 

반응형
반응형

📝Failover

"장애 극복 기능"이란 뜻으로 시스템 장애 시 준비되어있는 다른 시스템으로 대체되어 운영되는 것을 의미한다

 

📝CDC (Change Data Capture)

DB 변경 사항을 실시간으로 감지하고 이를 다른 시스템으로 전송하는 기술로 데이터 통합, 복제, 실시간 분석 및 이벤트 스트리밍 등에 사용됩니다.

 

📝ETL (Extract, Transform, Load)

데이터베이스, 파일 시스템, API 등 다양한 소스에서 데이터를 추출(Extract)하고, 이를 원하는 형태로 변환(Transform)한 다음, 데이터 웨어하우스, 데이터 레이크, 데이터베이스 등의 대상 시스템에 적재(Load)하는 프로세스입니다. Apache Spark, Google Cloud Dataflow 등이 있다.

 

📝Throughput

시스템이나 네트워크가 주어진 시간 동안 처리할 수 있는 데이터의 양을 나타내는 성능 지표입니다.

 

📝페이지 캐시 (Page Cache)

운영 체제(OS)가 디스크로부터 데이터를 읽어올 때 사용되는 메모리 내의 캐시입니다. 디스크 I/O 성능을 향상시키기 위해 사용되며, 자주 접근하는 데이터를 메모리에 캐시하여 디스크 접근을 최소화합니다

 

 

🔗 참고 및 출처

https://habitus92.tistory.com/16

반응형
반응형

📝고가용성 (高可用性, HA : High Availability)

서버와 네트워크 또는 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 장애 없이 정상 운영이 가능한 성질

 

📝온프레미스

소프트웨어나 하드웨어를 클라우드 서비스가 아닌 자체 데이터 센터나 서버에서 직접 운영하는 방식을 의미

 

📝거버넌스

기업의 IT 자산, 데이터, 프로세스를 관리하고 통제하는 체계를 의미합니다

 

📝데이터 파편화

데이터가 여러 위치에 분산되어 저장되어 있는 상태를 의미합니다. 이는 데이터 일관성, 관리, 검색의 어려움을 초래 할 수 있으며, 데이터를 통합하여 분석하는 데 어려움을 줄 수 있습니다.

 

📝Materialized View

물리화된 뷰는 데이터베이스에서 사용되는 개념으로, 쿼리 결과를 미리 계산하여 물리적으로 저장해 둔 테이블입니다. 이는 복잡한 쿼리 성능을 향상시키기 위해 사용되며, 주기적으로 또는 수동으로 갱신될 수 있습니다.

이름이 저런 거지 따로 저런 View가 존재하는 게 아니다 즉, 테이블인데 쿼리 결과를 미리 계산해서 물리적으로 저장해둔 테이블이라는 것이다

 

📝티어드 스토리지 (Tiered Storage)

티어드 스토리지는 데이터의 중요도나 사용 빈도에 따라 서로 다른 성능과 비용을 가진 스토리지 계층에 데이터를 배치하는 전략입니다. 자주 사용되는 데이터는 고속의 고비용 스토리지에 저장하고, 덜 사용되는 데이터는 저속의 저비용 스토리지에 저장합니다.

 

📝카프카 미러메이커

카프카 미러메이커는 Apache Kafka에서 제공하는 데이터 복제 도구입니다. 이는 하나의 Kafka 클러스터에서 다른 클러스터로 데이터를 실시간으로 복제하여 데이터의 가용성을 높이고, 여러 데이터 센터 간의 데이터 동기화를 가능하게 합니다.

 

📝멱등성

수학과 컴퓨터 과학에서 중요한 개념으로, 연산을 여러 번 적용해도 결과가 달라지지 않는 성질을 의미합니다

반응형
반응형

📝프로젝트 구조 (Package structure)

Spring Boot에서 정해둔 프로젝트 구조는 없지만 저는 DDD가 유지보수에 더 좋다고 생각하여 DDD 기반으로 만들었습니다

 

DAO 기반의 DDD

com
  └ lsj
      └  shopping_mall
 	  	  └ dashboard
		  |	  └  controller
		  |	  └  service
		  |	  └  dao
		  |	  └  dto
		  |	      └ request
		  |	      └ response
		  |	  └  util
		  |	  └  exception
		  |	  
		  |
		  └ global
		        └ config
		        └ user
		        └ exception
		        └ jwt
		        └ util (공통 API)

 

Repository 기반의 DDD (+ JPA)

com
  └ lsj
      └  shopping_mall
 	  	  └ dashboard
		  |	  └  controller
		  |	  └  service
		  |	  └  repository
		  |	  └  entity
		  |	  └  dto
		  |	      └ request
		  |	      └ response
		  |	  └  util
		  |	  └  exception
		  |	  
		  |
		  └ global
		        └ config
		        └ user
		        └ exception
		        └ jwt
		        └ util (공통 API)

 

📝DAO vs Repository

DAO

// User.java
public class User {
    private Long id;
    private String name;
    private String email;

    // Constructors, getters and setters
}

// UserDao.java
public interface UserDao {
    User findById(Long id);
    List<User> findAll();
    void save(User user);
    void update(User user);
    void delete(Long id);
}

// UserDaoImpl.java
public class UserDaoImpl implements UserDao {
    private DataSource dataSource;

    public User findById(Long id) {
        // SQL 쿼리를 사용하여 특정 사용자 검색
    }

    public List<User> findAll() {
        // 모든 사용자를 검색하는 SQL 쿼리
    }

    public void save(User user) {
        // 사용자 저장 SQL 쿼리
    }

    public void update(User user) {
        // 사용자 정보 업데이트 SQL 쿼리
    }

    public void delete(Long id) {
        // 사용자 삭제 SQL 쿼리
    }
}

DAO는 데이터베이스와의 상호 작용을 캡슐화하여 데이터베이스 접근 로직과 비즈니스 로직을 분리합니다 특히 CRUD연산에만 초점을 맞춥니다 (DAO의 경우 데이터 액세스를 추상화)

 

위 코드를 CRUD로 구분하면 아래와 같습니다

  • Create
    • save
  • Read
    • findById
    • findAll
  • Update
    • update
  • Delete
    • delete

 

Repository

// UserRepository.java
public interface UserRepository {
    User findById(Long id);
    List<User> findAllByStatus(String status);
    void save(User user);
    void delete(User user);
}

// UserRepositoryImpl.java
public class UserRepositoryImpl implements UserRepository {
    private EntityManager entityManager;  // JPA 사용 예시

    public User findById(Long id) {
        return entityManager.find(User.class, id);
    }

    public List<User> findAllByStatus(String status) {
        return entityManager.createQuery("SELECT u FROM User u WHERE u.status = :status", User.class)
                            .setParameter("status", status)
                            .getResultList();
    }

    public void save(User user) {
        entityManager.persist(user);
    }

    public void delete(User user) {
        entityManager.remove(user);
    }
}

DAO와 다르게 도메인 중심의 설계에서 사용되며 CRUD에서 확장되어 각 상황에 맞는 도메인 로직에 더 초점을 맞춥니다

 

반응형
반응형

📝H2DB

H2 데이터베이스는 자바 기반의 경량화된 관계형 데이터베이스 관리 시스템(RDBMS)입니다 그래서 자바가 설치가 되어있어야 실행이 가능합니다

매우 가볍기 때문에 테스트나 간단한 개발 정도에 사용하면 좋을 것 같습니다

 

 

📝설치

https://h2database.com/html/main.html

 

H2 Database Engine

H2 Database Engine Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open source, JDBC API Embedded and server modes; in-memory databases Browser based Console application Small footprint: around 2.5 MB jar file size     Supp

h2database.com

링크에 접속한다

 

 

Download에서 All Platforms 클릭하여 다운로드 후 압축 해제

 

📝 서버 실행

${설치경로}/bin/h2w.bat 실행

 

실행하면 웹 콘솔에 들어갈 수 있습니다 비밀번호는 1234입니다

반응형
반응형

📝IntelliJ 컴파일 속도 증진

  1. Preference → Preferences Build, Execution, Deployment Build Tools Gradle 이동
  2. Build and run using - Gradle → IntelliJ IDEA 변경
  3. Run tests using - Gradle → IntelliJ IDEA 변경

 

현재는 이렇게 설정하지만 추후에는 달라질 수도 있을 것 같습니다

 

 

📝HotReload, HotSwap

Gradel 추가

implementation 'org.springframework.boot:spring-boot-devtools:2.6.3'

 

버전의 경우는 최신 버전으로 맞춰주시면 됩니다

 

IntelliJ 설정

  • Preference → Build, Execution, Deployment → Compiler → Build Project automatically 체크 후 apply

 

  • Settings → Advanced Settings → Allow-auto-make to start even if developed application is current running 체크 후 Apply

 

📝Prettier

Prettier의 경우 회사 자체적으로 있지 않는 이상 대기업인 Google에서 사용하는 Java Code Style을 따라가도록 하자

 

  1. https://github.com/google/styleguide (구글 스타일 가이드 저장소)
  2. intellij-java-google-style.xml 다운로드
  3. IntelliJ → settings → Code Style → Java 
  4. Scheme → Import Scheme → IntelliJ IDEA code style XML 클릭 → 다운받은 intellij-java-google-style.xml 넣기

 

 

save시 자동으로 코드 변환

  • Reformat Code
    • save시 자동으로 코드 형태 변경
  • Optimize Imports
    • 사용되지 않는 import 자동삭제

 

  • Settings → Appearance & Behavior → System Settings → Save files if the IDE is idle for 15 seconds (매 15초 자동 저장)

 

🔗 참고 및 출처

https://yeon-kr.tistory.com/197

반응형
반응형

IntelliJ및 WebStorm을 최신 버전으로 업데이틀 진행해주면 된다

 

🔗공식 답변 참고

https://intellij-support.jetbrains.com/hc/en-us/community/posts/19507482696082-Invalid-authentication-data-error

 

 

 

 

반응형