반응형

Dev 25

Nginx

Nginx란 ? 경량 웹서버 클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용되기도 하고, Reverse Proxy Server로 활용하여 WAS 서버의 부하를 줄일 수 있는 로드 밸런서로 활용되기도 함 Nginx 흐름 Nginx는 Event-Driven구조로 동작하기 때문에 한개 또는 고정된 프로세스만 생성하여 사용하고, 비동기 방식으로 요청들을 동시에 처리할 수 있음 Nginx는 새로운 요청이 들어오더라도 새로운 프로세스와 스레드를 생성하지 않기 때문에 프로세스와 스레드생성비용이 존재하지 않고, 적은 자원으로도 효율적인 운용이 가능 이러한 장점 덕분에 단일 서버에서도 동시에 많은 연결을 처리할 수 있음 Event-Driven? apache의 C1..

Dev/Web 2023.07.26

Web Server & WAS

Web Server 웹 서버란 HTTP 프로토콜을 기반으로 클라이언트가 웹 브라우저에서 어떠한 요청을 하면 그 요청을 받아 정적 컨텐츠를 제공하는 서버 정적 컨텐츠? 단순 HTML 문서, CSS, 이미지, 파일 등 즉시 응답 가능한 컨텐츠 이때 웹 서버가 정적 컨텐츠가 아닌 동적 컨텐츠를 요청받으면 WAS에게 해당 요청을 넘겨주고, WAS에서 처리한 결과를 클라이언트에게 전달하는 역할도 해줌 ex ) Apache, Nginx 등 WAS (Web Application Server) WAS란 DB 조회 혹은 다양한 로직 처리를 요구하는 동적 컨텐츠를 제공하기 위해 만들어진 Application 서버 HTTP 프로토콜을 기반으로 사용자 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어로서, 주로 데이터베이스 ..

Dev/Web 2023.07.26

Functional Programming In Java (ft. Lambda , StreamAPI)

지난 글에서는 함수형 프로그래밍 기본 개념을 정리하였고 이번 포스팅에서는 자바에서 함수형 프로그래밍을 어떻게 사용하고 있는지에 대해 알아보려고 합니다. Java8 버전부터 함수형 프로그래밍을 지원하기 위해 람다와 스트림이 도입되었습니다. 람다와 스트림을 사용하면 함수형 프로그래밍 스타일로 자바 코드를 작성할 수 있습니다. 물론 람다와 스트림을 사용하여 작성한 코드를 일반 스타일의 자바코드로 바꾸어 작성하는 것이 불가능하진 않습니다. 달리 말하면 람다와 스트림 없이도 자바 코드를 작성하는데 어려움이 없다는 뜻입니다. 하지만 그럼에도 불구하고 람다와 스트림을 사용하는 이유는 작성하는 코드의 양이 줄어들고 읽기 쉬운 코드를 만드는데 유리하기 때문입니다. 예전에 Stream 관련된 포스팅을 했었기 때문에 람다에..

Dev/Java 2023.06.18

함수형 프로그래밍(Functional Programming)

1. 함수형 프로그래밍에 대한 이해 프로그래밍 패러다임 (Programming Paradigm) 프로그래밍 패러다임은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 어떻게 작성할 지 결정하는 역할을 한다. 새로운 프로그래밍 패러다임을 통해서는 새로운 방식으로 생각하는 법을 배우게 되고, 이를 바탕으로 코드를 작성하게 된다 명령형 프로그래밍 : 무엇(what)을 할 것인지를 나타내기보단 어떻게(How) 할 건지를 설명하는 방식 절차지향 프로그래밍 : 수행되어야 할 순차적인 처리 과정을 포함하는 방식 (C, C++) 객체지향 프로그래밍 : 객체들의 집합으로 프로그램의 상호작용을 표현 (c++ , java, c#) 선언형 프로그래밍 : 어떻게 할건지 (How)를 나타내기보다 무엇(What)을 할 건지를 ..

Dev/개잘알 2023.06.02

[DB] 인덱스(Index)

들어가며 회사에서 약 12만건의 테스트 데이터를 삽입 후 테스트를 하다가 검색 속도 저하 이슈가 발견됐습니다. 검색 속도를 향상 시킬 방법을 생각하다가 잊고 지냈던 index가 떠올랐어요 하지만 회사 프로젝트에 적용 시키기엔 인덱스에 대한 개념을 정확하게 알고 있지 못한 상태라고 판단이 됐고 정확한 개념 파악 후 프로젝트에 적용시키기 위해 정리하게 됐습니다! 인덱스 적용 후 데이터 검색 속도가 눈에 띄게 향상 됐습니다. 정확한 수치를 기록해뒀으면 좋았을텐데 현재는 퇴사를 해서 확인 할 방법이 없네요,,^^ 1. 인덱스(Index) 란 ? 인덱스란 ? 인덱스는 데이터베이스의 테이블에 대한 검색 속도를 향상시켜주는 자료구조입니다. 테이블의 특정 컬럼에 인덱스를 생성하면, 해당 컬럼의 데이터를 정렬한 후 별도..

Dev/DB 2023.04.20

지연로딩(Lazy Loading)

지연 로딩 (Lazy Loading) ? JPA(Java Persistence API)에서 모든 데이터를 한번에 가져오는 것이아니라 필요한 데이터만 필요한 시점에 가져오는 기술 네트워크를 통한 데이터 전송 양을 줄여 애플리케이션의 성능을 향상시키기 위해 사용됨 @Entity public class Customer { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToMany(mappedBy = "customer", fetch = FetchType.LAZY) private List orders } @Entity public class Order { @Id @GeneratedVal..

Dev/JPA 2023.04.09

[JPA] Open In View

들어가기 전 ??? : 아름씨 서버가 응답을 안해주고 있는데요? 나 : 왜요...? 로그를 확인해보니 DB 커넥션 누수가 발생했고 집을 나간 커넥션들은 돌아올 생각을 안하고 있었습니다. 누수 포인트를 확인 해보니 SSE를 연결하는 API에서 사용자 정보를 DB에서 조회를 하기 위해 DB 커넥션을 사용한 뒤 SSE가 종료되기 전까지 커넥션을 유지하고 있어서 발생한 이슈였습니다. 왜 이런 이슈가 발생했을까요? Open In View Open-In-View는 관례상 OSIV(Open-Session-In-View)라고 하고, 경우에 따라 Open-EntityManager-In-View 라고도 합니다. JPA에서 제공하는 기능 중 하나로 application.yml 설정 파일에서 Open-In-View를 true..

Dev/JPA 2023.03.11

Java Streams (2) - 가공하기 ⚒

Java Streams(1)- 스트림 생성하기👀👀 에서 언급했듯이 스트림에 대한 내용은 크게 세 가지로 나눌 수 있습니다. 생성하기 : 스트림 인스턴스 생성 가공하기 : 필터링 및 매핑등 원하는 결과를 만들어가는 중간 작업 (intermediate operations) 결과 만들기 : 최종적으로 결과를 만들어내는 작업 (termianl operations) 이번 포스팅에서는 가공하기 에 대한 내용을 정리하겠습니다. 가공하기 전체 요소 중에서 다음과 같은 API를 이용해서 내가 원하는 것만 뽑아낼 수 있습니다. 이러한 가공 단계를 중간 작업(intermediate operations) 이라고 하는데, 이러한 작업은 스트림을 리턴하기 때문에 여러 작업을 이어 붙여서(chaining) 작성할 수 있습니다. L..

Dev/Java 2022.12.29

Java Streams (1) - 스트림 생성하기 👀

Streams 자바 8에서 추가한 스트림은 람다를 활용할 수 있는 기술 중 하나입니다. 자바 8 이전에는 배열 또는 컬렉션 인스턴스를 다루는 방법은 for문 혹은 foreach문을 돌면서 요소 하나씩을 꺼내서 다루는 방법이었습니다. 간단한 경우라면 상관없지만 로직이 복잡해질수록 코드의 양이 많아져 여러 로직이 섞이게 되고, 메소드를 나눌 경우 루프를 여러 번 도는 경우가발생합니다. 스트림은 '데이터의 흐름'입니다. 배열 또는 컬렉션 인스턴스 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있습니다. 또한 람다를 이용해서 코드의 양을 줄이고 간결하게 표현할 수 있습니다. 즉, 배열과 컬렉션을 함수형으로 처리할 수 있습니다. 또 하나의 장점은 간단하게 병렬처리(multi-thread..

Dev/Java 2022.12.27

[Java] JVM 메모리 구조

JVM (Java Virtual Machine) 이란? JVM은 Java Virtural Machine의 약자로, 자바 가상 머신이라고 부릅니다. JAVA와 운영체제 사이에서 중계자 역할을 합니다. -> JAVA가 운영체제 종류에 영향받지 않고 돌아 갈 수 있는 이유 메모리 관리를 자동으로 해줍니다(GC : Garbage Collection) 여기서 핵심은 JVM이 운영체제와 플랫폼 종류에 의존적이지 않고 독립적으로 JAVA 프로그램이 실행 된다는 것(WORA) 입니다. WORA : Write Once, Run Anywhere -> 한 번 작성한 코드는 어디서든 실행 할 수 있는 자바의 대표적인 장점 JVM 메모리 구조 자바 소스 파일은 자바 컴파일러에 의해서 바이트 코드 형태인 클래스 파일이 됩니다. ..

Dev/Java 2022.12.05
반응형