본문 바로가기

전체 글

(142)
[Java/OOP] SOLID 원칙 1. SRP 단일 책임의 원칙 - Single responsibility principle 한 클래스는 하나의 책임만 가져야 한다. 변경을 기준으로 한다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이다. 2. OCP 개방-폐쇄 원칙 - Open/closed principle 소프트웨어 요소는 확장에는 열려 있으나, 수정에는 닫혀있다. 다형성을 활용해보자 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현한다. 문제점 구현 객체를 변경하려면 클라이언트 코드를 변경해야한다. 분명 다형성을 사용했지만 OCP원칙을 지킬 수 없다. 객체를 생성하고, 연관관계를 맺어주는 별도의 조립, 설정자가 필요하다. 3. LSP 리스코프 치환 원칙 - Liskov substitution..
[WEB기초] 싱글톤 패턴(Singleton Pattern) 애플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나고 최초 생성 이후에 호출된 생성자는 최초에 생성한 객체를 반환한다. 인스턴스가 필요 할 때 똑같은 인스턴스를 만들어 내는 것이 아니라, 동일(기존) 인스턴스를 사용하게 한다. 싱글톤 패턴 쓰는 이유 고정된 메모리 영역을 얻으면서 한번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있다. 싱글톤으로 만들어진 클래스의 인스턴스는 전역 인스턴스이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다. DBCP(Database Connection Pool)처럼 공통된 객체를 여러개 생성해서 사용해..
[WEB기초] Spring 생성자 주입을 써야하는 이유 생성자 주입을 사용해야하는 이유 객체의 불변성 확보 수정자 주입이나 일반 메소드 주입을 사용하면, 불필요하게 수정의 가능성을 열어두게 된다. SOLID 5원칙 중 OCP 원칙을 지키며 객체의 불변성을 확보할 수 있다. 테스트 코드의 작성 테스트 코드를 순수 자바코드로 작성할 수 있다. 컴파일 시점에 객체를 주입받아 테스트 코드를 작성할수 있으며, 주입하는 객체가 누락된 경우 컴파일 시점에 오류를 발경할 수 있다. 필드 주입의 경우 순수 자바코드로 단위테스트를 작성하는 것이 불가능하다 final 키워드 작성 및 Lombok과의 결합 final 키워드를 사용할 수 있고, Lombok과의 결합을 통해 코드를 간결하게 작성할 수 있다. 순환 참조 에러 방지 순환 참조 문제를 애플리케이션 구동( 객체의 생성 ) ..
[모든 개발자를 위한 HTTP 웹 기본 지식] 24.HTTP 최종 마무리 학습 내용 정리 인터넷 네트워크 인터넷 통신 IP( 인터넷 프로토콜 ) TCP, UDP PORT DNS URI와 웹 브라우저 요청 흐름 URI 웹 브라우저 요청 흐름 HTTP 모든 것이 HTTP 클라이언트 서버 구조 Stateful, Stateless 비 연결성( connectionless ) HTTP 메시지 HTTP 메서드 HTTP API를 만들어보자 -> HTTP API 만들기 첫 시도 HTTP 메서드 - GET, POST HTTP 메서드 - PUT, PATCH, DELETE HTTP 메서드의 속성 HTTP 메서드 활용 클라이언트에서 서버로 데이터 전송 HTTP API 설계 예시 HTTP 상태코드 HTTP 상재코드 소개 2xx - 성공 3xx - 리다이렉션1 - 영구 리다이렉션 3xx - 리다이렉션2..
[모든 개발자를 위한 HTTP 웹 기본 지식] 23.HTTP 헤더2 - 캐시와 조건부 요청 - 캐시 무효화( 5/5 ) Cache-Control 확실한 캐시 무효화 응답 Cache-Control: no-cache, no-store, must-revalidate Pragma: no-cache HTTP 1.0 하위 호환 캐시 지시어(directives) 확실한 캐시 무효화 Cache-Control: no-cache 데이터는 캐시해도 되지만, 항상 원 서버에 검증하고 사용(이름에 주의!) Cache-Control: no-store 데이터에 민감한 정보가 있으므로 저장하면 안됨 (메모리에서 사용하고 최대한 빨리 삭제) Cache-Control: must-revalidate 캐시 만료후 최초 조회시 원 서버에 검증해야함 원 서버 접근 실패시 반드시 오류가 발생해야함 - 504(Gateway Timeout) must-revalida..
[모든 개발자를 위한 HTTP 웹 기본 지식] 22.HTTP 헤더2 - 캐시와 조건부 요청 - 프록시 캐시( 4/5 ) 프록시 캐시 도입 프록시 캐시가 없다면, 원(origin)서버로 붙을 경우 모든 사람이 동일하게 오랜 시간 기다려야 한다. - 첫 번째 요청 글로벌 서비스의 경우 CDN(ex. AWS CloudFront, ...)를 많이 사용합니다. Cache-Control 캐시 지시어( directives )- 기타 Cache-Control: public 응답이 public 캐시에 저장되어도 됨 Cache-Control: private 응답이 해당 사용자만을 위한 것임, private 캐시에 저장해야 함(기본값) Cache-Control: s-maxage 프록시 캐시에만 적용되는 max-age Age: 60 (HTTP 헤더) 오리진 서버에서 응답 후 프록시 캐시 내에 머문 시간(초) 출처 https://www.infl..
[모든 개발자를 위한 HTTP 웹 기본 지식] 21.HTTP 헤더2 - 캐시와 조건부 요청 - 캐시와 조건부 요청 헤더( 3/5 ) 캐시 제어 헤더 Cache-Control: 캐시 제어 Pragma: 캐시 제어(하위 호환) Expires: 캐시 유효 기간(하위 호환) 1. Cache-Control 캐시 지시어( directives ) Cache-Control: max-age 캐시 유효 시간, 초 단위 Cache-Control: no-cache 데이터는 캐시해도 되지만, 항상 원(origin) 서버에 검증하고 사용 Cache-Control: no-store 데이터에 민감한 정보가 있으므로 저장하면 안됨 (메모리에서 사용하고 최대한 빨리 삭제) 2. Pragma 캐시 제어(하위 호환) Pragma: no-cache HTTP 1.0 하위 호환 3. Expires 캐시 만료일 지정(하위 호환) 캐시 만료일을 정확한 날짜로 지정 ex. exp..
[모든 개발자를 위한 HTTP 웹 기본 지식] 20.HTTP 헤더2 - 캐시와 조건부 요청 - 검증 헤더와 조건부 요청( 2/5 ) 검증 헤더와 조건부 요청 검증 헤더 캐시 데이터와 서버 데이터가 같은지 검증하는 데이터 Last-Modified , ETag 조건부 요청 헤더 검증 헤더로 조건에 따른 분기 If-Modified-Since: Last-Modified 사용 If-None-Match: ETag 사용 조건이 만족하면 200 OK 조건이 만족하지 않으면 304 Not Modified 예시 If-Modified-Since: 이후에 데이터가 수정되었으면? 데이터 미변경 예시 캐시: 2020년 11월 10일 10:00:00 vs 서버: 2020년 11월 10일 10:00:00 304 Not Modified, 헤더 데이터만 전송(BODY 미포함) 전송 용량 0.1M (헤더 0.1M, 바디 1.0M) 데이터 변경 예시 캐시: 2020년 ..