빌더 패턴 (Builder Pattern)
·
Computer Science/Design Pattern
빌더 패턴복잡한 객체를 생성할 때 생성자의 파라미터가 많아지면 가독성, 유지보수성, 확장성이 떨어지게 됩니다.new User("koonyang", 28, "developer", true, LocalDate.now()); 매개변수가 많아질수록 어떤 값이 어떤 필드를 의미하는지 어려움선택적인 필드를 처리할 때마다 생성자를 만들어야 함객체의 불변성을 유지하기 어려움빌더 패턴은 이러한 문제를 해결하도록 도와줍니다.User.builder() .name("koonyang") .age(28) .career("developer") .notifiaction(true) .createdAt(LocalDate.now()); GoF 빌더와 Fluent 빌더빌더 패턴은 사실 사용 방식에 따라 GoF 빌..
추상 팩토리 패턴 (Abstract Factory Pattern)
·
Computer Science/Design Pattern
추상 팩토리 패턴추상 팩토리 패턴은 팩토리 메서드 패턴보다 상위 수준의 생성 패턴입니다.서로 관련된 객체들의 집합을 생성하기 위한 인터페이스를 정의하고, 구체적인 팩토리 구현 클래스가 실제 제품군을 생성하는 방식입니다. public interface Button { void render();}public class WindowsButton implements Button { public void render() { System.out.println("윈도우 버튼"); }}public class MacButton implements Button { public void render() { System.out.println("맥 버튼"); }}public ..
Spring의 팩토리 메서드 패턴 (Factory Method Pattern)
·
Computer Science/Design Pattern
팩토리 메서드 패턴팩토리 메서드 패턴은 객체 생성을 서브 클래스에게 위임하는 디자인 패턴을 말합니다.어떤 객체를 생성할지 슈퍼 클래스가 결정하지 않고, 하위 클래스가 결정하도록 위임합니다.이를 통해 객체 생성에 대한 책임과 객체 사용의 비즈니스 로직 처리 로직을 분리할 수 있습니다. public interface Button { void render();}public class WindowsButton implements Button { public void render() { System.out.println("윈도우 버튼 렌더링"); }}public class MacButton implements Button { public void render() { ..
[Error Log] Mac(Apple Silicon)에서 Lambda용 Docker 이미지 빌드시 겪은 문제와 해결 과정
·
Error Log
주기적으로 웹사이트에서 데이터를 크롤링해야 하는 요구사항이 있었습니다.처음에는 EC2 인스턴스에서 cron을 활용해 주기적으로 크롤링 스크립트를 실행하는 방식을 고려했습니다.하지만 크롤링 주기가 하루 1회로 매우 적었기 때문에, 대부분의 시간 동안 EC2 인스턴스가 유휴 상태로 유지되는 비효율적인 상황이 발생했습니다.이에 따라 EventBridge를 이용해 필요한 시점에만 실행되고, 실행이 끝나면 자동으로 종료되는 AWS Lambda 기반의 아키텍처로 전환하는 것이 더 적합하다고 판단했습니다. Issue 상황main.pyimport osimport jsonimport platformfrom selenium import webdriverfrom selenium.webdriver.common.by impor..
NAT (Network Address Translation)로 외부망과 통신하기
·
Computer Science/Network
NAT (Network Address Translation)NAT는 내부 네트워크에서 사용하는 사설 IP 주소를 외부 네트워크에서 인식 가능한 공인 IP 주소로 변환해주는 기술입니다. 이를 통해 사설망에 존재하는 여러 대의 기기가 하나 또는 소수의 공인 IP 주소를 공유하여 인터넷에 접속할 수 있게 됩니다. NAT는 공인 IP 주소가 부족한 문제를 해결하기 위해 사용됩니다. IP 주소 변환NAPT 방식은 IP 패킷의 소스 및 목적지 IP 주소와 TCP/UDP 포트 번호를 변경하여 네트워크 트래픽을 전달사설 IP와 공인 IP내부 네트워크는 사설 IP를 사용하고, 외부 인터넷과 통신할 때 공인 IP를 사용주소 부족 문제 해결부족한 공인 IP 주소 문제를 해결하기 위해, NAT를 통해 여러 내부 장치가 하나의..
XSS (Cross-Site Scripting)
·
Computer Science
XSS (Cross-Site Scripting)란?XSS는 공격자가 웹 사이트에 악성 스크립트를 삽입해, 페이지를 보는 다른 사용자의 브라우저에서 해당 스크립트를 시행시키는 공격을 의미합니다. 사용자가 브라우저에서 Javascript 코드가 실행되도록 유도하여 쿠키 탈취, 세션 하이재킹, 피싱 페이지 유도 등 여러 방법으로 악용될 수 있습니다. XSS의 원리사용자 입력을 서버가 검증 없이 출력사용자가 웹 사이트에 검색어나 댓글, 게시물 제목 등 어떠한 값을 입력입력 값에 악성 스크립트가 포함되어 있을 수 있음ex. 서버는 이 값을 검증하거나 인코딩하지 않고 그대로 HTML로 렌더링할 수 있음악성 스크립트가 HTML 구조에 포함됨HTML이 브라우저로 전달될 때 script 태그는 실행 가능한 코드로 인식됨..
CSRF (Cross-Site Request Forgery)
·
Computer Science
CSRF (Cross-Site Request Forgery, 사이트 간 요청 위조)CSRF는 사용자의 인증된 상태를 이용해, 사용자의 의지와 무관하게 요청을 서버로 보내는 공격을 의미합니다.로그인 상태인 사용자가 악성 웹 사이트에 방문했을 때 발생하며, 서버 입장에서는 사용자가 의도한 요청인지 알 수 없습니다. CSRF 공격 시나리오사용자가 로그인 상태이며, 서버가 세션 기반 로그인을 한 상황 사용자는 https://bank.com에 로그인 (session 쿠키 생성)사용자가 악성 사이트 https://evil.com에 방문evil.com에서 자동으로 요청을 전송evil.com은 img나 script, iframe을 포함할 수 있고, 브라우저는 쿠키를 포함하여 자동으로 GET 요청을 전송서버 입장에서는 ..
DNS (Domain Name System)
·
Computer Science/Network
DNS (Domain Name System)란?우리가 웹사이트를 방문할 때 보통 www.google.com처럼 기억하기 쉬운 도메인 이름을 입력합니다. 하지만 컴퓨터는 이런 문자를 이해하지 못하고, 오직 숫자로 이루어진 IP 주소를 통해 통신합니다. 예를 들어, 172.217.161.228은 구글 서버의 IP 주소 중 하나입니다. 그렇다면 왜 IP 주소 대신 도메인 이름을 사용할까요? 도메인 이름 vs. IP 주소www.google.com (도메인 이름) : 사람이 기억하기 쉽고 이름만으로 어떤 사이트인지 유추 가능172.217.161.228 (IP 주소) : 사람이 기억하기 어렵고 어떤 사이트인지 직관적으로 알 수 없음 DNS는 사실 DNS 서버들의 계층 구조로 구현된 분산 데이터베이스입니다. 호스트는..