본문 바로가기

반응형

분류 전체보기

(218)
[중고거래장터 - Study&Refactoring] 캐싱 기능 적용(Spring MVC + Redis + Jedis) XML 방식 Spring 환경에서 캐싱 기능을 구현하기 위해 Redis + Jedis 또는 Redis + Lettuce를 통한 구현을 권장하고 있습니다. 둘 중 어느 것을 사용해야 할까요? redis 공식 홈페이지의 글을 살펴보면 "본인이 선택하기 나름"이라고 합니다. Jedis를 사용하면 구현이 간단하지만 기능적으로 확장성(Scalability)이 떨어집니다. Lettuce를 사용하면 Jedis와 비교해서 구현이 복잡하지만 기능적으로 확장성이 뛰어납니다. 여기서 말하는 '확장성'은 동시다발적인 요청을 얼마나 유연하게 처리할 수 있느냐를 말하는 것 같습니다. 저의 경우 확장성 보다는 캐싱 기능 구현을 통한 학습에 중점을 두고 있기 때문에 Jedis로 구현했습니다. 일단 캐싱 기능이 어떻게 작동되는지 빠르게 확인하고 ..
[중고거래장터 - 6] setter 대신 빌더 패턴 사용 / Controller와 Service 계층의 역할 분리 기존 작업물에 대한 리팩토링을 했다. - setter 메소드 대신 빌더 패턴 사용하기 - jUnit 테스트 코드 리팩토링 - 도메인 클래스 lombok 설정 수정 - 구현 세부 내용 숨기기 setter 메소드 대신 빌더 패턴 사용하기 아래 코드는 사용자의 비밀번호 변경 요청을 처리하는 Controller 클래스의 메소드이다. 이 코드에서 가장 먼저 수정해야 할 부분은 setter 메소드를 사용해서 값을 변경하는 부분이라고 판단했다. setter 메소드를 통해 유연하게 값을 받아서 넘겨주는 것이 편하게 느껴질 수 있다. 하지만 이런 로직은 불안하다. 수정자 메소드(setter)의 사용은 불필요한 데이터 변경을 유발한다. 이는 객체의 일관성을 유지하기 어렵게 만든다. 또한 의도치 않은 변경이 발생할 가능성이..
[Spring] 제어의 역전 그리고 의존성 주입 제어의 역전(Inversion of Control) 제어의 역전은 객체 제어의 주체가 객체를 사용하는 클래스 자신이 아닌 외부에 있다는 의미이다. 필요한 객체를 클래스 내부에서 직접 생성하지 않고 외부에서 주입받는 형태를 가진다. 제어의 역전을 구현하는 방법인 의존성 주입(Dependency Injection)에 대해서 알아보자. // 1번 코드_제어의 역전 X public clss UserController { // 클래스 내부에서 객체 생성! private UserService userService = new UserService(); } // 2번 코드_제어의 역전 O public clss UserController { // 인스턴스 필드만 선언! private UserService userServ..
[Java] private static final VS private final private static final static 키워드로 생성된 변수는 해당 변수가 있는 클래스 로드 중에 초기화되며, 애플리케이션 실행 내내 메모리에 머물러 있다. 따라서 초기화 과정 없이 해당 변수, 메소드에 접근할 수 있다. non-static(static 키워드 없이 생성된) 변수는 새로운 객체를 생성할 때마다 초기화된다. 자바 코드 컨벤션에 따르면 static final 변수 이름은 대문자(uppercase)로 작성되어야 한다. 아래 코드는 static final 키워드로 임의의 난수를 생성하는 변수를 생성했다. 그리고 해당 변수를 가진 클래스 인스턴스를 세 개 생성하여 static final 키워드가 붙은 변수인 경우 어떤 값을 출력하는지 알아보았다. 출력 결과 서로 다른 인스턴스를 생성하여..
[Java] 자바 클래스 파일(.class) 자바 클래스 파일 자바 소스 코드로 작성된 .java 파일이 컴파일러에 의해 컴파일 되면 .class 확장자를 가지고 있는 자바 클래스 파일이 생성된다. 자바 클래스 파일은 .java 파일에 정의된 클래스 개수에 따라 하나 혹은 여러 개가 생성될 수 있다. 자바 클래스 파일은 바이트 코드로 구성되어 있다. 이 바이트 코드는 JVM이 이해할 수 있는 명령어이다. 그리고 바이트 코드 안에는 Windows 또는 Mac과 같은 특정 구현 환경에 맞는 머신 레벨 명령어로 변환하는 코드가 포함되어 있다. 자바 바이트 코드는 JVM이 이해할 수 있도록 설계되었다. 그리고 플랫폼 의존적인 코드가 없다. 따라서 JVM이 설치된 장비라면 CPU나 운영체제가 다르더라도 자바 프로그램을 실행할 수 있다. JVM을 중간에 두고..
[Ajax] jQuery로 Ajax 구현 시 사용되는 설정값 모음 구현하는 '방법'에 대한 설명은 정말 많아서 입맞게 맞게 찾아서 볼 수 있다. 내가 이 글을 포스팅하는 이유는, Ajax 통신에 사용되는 설정값을 머릿속에 일목요연하게 정리하고 싶었기 때문이다. 정확히 알아야 "이렇게 하면 될 것 같은데.." 하는, '감'에 의존해서 구현하는 버릇을 없앨 수 있다고 생각한다. JQuery를 활용한 Ajax 통신 jQuery는 Ajax 통신을 위한 다양한 구현 방법을 제공한다. 그 중에서 Low-Level Interface 중의 하나인 jQuery.ajax() 형태로 구현하는 방법에 대해서 알아본다. 일반적으로 다음의 구조를 가진다. 설정에 사용되는 속성 이름 및 값은 XMLHttpRequest 객체를 통한 Ajax 통신에서 사용되는 속성 이름 및 값과 겹치는 부분이 많다..
[JavaScript] JSON 기본 개념 JSON은 쉽게 데이터를 주고받을 수 있도록 설계된 경량 데이터 포맷이다. JSON 데이터는 순수 문자로만 구성되어 있다. JSON 데이터는 key-value 쌍으로 작성되고, 큰따옴표("")로 감싸서 표현한다. 그리고 key-value 사이에 콜론(:)을 삽입해서 구분한다. "key" : "value" JSON 데이터 구성에서 key는 반드시 문자열 형태로 작성한다. value에는 다양한 데이터 타입이 올 수 있다. 만약 value 값으로 문자열이 사용될 시 반드시 큰따옴표("")를 사용해서 표현한다. 만약 value를 숫자로 표현하고 싶다면 정수(Integer) 또는 부동소수점(float) 형태만 가능하다. - a string - a number - an object - an array - a boo..
[Ajax] JavaScript로 Ajax 구현 JavaScript / XMLHttpRequest 객체를 통한 Ajax 구현 Ajax를 통해 페이지 전체가 아닌 일부분만 로드하는 등의 비동기 처리를 구현할 수 있다. 구현은 JavaScript 또는 jQuery를 이용하는 두 가지 방식이 있다. JavaScript는 브라우저에 내장된 XMLHttpRequest 객체를 통해 Ajax 통신을 구현한다. XMLHttpRequest는 XML 형식을 포함한 다양한 종류의 데이터를 취급할 수 있다. 아래 이미지는 JavaScript 환경에서 Ajax 통신이 어떻게 진행되는지 설명한다. 1. 웹 페이지 내에서 이벤트 실행. 2. JavaScript에 의해 XMLHttpRequest 객체 생성. 3. XMLHttpRequest 객체가 웹 서버로 요청사항 전달. 4. ..

반응형