본문 바로가기

전체 글

(92)
DynamoDB를 이해하고 사용해보자 DynamoDB DynamoDB는 테이블, 항목, 속성을 핵심 구성요소로 가진다. 테이블 → 항목의 컬렉션 항목(아이템) → 속성의 컬렉션 (RDB의 레코드) 속성 → (RDB의 필드) DynamoDB의 특징 보통 DB Resource가 TCP 기반 연결인데 비해 DynamoDB는 HTTP연결로 비연결성이다. 이는 요청이 올때만 생성되어 실행되는 서버리스 기술인 AWS Lambda와 매우 잘 어울린다. key외의 정해진 schema가 없다. DynamoDB는 기본 키(Primary Key)를 사용하여 테이블의 각 항목을 고유하게 식별 파티션 키 (해시 속성) 파티션 키 하나만으로 기본 키를 구성하면 이 키는 유일한 값이된다. 복합 기본 키 로 구성하여 파티션 키와 정렬 키 두개로 구성할 수 있다. 이 경..
[스프링 MVC 1] 서블릿, 템플릿엔진, MVC 패턴 (2) 서블릿 컨테이너 동작 방식 스프링부트가 내장된 톰캣서버를 띄우고 클라이언트가 요청을 보내면 요청을 request, response객체로 만들어서 Servlet객체를 만든다. 이 Servelt객체를 관리하는 것이 서블릿 컨테이너이다. HTTP 요청 메시지를 서블릿이 HttpServletRequest객체로 담아서 사용하게 편리하게 해준다. `HttpServletRequest` => [메서드, URL정보, 쿼리스트링 // 헤더 // Body]와 같은 요청메시지를 편리하게 사용. 같은 요청에 값을 임시 저장할 수 있는 공간을 제공하면 세션 관리도 제공한다. HTTP 요청 데이터 방식 3가지 GET - 쿼리파리미터 `ex) url?username=hello?age=20` POST - HTML FORM 메시지 바디..
[단위테스트] 단위테스트에 대해 알아보자 단위테스트 (Unit Test) - 단위테스트란 '하나의 기능 또는 메서드를 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트' - 한 단위의 기능이 올바르게 동작하는지 테스트하며 어떤값이 주어졌을 때 예상결과가 나오도록 하여 테스트를 진행한다. vs. 통합테스트 통합테스트는 모듈간의 호환성을 확인하고 모듈을 통합하는 과정에서 수행하는 테스트이다. 많은 모듈들이 맞물려서 서로에게 메시지를 주고받으며 동작하므로 모듈들의 연계가 정상적인지 검증하는 과정이 필요하다. 그러므로 클라이언트가 API호출할 때 부터 응답까지 정상적으로 작동하는지 테스트 하는 것이다. 그렇다면 그냥 모듈들이 모두 연계된 완전한 테스트를 진행하지 않고 단위테스트를 진행하는 이유는 무엇일까? 모듈들이 연계된 통합 테스트를 하기 위해서..
[스프링 MVC 1] 웹 애플리케이션의 이해 (1) 웹서버 정적 리소스 제공 정적 HTML, CSS, 이미지, 영상 예) NGINX, APACHE 하지만 콘텐츠의 크기가 수백 메가바이트 같이 매우 큰 경우나 다수의 클라이언트가 동시에 이를 요청했을 때 웹서버는 '네트워크 대역폭', '라우터 대역폭', '케이블 대역폭' 각종 제한에 도달하게 된다. 이렇게 제한에 걸려버리면 웹서버는 일반 요청도 처리할 수 없는 '마비'상태가 된다. 콘텐츠 크기가 크거나 요청이 많아서 웹서버에 제한이 걸릴 때 해결방법 로드밸런서로 다수의 웹서버를 사용하는 방법이 있고 콘텐츠 추가에 대응하기 위해 네트워크 대역이 높은 '미디어 콘텐츠 서버'를 따로 둔다. 거리가 멀면 콘텐츠의 전송 속도가 느려지므로 클라이언트와 서버 사이에 콘텐츠 서버를 배치하여 트래픽을 분산시킬 수 있다. 하..
서버리스 애플리케이션 사용해보기 서버리스란? 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델 서버자원을 AWS에서 제공해주고 개발자는 비즈니스로직을 짜는데만 집중할 수 있는 구조 온프레미스에서 발생할 수 있는 서버구성, 폴트, 확장성 등을 신경쓰지 않아도 됨 기존의 서버에서 사용자 수가 갑자기 증가하는 상황이 발생하면? → 온프레미스는 갑자기 서버를 확장시킬 수 없으므로 서버가 터지고 이는 비즈니스적인 손해로 이어짐 → 늘어난 리소스를 관리하는 인력도 필요함.. → 하지만, 항상 많은 요청과 인력이 필요한 것은 아님.. → 유연하게 조절을 할 수 있으면 좋다! 서버리스는 서비스 요청량에 따라 변하지않고 항상 같은 품질의 서비스를 제공하기 쉽도록 함 AWS 결제 알람 설정하기 ..
[이펙티브 자바] 12장 : 직렬화 객체 직렬화에 대해 다뤄보자. 객체 직렬화란 자바가 객체를 바이트 스트림으로 인코딩하고(직렬화) 그 바이트 스트림으로부터 다시 객체를 재구성(역직렬화) 메커니즘이다. 직렬화된 객체는 다른 VM에 전송하거나 디스크에 저장한 후 나중에 역직렬화할 수 있다. → 이번 장에서는 직렬화가 품고있는 위험과 그위험을 최소화하는 방법을 알아보자. 아이템 85 : 자바 직렬화 대안을 찾으라 역직렬화를 함부로 사용하면 공격에 노출되게 된다. 직렬화 위험을 회피하는 가장 좋은 방법은 아무것도 역직렬화하지 않는 것이다. 그렇기 때문에 새로운 시스템에서 자바 직렬화를 써야 할 이유는 전혀 없다. (위험하니까) → 객체와 바이트 시퀀스를 변환해주는 다른 매커니즘을 사용하자. 다양한 플랫폼 지원 우수한 성능, 풍부한 지원 도구 자..
[이펙티브 자바] 11장 : 동시성 스레드는 여러 활동을 동시에 수행할 수 있게 해준다. 하지만 동시성프로그래밍은 어렵고 잘못될 수 있는 일이 늘어나며 문제를 재현하기도 어렵다 (디버깅이 어렵다) 하지만, 어렵다고 피해서는 안된다. 오늘날 널리 쓰이는 다중코어 프로세서의 힘을 제대로 활용하려면 반드시 내것으로 만들어야만 하는 기술이다. 아이템 78 : 공유 중인 가변 데이터는 동기화해 사용하라 동기화의 기능 배타적 실행 많은 프로그래머가 동기화를 배타적 실행, 즉 한 스레드가 변경하는 중이라서 상태가 일관되지 않은 순간의 객체를 다른 스레드가 보지 못하게 막는 용도로만 생각한다. 일관된 객체 생성 → 접근하는 메서드가 객체에 락을 검 → 락을 건 메서드가 객체의 상태를 확인하고 수정함 ⇒ 객체를 하나의 일관된 상태에서 다른 일관된 상태로 ..
[이펙티브 자바] 10장 : 예외 예외를 제대로 활용한다면 프로그램의 가독성, 신뢰성, 유지보수성을 높아지게 할수 있다. 아이템 69 : 예외는 진짜 예외 상황에서만 사용하라 아래 코드는 예외를 완전히 잘못 사용한 예이다. try { int i = 0; while(true) range[i++].climb(); } catch (ArrayIndexOutOfBoundsException e) { } 해당 코드는 무한루프를 돌다가 예외를 통해 끝을 내고 있다. 이 코드는 아마 배열 경계검사를 하지 않기에 성능이 더 좋을 거라 생각하고 쓴것 같다. 하지만 이는 잘못된 추론이다. 예외는 예외 상황에서 쓸 용도로 설계되었고 최적화에 약하다. try-catch 블록안에서는 JVM이 적용할 수 있는 최적화가 제한된다. 배열을 순회하는 표준관용구는 중복 검..

반응형