목록전체 글 (57)
To Dare Is To Do!
1. AOP란?AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)는 공통적으로 사용되는 횡단 관심사(Cross-Cutting Concern)를 핵심 비즈니스 로직과 분리하여 모듈화할 수 있도록 해주는 프로그래밍 패러다임이다.핵심 관심사: 서비스 로직, 예: 회원가입, 주문 생성횡단 관심사: 공통 기능, 예: 로깅, 보안, 트랜잭션, 성능 측정 등2. AOP를 사용하는 이유OOP만으로도 관심사를 분리할 수 있지만 다음과 같은 한계가 존재한다:중복 코드 증가: 예를 들어 트랜잭션을 적용하려면 UserServiceTx, OrderServiceTx 등 중복 클래스를 생성해야 함결합도 증가: 트랜잭션 기능을 적용하려면 구현 객체를 감싸는 방식으로 계층을 형성해야 하므로 클래스 간 의..

JPA에서 ID 생성 전략에 대해 설명해주세요.JPA에서 ID를 생성하기 위해서는 직접 할당과 자동 할당을 사용할 수 있다.직접 할당 : @Id어노테이션만을 사용하여 Id값을 직접 할당하는 방식 자동 할당 : @Id와 @GeneratedValue를 함께 사용해서 원하는 키 생성 전략을 선택하는 방식 @GeneratedValue의 stretagy 옵션을 통해 생성 전략을 설정 가능AUTO : 데이터베이스 방언에 따라서 IDENTITY, SEQUENCE, TABLE 중 하나를 자동으로 선택 IDENTITY : 기본 키 생성을 DB에 위임하는 전략 SEQUENCE : 시퀀스* 키 생성 전략을 지원하는 DB에서 사용 가능auto_increment와 달리 초기 값과 한번에 증가할 크기를 설정 가능데이터베이스..
운영체제는 무엇이고 어떤 역할을 수행하는가?운영체제는 컴퓨터 하드웨어 바로 윗단에 설치되어서 하드웨어와 다른 모든 소프트웨어를 연결해주는 소프트웨어입니다.운영체제는 CPU, 메모리, 보조기억장치 등의 컴퓨터 시스템 자원을 효율적으로 관리 및 할당하고,실행되는 프로세스 및 스레드의 실행 순서를 제어하거나 이들에게 시스템 자원을 적절하게 배분합니다. 시분할 시스템이란?여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할해서 번갈아가며 여러 작업을 수행하는 시스템을 말합니다. 사용자의 입장에서 이를 통해 여러 프로그램들이 동시에 실행되는 것 처럼 느끼게 할 수 있습니다. 다중 프로그래밍 시스템 (multi-programming system)에 대해서 설명해주세요.멀티 프로그래밍 시스템은 메모리 ..
String literal과 new String(””)의 차이를 설명해 주세요.String literal은 String Constant Pool에 저장되어, 동일한 literal은 재사용됩니다. new String(””)은 매번 새로운 String 인스턴스를 할당하므로 같은 문자열이어도 서로 다른 객체가 됩니다. String, StringBuilder, StringBuffer의 차이점에 대해서 설명해주세요.String은 불변 객체지만, StringBuilder와 StringBuffer는 가변 객체입니다. 또한, 멀티 스레드 환경에서 StringBuilder은 Thread-Safe하지 않지만 StringBuffer는 메서드들이 synchronized로 동기화되어 있어서 Thread-Safe하다는 차이가 있..
Java의 특징에 대해서 설명해주세요!Java는 제가 생각하는 자바의 주요 특징에는 플랫폼에 대한 독립성, 객체 지향성, 자동 메모리 관리가 있습니다.또한 자바는 객체 지향 언어로 상속, 다형성, 캡슐화, 추상화 같은 객체 지향 개념을 기반으로 동작합니다. 이러한 특성 덕분에 자바는 코드의 재사용성과 유지보수성을 높일 수 있습니다.뿐만 아니라 자바는 가비지 컬렉션 기능을 제공하여 개발자가 직접 메모리 관리를 하지 않아도 자동으로 메모리 관리를 하여 메모리 누수나 해제와 같은 문제를 줄일 수 있습니다.자바 코드는 JVM이라는 가상 머신에서 실행되기 때문에 운영체제와 상관 없이 한 번 작성한 코드를 다양한 운영체제에서 실행할 수 있습니다.Java의 단점은 무엇이 있을까요?java는 상대적으로 실행속도가 느리..
지난 번 offset 기반의 페이지네이션에서 cursor기반의 페이지네이션으로 개선함으로써 데이터 중복을 방지하고 뒷 페이지로 넘어갈수록 발생하는 성능 저하를 방지하였지만 아직 피드 기능에 대해서 개선되어야할 필요성을 느끼게 되었다. 현재 JPA를 사용하고 있는 상황에서 해당 기능의 API를 호출하면 user에 대한 select문이 내가 조회한 게시물 수만큼 발생하는 현상이 나타나고 있다. 찾아보니 N+1 문제를 의심해보게 되었다. N+1 문제란?연관 관계가 설정된 엔티티를 조회할 때 조회된 데이터 갯수(n)만큼 연관 관계의 조회쿼리가 추가로 발생하여 데이터를 읽어오는 현상이다. 해당 API에서는 팔로우한 회원의 게시글을 조회하는 과정에서 게시글과 연관 관계에 있는 작성자 user에 대한 조회를 수행하는..
IP주소란?IP 주소란 인터넷에 연결된 장치의 고유한 식별자로, 데이터를 전송할 때 출발지와 목적지를 구분하는 데 사용된다. - IP 주소는 크게 두 가지 버전이 있다.IPv4는 32비트 주소 체계를 사용해 약 43억 개의 고유 주소를 제공하며, 점으로 구분된 네 개의 옥텟으로 표현된다. ex) 192.168.0.1처럼 나타낸다.IPv6는 128비트 주소 체계를 사용하며, 사실상 무한한 주소 공간을 제공한다. IPv6는 콜론으로 구분된 16진수 그룹으로 표현된다.ex) 2001:0db8:85a3:0000:0000:8a2e:0370:7334 같은 형식- IP 주소는 네트워크 주소와 호스트 주소로 구성된다.네트워크 주소는 IP 주소의 앞부분으로, 장치가 속한 네트워크를 식별하는 역할을 한다.호스트 주소는 네..

현재 내가 구현한 피드 기능을 한번 개선 했음에도 불구하고 여전히 몇몇 문제가 존재한다는 것을 확인했다. offset 기반의 페이지네이션현재 내가 구현한 API를 호출했을 때 JPA에서 제공하는 기본 인터페이스를 활용한 페이지네이션을 사용하기 때문에 offset 기반의 방식으로 페이징을 수행한다.offset 기반 페이지네이션은 offset, limit을 사용한 쿼리를 통해 데이터베이스에게 질의하면 페이지 단위로 구분된다.이러한 offset 기반의 페이지네이션은 구현이 간편하다는 장점때문에 매력적으로 다가올 수 있지만 sns 서비스, 특히 무한 스크롤을 통해 게시글을 조회하는 곳에서는 다음과 같은 이유로 인하여 지양되는 분위기이다. 1. 데이터를 중복하여 조회할 가능성이 크다.2. 많은 데이터를 다룰 경우..

⭐️ TCP란?애플리케이션 사이에서 안전하게 데이터를 통신하는 규약이다.=> 인터넷에서 데이터를 신뢰성 있게 전송하는 것을 목적으로 작동하는 전송 제어 프로토콜이다. TCP는 연결 지향적 프로토콜로 송신자와 수신자 간의 연결을 설정하고 데이터가 전송된 후에는 연결을 종료한다.TCP를 통해서 - 데이터의 순서를 보장 : 송신된 데이터가 수신 측에서 원래의 순서대로 재조립- 손실된 데이터에 대한 재전송- 흐름에 대한 제어 : 송신 측이 수신 측의 처리 능력을 초과하지 않도록 데이터 전송 속도 제어- 혼잡 제어 : 네트워크 혼잡을 방지하기 위해 데이터 전송 속도 제어등의 이점을 얻을 수 있다. ⭐️ 3 way handshake이란?신뢰적인 데이터 전송을 보장하기 위해 3개의 패킷(세그먼트)를 주고 받으며 사전..
전송 후 대기 프로토콜이란?- 자동 재전송 요구(Automatic Repeat reQuest, ARQ)라고도 불린다.송신자는 한 번에 하나의 데이터 패킷만 전송하고 그 패킷에 대한 확인 응답(ACK)을 받을 때까지 기다린다. 수신자로부터 확인 응답이 도착하면 송신자는 다음 패킷을 전송하게 된다.만약 일정 시간 내에 확인 응답을 받지 못하면 해당 패킷을 다시 전송하는 과정을 가진다. 과정송신자1) 세그먼트 송신 후 복제본을 버퍼에 유지한다.2) 재전송 타이머를 시작한다.3) 타이머 종료 전에 ACK(확인 응답) 수신 시, 복제본을 폐기하고 타이머를 종료한다.4) 타이머 종료 전까지 ACK를 수신하지 못한다면 세그먼트 재전송 후 타이머를 재시작한다. 수신자정상 세그먼트 수신 시 ACK를 회신하며 이외에는 다..
자바의 모든 클래스는 Object 클래스를 상속받습니다. 그리고 Object클래스에는 equals() 와 hashCode() 라는 메소드가 선언되어 있습니다. 이 메소드들은 각각 어떤 역할일까요? 이 둘의 차이점은 무엇일까요?더보기 자바에서 equals() 메소드는 두 객체가 "논리적으로" 동일한지를 판단하는 데 사용됩니다. 기본적으로 Object 클래스의 equals() 메서드는 두 객체의 참조를 비교하여, 두 객체가 같은 메모리 주소를 가리키는지를 확인합니다 그러나 대부분의 경우, 객체의 필드 값이 같은지를 기준으로 객체를 비교하는 것이 더 유용하기 때문에 equals() 메서드를 오버라이드하여 사용합니다. 반면 hashCode() 메소드는 객체의 해시 코드를 반환한다. 이 때 해시 코드는 정수형 값..

UDP란?- User Datagram Protocol- 전송 계층에서 동작- 보안과 신뢰성보다 전송 속도와 효율성이 강조되는 상황에서 데이터를 전송하기 위해 사용되는 프로토콜 특징 빠른 전송 속도:낮은 오버헤드- 연결 설정 과정이 없음UDP는 연결을 설정하고 관리하기 위한 오버헤드가 없다. 즉, 핸드셰이크 과정이 없고, 연결을 유지하거나 종료하는 데 필요한 추가적인 트래픽이 발생하지 않는다. - 간단한 헤더UDP 헤더는 필수 정보만 포함하여 오버헤드가 매우 적다. 이는 출발지 포트, 목적지 포트, 길이, 체크섬 필드로 구성된다.- 흐름 제어 및 오류 제어 없음TCP와 달리, UDP는 흐름 제어나 혼잡 제어, 데이터 재전송 같은 기능이 없다. 이러한 기능들은 오버헤드를 증가시키는 주요 요소인데, UDP는 ..

팔로우 기능을 추가됨으로써 로그인한 회원이 팔로우한 회원의 글을 모아보는 피드 또한 제공하게 되었다.이러한 기능을 구현하고 최적화하는 과정에서 경험한 것들을 기록하여 다시 한번 정리해보려고 한다.1. 단순 기능 구현일단 성능에 대한 고려 없이 기능에 대한 구현만 진행해 보았다.// PostController @GetMapping("/followed") public Response> getPostsFromFollowedUsers(Authentication authentication) { List posts = postService.getPostsFromFollowedUsers(authentication.getName()); return Response.success(po..

프록시(Proxy) 서버란?proxy의 사전적 의미는 대리, 위임 등이 있다.이를 네트워크 환경에서 사용할 때는 클라이언트가 다른 네트워크에 접속할 수 있도록 중간에서 대리해주는 서버로 이해할 수 있다.클라이언트와 서버의 중개자 역할을 함으로써 클라이언트와 서버 사이에서 요청과 응답을 처리하는 것이다. 그렇다면 왜 프록시를 사용할까? 프록시 서버를 사용하는 몇 가지 이유가 있다. 보안 및 익명성중간에 프록시 서버를 경유하게 된다면 사용자의 실제 IP 주소를 숨기는 것이 가능하여 개인정보 유출 위험을 줄이고 익명성을 보장받을 수 있다. 캐싱원래는 클라이언트에서 중복되는 요청을 보내도 서버는 이에 대해 연산을 수행하여 응답해줘야 한다.이렇게 동일한 요청을 처리하는 것은 리소스를 낭비하고 서버의 부하로 이어질..

SOP와 CORS에 대해서!XSS와 CSRF 같은 공격을 통해 애플리케이션에서 사용자의 정보를 탈취하는 것을 막기 위한 정책이다.SOP란?SOP(Same Origin Policy)은 동일 출처 정책은 한 출처(Origin)의 문서 및 스크립트가 다른 출처의 리소스와 상호작용하는 방법을 제한하는 브라우저 보안 기능이다. 즉, 동일한 출처에서만 리소스를 공유할 수 있게 제한하는 정책이다. 그럼 출처는 무엇을 의미하는 것일까? Origin : 출처- 네트워크 트래픽이나 요청이 어디에서 발생했는지를 나타내는 개념- 특정 네트워크 리소스나 요청의 시작점에 해당- 일반적으로 도메인 이름(호스트), 프로토콜, 그리고 포트 번호를 조합하여 특정 출처를 정의 동일 출처 정책에서 동일 출처에 대한 의미는 URL에서 위의..

쿠키와 세션- 웹 개발에서 사용자의 상태를 관리하는 기술 쿠키란?- 사용자의 웹 브라우저에 저장되는 작은 데이터 파일- 웹사이트가 사용자의 상태나 정보를 유지하기 위해 사용된다.- 쿠키는 클라이언트 측에서 저장되며, 웹 브라우저가 해당 웹 서버의 쿠키가 있다면 사용자가 해당 웹사이트를 방문할 때마다 HTTP 요청에 담아서 자동으로 전송한다.- 쿠키는 주로 세션 관리(로그인 상태 유지), 사용자 맞춤 설정(언어 선택, 테마), 웹사이트 분석(사용자 활동 추적) 등에 사용된다. 특징- Key-Value 쌍으로 구성된다- 쿠키이름, 쿠키값, 만료시간, 전송할 도메인명, 전송할 경로, 보안연결여부, HttpOnly 여부 등의 정보가 저장됨- 기본적으로 쿠키는 웹 브라우저가 종료되면 삭제된다.(만료 시간이 지정되..

📌 애플리케이션 레이어HTTP 관련!⭐️ HTTP 프로토콜이란?HTTP(HyperText Transfer Protocol)는- 클라이언트와 서버 간에 데이터를 주고받기 위한 텍스트 기반의 애플리케이션 계층 프로토콜이다.- HTTP는 주로 TCP/IP 위에서 동작하며, 신뢰성 있는 데이터 전송을 보장한다.- 클라이언트는 서버에게 요청(Request)을 보내고 서버는 이에 대한 응답(Response)을 반환하는 형태로 통신이 이뤄진다. - 원래는 텍스트 기반의 하이퍼텍스트 문서 전송을 위해 설계되었으나 현재는 이미지, 영상, JSON과 같은 다양한 형태의 데이터를 전송하는 데에도 사용되고 있다.- HTTP는 지속적으로 발전해왔으며, 최신 버전인 HTTP/3는 QUIC 프로토콜을 기반으로 하여 더 빠르고 효..

현대 웹 애플리케이션은 높은 트래픽을 효율적으로 처리하기 위해 여러 대의 서버를 운영하는 경우가 많다. 이러한 환경에서는 트래픽을 여러 서버에 분산시키는 로드 밸런서(load balancer)의 필요성이 강조되어 많이 사용하지만 세션(Session)을 사용하는 인증 시스템에서 트래픽 분배는 몇 가지 문제를 발생시킬 수 있다. 세션 기반 인증이 가질 수 있는 문제점세션 기반 인증은 사용자가 서버에 로그인하면 서버에서 세션을 생성하고 이를 통해 사용자의 상태를 관리한다. 세션 데이터는 보통 서버의 메모리에 저장되며 각 요청에 대해 세션 ID를 확인하여 사용자를 식별한다. 만약 단일 서버 환경라면? 서버가 한 대만 존재할 때는 사용자의 모든 요청이 동일한 서버로 전송되기 때문에 세션을 통해 문제 없이 인증 상..
컴퓨터 네트워크란?- 두 대 이상의 컴퓨터가 서로 데이터를 주고받을 수 있도록 유선 혹은 무선으로 연결된 시스템을 의미한다.- 컴퓨터 네트워크는 컴퓨터, 서버, 라우터, 스위치 등 다양한 장치들이 연결되어 있으며, 정보를 공유하고 자원을 효율적으로 사용하기 위해 구축된다.- 네트워크는 다양한 기능을 제공함으로써 기기들이 연결되도록 돕는다.애플리케이션 목적에 맞는 통신 방법 제공신뢰할 수 있는 데이터 전송 방법 제공네트워크 간의 최적의 통신 경로 결정목적지로 데이터 전송노드 사이의 데이터 전송- 네트워크는 규모와 범위에 따라 LAN(Local Area Network)과 WAN(Wide Area Network)으로 구분된다. LAN과 WAN이란? LAN (Local Area Network): - LAN은 하..

로드밸런싱이란?간단히 설명하면 많은 트래픽이 발생할 때 서버가 부담하는 부하를 분산해주는 장치 혹은 기술입니다.로드밸런싱의 중요성오늘날의 웹 서비스는 다양한 이유로 인하여 단일 서버만으로 운영되기 어려운 경우가 많습니다. 사용자 수의 증가, 데이터 크기의 확장, 그리고 빠른 응답 속도에 대한 요구가 증가 등이 그 이유이며 이러한 이유들로부터사용자 경험을 보장하기 위해서 오늘날 분산 시스템(다중 서버) 구축은 필수로 자리 잡게 되었습니다.이렇게 서버가 분산된 환경에서 로드밸런싱은 트래픽을 여러 서버로 나누어 시스템의 안정성과 성능을 보장하는 핵심 기술로서 활약하고 있습니다. Nginx의 역할과 강점 Nginx는 단순한 웹 서버 역할을 넘어, 로드밸런싱, 리버스 프록시, 정적 콘텐츠 제공 등 다양한 기능을 ..