Weekly Paper 11

Weekly Paper #15

1. Race Condition (경쟁 상태)Race Condition이란?두 개 이상의 스레드가 공유 자원에 동시에 접근할 때, 실행 순서에 따라 결과가 달라지는 문제입니다.재고: 1개스레드 A: 재고 조회 → 1개 확인 → (아직 차감 전)스레드 B: 재고 조회 → 1개 확인 → (아직 차감 전)스레드 A: 재고 차감 → 0개스레드 B: 재고 차감 → -1개 ← 문제 발생!해결 전략 1 - synchronized (Java 내장)JVM 레벨에서 하나의 스레드만 해당 블록에 진입하도록 잠금을 겁니다.public class StockService { private int stock = 1; public synchronized void decreaseStock() { if (sto..

Weekly Paper 2026.06.09

Weekly Paper #14

1. 4가지 주요 보안 공격과 대응 전략① CSRF (Cross-Site Request Forgery)공격 원리피해자가 로그인된 상태에서 악성 사이트가 피해자 브라우저를 이용해 의도하지 않은 요청을 자동으로 전송하는 공격입니다.1. 피해자 → 은행 사이트 로그인 (세션 쿠키 발급)2. 피해자 → 악성 사이트 방문3. 악성 사이트 → 피해자 브라우저로 은행 이체 요청 자동 전송 (브라우저가 세션 쿠키를 자동으로 포함시킴)4. 은행 서버 → 정상 요청으로 인식 → 이체 실행대응 전략CSRF Token 방식: 서버가 예측 불가능한 토큰을 발급하고, 요청 시 이 토큰이 포함되어 있는지 검증합니다.// Spring Security 기본 CSRF 보호 활성화@Configurationpublic class Sec..

Weekly Paper 2026.06.09

Weekly Paper #13

1. 세션 기반 인증 vs 토큰 기반 인증세션 기반 인증 (Session-based Authentication)로그인 시 서버가 세션을 생성하고, 클라이언트는 세션 ID만 쿠키로 보관하는 방식입니다.1. 클라이언트 → 로그인 요청2. 서버 → 세션 생성 (서버 메모리/DB에 저장)3. 서버 → 세션 ID를 쿠키로 응답4. 클라이언트 → 이후 요청마다 쿠키(세션 ID) 포함5. 서버 → 세션 ID로 서버에 저장된 세션 조회 → 인증 확인장점서버에서 세션을 직접 관리하므로 즉시 무효화(로그아웃) 가능클라이언트에 민감한 정보가 남지 않음단점서버가 여러 대면 세션 공유 문제 발생 (Redis 같은 세션 스토리지 필요)서버 메모리 사용량 증가모바일 앱, 타 도메인 API 호출에 쿠키 사용이 불편보안 고려사항HTT..

Weekly Paper 2026.06.09

Weekly Paper #12

1. AWS RDS를 사용하는 이유 RDS란?AWS RDS(Relational Database Service)는 AWS가 관리형으로 제공하는 데이터베이스 서비스다. MySQL, PostgreSQL, MariaDB, Oracle, SQL Server 등을 지원하며, DB 운영에 필요한 인프라를 AWS가 대신 처리해준다. EC2 직접 설치 vs RDS 비교 항목 EC2에 직접 설치 RDS로 관리운영체제 패치직접 관리AWS 자동 처리DB 엔진 업그레이드직접 수행콘솔에서 클릭 한 번백업직접 스크립트 작성자동 백업 + 스냅샷HA(..

Weekly Paper 2026.05.11

Weekly Paper #10

1. 계층별 입력값 검증 전략핵심 개념애플리케이션은 일반적으로 세 계층으로 나뉜다.Client → Presentation Layer (Controller) → Service Layer → Domain/DB Layer각 계층이 다른 이유로, 다른 관심사를 검증한다는 점이 핵심이다.이를 혼동하면 중복 검증이 생기거나, 반대로 특정 계층에서 검증이 누락되는 문제가 생긴다.계층별 책임 분리Presentation Layer (Controller/DTO)관심사: "이 데이터가 우리 시스템에 들어올 수 있는 형태인가?" (형식적 유효성)검증 대상:null / 빈 값이메일, 날짜 등 형식(Format) 오류기본적인 범위 위반 (수량 최솟값 등)public class CreateOrderRequest { @NotB..

Weekly Paper 2026.04.01

Weekly Paper #9

1. JPA N+1 문제✔️ N+1 문제란?연관된 엔티티를 조회할 때 1번의 쿼리 + N번의 추가 쿼리가 발생하는 문제이다.List members = memberRepository.findAll();for (Member member : members) { System.out.println(member.getTeam.getName());}👉 실제 쿼리 흐름SELECT * FROM member;--- N번 (각 member의 team 조회)SELECT * FROM team WHERE id =?:-> 데이터의 개수가 많아질수록 성능 급격히 저하됨!🔥 JPA N+1 문제 발생 원인1. 지연 로딩 (Lazy Loading)의 동작 방식연관된 객체를 즉시 조회하지 않고, 실제 해당 객체에 접근(사용)하는 ..

Weekly Paper 2026.03.23

Weekly Paper #7

1. 웹 API의 발전과정에서 SOAP에서 REST로 전환이 일어난 이유와 그 장단점1️⃣ 배경 : 환경의 급격한 변화사용자 급증: 서비스 규모가 커지며 서버의 확장성이 문제가 됨모바일 시대: PC보다 사양이 낮은 스마트폰이 주 기기가 되었음.Agile한 개발 문화: 복잡한 표준 규격보다는 빠르게 개발하고 배포하는 유연함이 중요해짐.2️⃣ SOAP의 한계점무거운 데이터 : XML 기반, 태그가 데이터보다 훨씬 커지는 경우에 낭비가 심해 속도가 느려짐서버 자원 소모: 프로토콜 자체가 무겁고, 세션이나 상태 정보를 유지하려는 경향이 강함. 이로 인해 서버가 감당할 수 있는 사용자 수가 적고, 서버를 늘릴 때 관리가 매우 복잡하다.높은 진입 장벽과 경직성: 반드시 명세서를 작성해야 하고, 이를 해석할 전용 라..

Weekly Paper 2026.02.27

Weekly Paper #6

1. Spring에서 AOP가 필요한 이유와 이를 활용한 실제 애플리케이션 개발 사례AOP는 비즈니스 로직과 공통 로직을 분리하기 위해 필요하다. 왜 필요한가?만약 모든 메서드가 실행 시간을 측정해야 한다면, AOP가 없을 경우 모든 메서드의 시작과 끝에 시간 측정 코드를 직접 넣어야 한다. 이는 코드 중복을 야기하고, 정작 중요한 비즈니스 로직을 파악하기 어렵게 만든다. AOP는 시간 측정이라는 관점을 따로 떼어내어 관리함으로서 비즈니스 로직을 순수하게 유지해준다. 실제 애플리케이션 개발 사례로깅(Logging): 어떤 메서드가 호출되었고 어떤 파라미터가 들어왔는지 모든 서비스 레이어에 일괄 적용할 때 사용한다트랙잭션 관리(@Transactional): DB 작업 중 에러 발생 시 롤백하는 로직을 직..

Weekly Paper 2026.02.09

Weekly Paper#5

1. 웹 서버와 WAS의 기본 개념웹 서버 : 클라이언트로부터 HTTP 요청을 받아 정적인 콘텐츠를 제공하는 서버처리 대상 : HTML, CSS, 이미지 등역할 : HTTP 요청 수신, 정적 파일 응답예시 : Nginx, Apache HTTP Server특징 : 비즈니스 로직 처리 X, DB 접근 X, 빠르고 가벼움---------------------------------------------------------------------------------WAS : 동적 요청을 처리하는 애플리케이션 실행 환경처리 대상 : 사용자 요청에 따라 로직 실행 결과를 생성역할 : 비즈니스 로직 수행, DB 연동, 트랜잭션, 보안, 세션 관리예시 : Tomcat, Jetty, JBoss, WebLogic특징 : ..

Weekly Paper 2026.02.02

Weekly Paper#3

1. HashSet 내부 동작과 중복 제거 메커니즘 Java에서 HashSet은 내부적으로 HashMap 을 사용한다. HashMap의 실제 저장 구조는 배열과 같다. 배열(table) ├── 0번 버킷 (내부에는 LinkedList가 들어감.) ├── 1번 버킷 ├── 2번 버킷 -> Node -> Node -> Node (LinkedList) ├── ... └── n번 버킷이 배열을 해시 테이블(Hash Table)이라고 부르고, 각 칸을 버킷(bucket)이라고 한다. HashSet에 값 하나를 넣을 때 실제로 일어나는 일set.add("apple");// 1. hashCode() 실행 ex) apple.hashCode() = 93029210int hash = "apple".hashCode();//..

Weekly Paper 2026.01.19