본문 바로가기

Web

(48)
[Spring] AOP와 @Transactional의 동작원리 출처 : https://velog.io/@ann0905/AOP%EC%99%80-Transactional%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC [Spring] AOP와 @Transactional의 동작 원리 오늘은 @Transactional의 동작 원리를 AOP와 함께 좀 더 자세하게 조사해보려고 한다.여기서 다루는 내용은 다음과 같다.AOP란 무엇이며 왜 사용하는가Spring AOP는 왜 프록시를 사용하는가@Transactional은 velog.io @Transactional의 동작 원리 참고 링크: Proxy형태로 동작하는 JPA @Transactional 참고 링크: Spring AOP에서 Proxy란 ? 참고 링크: [Spring] @Transactio..
[Web] Java Testing Framework - Unit Test(JUnit) 들어가면서 1. TDD 테스트 주도 개발(Test-Driven Development, TDD)은 매우 짧은 개발 사이클을 반복하는 소프트퀘어 개발 프로세스중 하나입니다. 쉽게 얘기하면 개발을 하는데 있어서 테스트가 주가 되어 개발한다는 의미 입니다. 제품의 테스트가 좋을수록 제품의 품질이 향상 됩니다. 그래서 테스트는 중요하다고 생각합니다. 기존 개발 프로세스 설계 개발(코드 작성) 테스트(코드 작성) TDD 프로세스 설계 테스트(코드 작성) 개발(코드 작성) TDD 방법론을 사용할 경우 아래의 같은 장점, 단점이 있습니다. 장점 객체지향적인 코드 개발 - 모든 코드가 재사용 성을 기반으로 작성하기 때문 설계 수정 시간의 단축 - 테스트 코드를 먼저작성하기 떄문에 설계의 구조적 문제점을 바로 찾음 디버깅..
[WEB기초] REST API vs GraphQL 차이점 GraphQL / RESTful GraphQL 서로 다른 모양의 다양한 요청들에 대해 응답할 수 있어야 할 떄 대부분의 요청이 CRUD에 해당할 때 RESTful HTTP, HTTPs에 의한 Cacheing을 잘 사용하고 싶을 때 File 전송 등 단순한 Text로 처리되지 않는 요청들이 있을 때 요청의 구조가 정해져 있을 때 아래 글 요약 REST에서는 Resource에 대한 형태 정의와 데이터 요청 방법이 연결되어 있지만, GraphQL에서는 Resource에 대한 형태 정의와 데이터 요청이 완전히 분리되어 있습니다. REST에서는 Resource의 크기와 형태를 서버에서 결정하지만, GraphQL에서는 Resource에 대한 정보만 정의하고, 필요한 크기와 형태는 client단에서 요청 시 결정합니..
[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..