분류 전체보기
-
객체지향 프로그래밍을 향해 진정한 객체지향 패러다임으로의 전환은 Class 가 아닌, Object에 초점을 맞출 때 에만 얻을 수 있다. 어떤 클래스가 필요한지가 아니라, 어떤 객체가 필요한지 고민해야 한다. 클래스는 공통적인 객체들의 상태와 행동을 추상화한 것이다. 따라서 Class를 추상화시키려면 어떤 객체가 필요한지 알아야 한다. 객체는 독립적인 존재가 아니다, 기능 구현을 위해 협력하는 공동체의 일원으로 봐야 한다. 객체를 고립된 존재로 바라보지 말고, 협력에 참여하는 협력자로 바라봐야 한다. 다른 객체에게 도움을 주거나, 의존하면서 살아가는 협력적인 존재이다. 도메인 구조를 따르는 프로그램 구조 도메인(domain)이란 문제를 해결하기 위해 사용자가 프로그램을 사용하는 분야 객체지향 패러다임이 ..
[Object] 2장 : 객체지향 프로그래밍객체지향 프로그래밍을 향해 진정한 객체지향 패러다임으로의 전환은 Class 가 아닌, Object에 초점을 맞출 때 에만 얻을 수 있다. 어떤 클래스가 필요한지가 아니라, 어떤 객체가 필요한지 고민해야 한다. 클래스는 공통적인 객체들의 상태와 행동을 추상화한 것이다. 따라서 Class를 추상화시키려면 어떤 객체가 필요한지 알아야 한다. 객체는 독립적인 존재가 아니다, 기능 구현을 위해 협력하는 공동체의 일원으로 봐야 한다. 객체를 고립된 존재로 바라보지 말고, 협력에 참여하는 협력자로 바라봐야 한다. 다른 객체에게 도움을 주거나, 의존하면서 살아가는 협력적인 존재이다. 도메인 구조를 따르는 프로그램 구조 도메인(domain)이란 문제를 해결하기 위해 사용자가 프로그램을 사용하는 분야 객체지향 패러다임이 ..
2024.05.26 -
티켓 판매 애플리케이션 구현 소프트웨어 모듈이 가져야 하는 세 가지 기능(로버트 마틴) 실행 중에 제대로 동작하는 것 변경을 위해 존재하는 것 코드를 읽는 사람과 의사소통하는 것 무엇이 문제인가 예상을 빗나가는 코드 이해 가능한 코드는 우리의 예상에서 크게 벗어나지 않는 코드 하나의 클래스에서 너무 많은 세부적인 내용들을 다루면 생기는 문제 이해하기 어렵다 변경에 취약하다 변경에 취약한 코드 의존성(dependency)이 높은 코드 어떤 객체가 변경될 때, 그 객체에 의존하는 객체도 변경될 수 있음 결합도(coupling)가 높은 코드 결합도가 높다: 의존성이 강하다 결합도가 낮다: 합리적인 수준으로 의존한다 객체지향 설계의 목표: 객체 사이의 결합도를 낮춰 변경이 용이한 설계는 만드는 것 설계 개선하기..
[Object] 1장 : 객체, 설계티켓 판매 애플리케이션 구현 소프트웨어 모듈이 가져야 하는 세 가지 기능(로버트 마틴) 실행 중에 제대로 동작하는 것 변경을 위해 존재하는 것 코드를 읽는 사람과 의사소통하는 것 무엇이 문제인가 예상을 빗나가는 코드 이해 가능한 코드는 우리의 예상에서 크게 벗어나지 않는 코드 하나의 클래스에서 너무 많은 세부적인 내용들을 다루면 생기는 문제 이해하기 어렵다 변경에 취약하다 변경에 취약한 코드 의존성(dependency)이 높은 코드 어떤 객체가 변경될 때, 그 객체에 의존하는 객체도 변경될 수 있음 결합도(coupling)가 높은 코드 결합도가 높다: 의존성이 강하다 결합도가 낮다: 합리적인 수준으로 의존한다 객체지향 설계의 목표: 객체 사이의 결합도를 낮춰 변경이 용이한 설계는 만드는 것 설계 개선하기..
2024.05.22 -
패러다임의 시대 패러다임이라는 말은 ‘모델’, ‘패턴’, 또는 ‘전형적인 예’를 의미하는 그리스어인 ‘파라데이그마’에서 유래했다. 과거에는 표준적인 모델을 따르거나 모방하는 상황을 가리키는 매우 제한적인 상황에서만 패러다임이라는 단어를 사용했다 하지만 현대인들은 패러다임이라는 단어를 전혀 다른 의미로 사용한다. 우리가 사용하는 패러다임은 한 시대의 사회 전체가 공유하는 이론이나 방법, 문제의식 등의 체계를 의미한다. 패러다임의 개념이 과거와 다른 의미로 바뀐 과정 토마스 쿤의 “과학혁명의 구조” 라는 이름의 책은 과학사에 대한 기존 관점을 뿌리째 흔들었다. 쿤의 책이 출간되기 전까지 과학사에 대한 보편적인 시각은 과학의 발전은 이미 달성된 과학적 성취를 기반으로 새로운 발견을 누적시키거나 오류를 수정하면..
[Object] 들어가며 : 프로그래밍 패러다임패러다임의 시대 패러다임이라는 말은 ‘모델’, ‘패턴’, 또는 ‘전형적인 예’를 의미하는 그리스어인 ‘파라데이그마’에서 유래했다. 과거에는 표준적인 모델을 따르거나 모방하는 상황을 가리키는 매우 제한적인 상황에서만 패러다임이라는 단어를 사용했다 하지만 현대인들은 패러다임이라는 단어를 전혀 다른 의미로 사용한다. 우리가 사용하는 패러다임은 한 시대의 사회 전체가 공유하는 이론이나 방법, 문제의식 등의 체계를 의미한다. 패러다임의 개념이 과거와 다른 의미로 바뀐 과정 토마스 쿤의 “과학혁명의 구조” 라는 이름의 책은 과학사에 대한 기존 관점을 뿌리째 흔들었다. 쿤의 책이 출간되기 전까지 과학사에 대한 보편적인 시각은 과학의 발전은 이미 달성된 과학적 성취를 기반으로 새로운 발견을 누적시키거나 오류를 수정하면..
2024.05.18 -
Asynchronous(비동기) 요청을 하고 순차적으로 결과를 기다리지 않고 다음 할 일을 진행 추후에 작업 결과를 확인하고 싶은 경우 Future 등을 이용하여 확인 가능하다. @Async 스프링에서 비동기 처리를 지원하는 애노테이션 사용 방법 @EnableAsync @SpringBootApplication public class MySpringApplication { ... } public class AsyncService { @Async public void method(){ ... } } Thread Pool 위와 같이 사용하면 @Async가 붙은 메서드는 별도의 스레드에서 동작한다. 다만, 기본적으로 비동기 처리를 할 때 ( org.springframework.core.task.SimpleAs..
[Spring] @Async 비동기처리Asynchronous(비동기) 요청을 하고 순차적으로 결과를 기다리지 않고 다음 할 일을 진행 추후에 작업 결과를 확인하고 싶은 경우 Future 등을 이용하여 확인 가능하다. @Async 스프링에서 비동기 처리를 지원하는 애노테이션 사용 방법 @EnableAsync @SpringBootApplication public class MySpringApplication { ... } public class AsyncService { @Async public void method(){ ... } } Thread Pool 위와 같이 사용하면 @Async가 붙은 메서드는 별도의 스레드에서 동작한다. 다만, 기본적으로 비동기 처리를 할 때 ( org.springframework.core.task.SimpleAs..
2024.05.13 -
api-gateway와 같이 많은 요청이 들어오는 서버에 keep-alive와 같은 설정이 없는 경우에는 tcp connection이 부족할 수 도 있을 거라는 생각이 들었다. 이러한 상황을 방지하기 위해서 할 수 있는 서버 설정으로 어떤 것이 있는지 알아보자. net.ipv4.ip_local_port_range $ cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000 $ sysctl net.ipv4.ip_local_port_range net.ipv4.ip_local_port_range = 32768 61000 로컬 포트 바인딩 할 수 있는 범위 로컬 포트가 부족하다면 해당 범위를 늘릴 수 있다. net.ipv4.tcp_tw_reuse $ sysctl -w i..
[Server] ip_local_port_range , tcp_tw_recycle, tcp_tw_reuseapi-gateway와 같이 많은 요청이 들어오는 서버에 keep-alive와 같은 설정이 없는 경우에는 tcp connection이 부족할 수 도 있을 거라는 생각이 들었다. 이러한 상황을 방지하기 위해서 할 수 있는 서버 설정으로 어떤 것이 있는지 알아보자. net.ipv4.ip_local_port_range $ cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000 $ sysctl net.ipv4.ip_local_port_range net.ipv4.ip_local_port_range = 32768 61000 로컬 포트 바인딩 할 수 있는 범위 로컬 포트가 부족하다면 해당 범위를 늘릴 수 있다. net.ipv4.tcp_tw_reuse $ sysctl -w i..
2024.05.08 -
netstat이란 network statistics의 약자 네트워크 접속, 라우팅 테이블, 네트워크 인터페이스의 통계 정보를 보여주는 도구 netstat 옵션 -a : 현재 다른 PC와 연결(Established)되어 있거나 대기(Listening) 중인 상태 -l (listen) : 연결 가능한 상태 -t (tcp) : tcp -u (udp) : udp -p : 프로그램 이름 / PID -n (number port) : 포트 넘버 netstat field 정보 $ netstat -antplF Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN - - Pro..
[Server] netstat 명령어 - 네트워크 통계 정보netstat이란 network statistics의 약자 네트워크 접속, 라우팅 테이블, 네트워크 인터페이스의 통계 정보를 보여주는 도구 netstat 옵션 -a : 현재 다른 PC와 연결(Established)되어 있거나 대기(Listening) 중인 상태 -l (listen) : 연결 가능한 상태 -t (tcp) : tcp -u (udp) : udp -p : 프로그램 이름 / PID -n (number port) : 포트 넘버 netstat field 정보 $ netstat -antplF Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN - - Pro..
2024.05.04 -
keepalive란 서버와 클라이언트가 맺은 연결을 유지하는 방식을 의미 HTTP 트랜잭션이 완료된 후에도 클라이언트와 서버 간의 TCP 연결을 열어둔다. 클라이언트가 다른 HTTP 트랜잭션을 수행해야 하는 경우 새 TCP 연결을 만드는 대신 유휴 Keepalive 연결을 사용한다. 장점 3-way handshacking overhead 줄임 단점 메모리 사용 증가 - connection을 열고 대기 server - keepalive 설정 https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout 하위에 해당하는 server 블록에 keepalive-timeout 설정 기본값 75s 해당 값에 0을 설정하면 keepalive 기능..
[Nginx] nginx keepalive 설정(client-nginx-tomcat)keepalive란 서버와 클라이언트가 맺은 연결을 유지하는 방식을 의미 HTTP 트랜잭션이 완료된 후에도 클라이언트와 서버 간의 TCP 연결을 열어둔다. 클라이언트가 다른 HTTP 트랜잭션을 수행해야 하는 경우 새 TCP 연결을 만드는 대신 유휴 Keepalive 연결을 사용한다. 장점 3-way handshacking overhead 줄임 단점 메모리 사용 증가 - connection을 열고 대기 server - keepalive 설정 https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout 하위에 해당하는 server 블록에 keepalive-timeout 설정 기본값 75s 해당 값에 0을 설정하면 keepalive 기능..
2024.04.30 -
redis를 cache로 사용하는 방법을 알아보자.캐시란원본 데이터보다 더 빠르고 효율적으로 액세스 할 수 있는 임시 데이터 저장소캐시 도입으로 성능을 개선할 수 있는 조건데이터를 찾기 위해 검색하는 시간이 오래 걸리거나, 매번 계산을 통해 데이터를 가져와야 한다캐시가 원본 데이터에 요청하는 것보다 빨라야 한다캐시에 저장된 데이터가 잘 변하지 않는 데이터다캐시에 저장된 데이터가 자주 검색되는 데이터다 캐시로서의 레디스키/값 형태의 구성으로 간단하다인메모리 데이터 저장소로 빠르다자체적으로 고가용성 기능을 가지고 있는 솔루션이다장애 시에도 안정적 운영이 가능스케일 아웃을 손쉽게 할 수 있다캐싱 전략레디스를 어떻게 배치할 것인지에 따라 서비스 성능에 큰 영향을 끼친다캐싱되는 데이터의 유형데이터에 대한 액세스 ..
[Redis] Redis - Cacheredis를 cache로 사용하는 방법을 알아보자.캐시란원본 데이터보다 더 빠르고 효율적으로 액세스 할 수 있는 임시 데이터 저장소캐시 도입으로 성능을 개선할 수 있는 조건데이터를 찾기 위해 검색하는 시간이 오래 걸리거나, 매번 계산을 통해 데이터를 가져와야 한다캐시가 원본 데이터에 요청하는 것보다 빨라야 한다캐시에 저장된 데이터가 잘 변하지 않는 데이터다캐시에 저장된 데이터가 자주 검색되는 데이터다 캐시로서의 레디스키/값 형태의 구성으로 간단하다인메모리 데이터 저장소로 빠르다자체적으로 고가용성 기능을 가지고 있는 솔루션이다장애 시에도 안정적 운영이 가능스케일 아웃을 손쉽게 할 수 있다캐싱 전략레디스를 어떻게 배치할 것인지에 따라 서비스 성능에 큰 영향을 끼친다캐싱되는 데이터의 유형데이터에 대한 액세스 ..
2024.04.26