[Back end / 보안] 데이터 암호화의 이해: 대칭키, 비대칭키부터 SHA-256 해시까지
·
Back end
비밀번호 보안은 현대 웹 개발에서 가장 중요한 주제 중 하나입니다많은 개발자들이 "어떻게 비밀번호를 암호화할까?"라는 질문부터 시작하지만, 정답은 "암호화가 아니라 해싱"입니다. 오늘은 암호화의 세 가지 기법을 이해하고, 왜 비밀번호에는 해싱을 사용하는지,그리고 비밀번호 분실 시 올바른 처리 로직이 무엇인지 알아보겠습니다.1. 암호화 알고리즘의 분류암호화 기술은 목적과 방식에 따라 크게 대칭키(Symmetric), 비대칭키(Asymmetric), 그리고 해시(Hash) 세 가지로 나뉩니다.🔑 대칭키 암호화 (Symmetric Key Encryption)암호화할 때와 복호화할 때 동일한 키를 사용하는 방식입니다.장점속도가 매우 빠릅니다.처리 효율이 좋아 대용량 데이터 암호화에 적합합니다.단점키를 상대방에..
[Java] JVM Garbage Collection 구조와 Promotion(승격) 조건
·
Back end/Java
1. JVM Garbage Collection(GC)이란?Garbage Collection(GC)은 자바의 메모리 관리 기법 중 하나로, 힙(Heap) 영역에서 더 이상 참조되지 않는 객체들을 찾아 메모리에서 해제하는 과정을 의미합니다. C나 C++ 과 달리 개발자가 직접 메모리를 해제할 필요가 없으며, JVM이 자동으로 관리해줍니다.GC의 장점메모리 누수 방지: 프로그래머의 실수로 인한 메모리 누수를 자동으로 방지개발 생산성 향상: 메모리 관리에 신경 쓰지 않고 비즈니스 로직에만 집중안정성 보장: 메모리 부족으로 인한 프로그램 정지 위험을 감소GC의 단점GC 중단시간(Stop-The-World): GC 실행 중 모든 애플리케이션 스레드가 중단성능 저하: GC로 인한 CPU 사용률 증가예측 불가능성: G..
[Kafka] 카프카(kafka)란? (feat. 메세지 큐)
·
Back end/Kafka
✅ 카프카(kafka)란?Apache Kafka는 수천 개의 회사에서 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션에 사용되는 오픈 소스 분산 이벤트 스트리밍 플랫폼입니다.- Apache Kafka 공식 홈페이지 -즉, Kafka는 대규모 데이터를 처리할 수 있는 메시지 큐이다.✅ 메시지 큐(Message Queue)란?메시지 큐(Message Queue)는 큐(Queue) 형태에 데이터를 일시적으로 저장하는 임시 저장소를 의미한다.메시지 큐를 활용하면 비동기적으로 데이터를 처리할 수 있어서 효율적이다.✅ REST API 방식으로 통신 vs 메시지 큐를 활용한 통신‘REST API 방식으로 통신하는 방식’과 ‘메시지 큐를 활용한 통신 방식’를 이메일 발송 시나리오를..
[Java] JDBC의 Statement와 PreparedStatement
·
Back end/Java
데이터베이스와 통신하는 Java 애플리케이션을 개발할 때, JDBC를 통해 SQL을 실행하게 됩니다. 이때 Statement와 PreparedStatement 중 어떤 것을 사용하느냐에 따라 애플리케이션의 성능과 보안이 크게 달라집니다.Statement: 유연하지만 위험한 방식Statement는 가장 기본적인 SQL 실행 방식입니다. 쿼리를 작성할 때 문자열 연결(String concatenation)을 통해 동적으로 SQL을 구성합니다.String userId = "user123";String sql = "SELECT * FROM users WHERE id = '" + userId + "'";Statement stmt = connection.createStatement();ResultSet rs = s..
AtomicInteger는 어떻게 동시성을 보장할까? - CAS 알고리즘 깊이 파헤치기
·
Back end/Java
들어가며이런 질문을 받았습니다."일반 int에 synchronized를 걸지 않고 100개 스레드가 각각 +1을 하면 결과가 100이 안 나올 수 있습니다. 하지만 AtomicInteger.addAndGet()을 사용하면 락 없이도 정확히 100이 보장됩니다. 어떻게 이게 가능한가요?당시에는 제대로 답변하지 못했지만, 이후 학습을 통해 그 원리를 정리해보았습니다.문제 상황: Race Condition먼저 문제를 명확히 해봅시다.// 문제가 되는 코드private int counter = 0;// 100개의 스레드가 동시에 실행public void increment() { counter++; // 이 한 줄이 사실은 3개의 작업!}counter++는 원자적(atomic) 연산이 아닙니다. 실제로는:R..
[SpringBoot] SQL 쿼리 파라미터 로그 남기는 방법
·
Back end/Spring Project
JPA를 사용하다 보면 실제로 실행된 SQL과 바인딩된 파라미터 값을 확인해야 할 때가 많습니다.하지만 기본 설정만으로는 ? 만 출력되어, 실제 값은 확인하기 어렵습니다. 이번 글에서는 쿼리 파라미터를 로그로 남기는 두 가지 방법을 알아보겠습니다. 1️⃣ Hibernate 로그 레벨 설정으로 파라미터 확인application.yml 설정 Spring Boot 버전에 따라 아래와 같이 로그 옵션을 추가합니다. logging.level: org.hibernate.SQL: debug# org.hibernate.type: trace #스프링 부트 2.x, hibernate5 org.hibernate.orm.jdbc.bind: trace #스프링 부트 3.x, hibernate6적용 결과 다음과 같이 쿼리의..
[Back end] 네트워크 타임아웃(Timeout)
·
Back end
1. 네트워크 타임아웃이란?네트워크 타임아웃은 서버에 요청을 보냈지만 일정 시간 동안 응답을 받지 못하면 발생하는 에러입니다.타임아웃이 없다면 요청은 무한정 대기 상태에 빠져 서버 자원을 고갈시키고, 장애로 이어질 수 있습니다.즉, 타임아웃은 리소스를 보호하고 시스템 안정성을 유지하기 위한 안전장치입니다.2. 타임아웃의 종류✅ Connection Timeout정의: 클라이언트가 서버에 연결을 시도할 때, TCP 3-way handshake가 일정 시간 내에 완료되지 않으면 발생발생 지점: TCP 연결 수립 과정원인 예시: 방화벽 차단, 서버 다운, 잘못된 포트, 네트워크 단절실무 사례: 결제 API 연동 시, 클라이언트 방화벽에서 대상 서버의 IP/포트를 허용하지 않아 연결 실패할 경우 발생💡 (cc...
[Spring] JPA - 프록시(Proxy)
·
Back end/Spring Project
1. em.find() vs em.getReference()엔티티를 조회할 때 JPA는 두 가지 방식을 제공합니다.em.find() ➡️ 즉시 로딩 데이터베이스를 통해 실제 엔티티 객체를 바로 조회합니다.즉시 쿼리가 실행됩니다.em.getReference() ➡️ 지연 로딩을 위한 가짜 객체(프록시) 반환 데이터베이스 조회를 미루는 프록시 객체를 반환합니다.필요할 때까지 쿼리가 실행되지 않고 대기합니다.2. 프록시란?프록시 객체는 JPA가 내부적으로 만들어 주는 가짜 객체입니다.하지만 실제 엔티티 클래스를 상속받아서 만들어지기 때문에 겉으로 보기에는 동일합니다.3. 프록시의 동작 원리프록시 객체는 내부적으로 실제 엔티티를 참조(target)로 보관합니다.프록시 객체를 호출하면 → 실제 엔티티의 메소드를 ..