본문 바로가기

기타107

[자료구조] 코드로 알아보는 java의 HashSet 안녕하세요. Java의 자료구조를 알아보는 시간을 가지고 있습니다. 지금까지 List, Map에 대해서는 한종류씩 알아보았지만 아직 Set에 대해서는 알아본적이 없습니다. 그래서 오늘은 Set의 구현체 중 하나인 HashSet을 코드로 한번 알아보는 시간을 가지도록 하겠습니다. Set Set은 List와 다르게 중복을 허용하지 않는 자료구조입니다. 어떻게 중복을 허용하지 않을 수 있는지 코드와 함께 살펴보도록 하겠습니다. 상속과 멤버변수 public class HashSet extends AbstractSet implements Set, Cloneable, java.io.Serializable private transient HashMap map; // Dummy value to associate wit.. 2020. 2. 17.
[자료구조] 코드로 알아보는 java의 LinkedList Java에서 List를 구현하는 구현체는 대표적으로 ArrayList, LinkedList, Vector가 있습니다. 저희는 저번 포스팅에서 ArrayList에 대해서 코드를 보며 내부 구조와 실질적인 시간복잡도를 파악해 보았습니다. 오늘은 LinkedList에 대해서 코드를 보며 ArrayList와는 어떻게 다른지 그 구조와 시간복잡도를 파악해보도록 하겠습니다. ArrayList와 LinkedList 우리가 일반적으로 알고 있는 ArrayList의 이미지는 위와 같습니다. String 형태의 "Hello Wo" char 배열에 저장한다고 하면 위와같은 형태가 될 것입니다. index를 가지고 있으며 index에 값을 저장하고 있는 형태입니다. 이런형태를 가짐으로써 RandomAccess가 가능하고 군집.. 2020. 2. 14.
[자료구조] 코드로 알아보는 java의 ArrayList 안녕하세요. 오늘은 우리가 잘 사용하는 ArrayList에 대해 코드를 들여다 보고 내부는 어떻게 구성되어 있는지 확인해보도록 하겠습니다. 그리고 주요한 메서드 들은 어떤 로직으로 구현되어 있는지 알아보도록 하겠습니다. ArrayList ArrayList는 배열을 좀 더 편하게 쓸수있도록 Java에서 제공해주는 Class입니다. 일반 배열과는 다르게 메모리가 가능한한 추가할 수 있고 삭제에 대해서도 해당 index를 비워두기만 하는게 아니라 재정렬해주는 기능을 기본으로 제공해주고 있습니다. interface와 내부 변수 확인 public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Seriali.. 2020. 2. 12.
[Design Pattern] Decorator Pattern과 Proxy Pattern의 비교 안녕하세요. 지금까지 같이 알아본 디자인 패턴 중 데코레이터 패턴과 프록시 패턴은 유사한 구조를 가지고 있으며 사용하는 방법도 유사하다라는 걸 눈치채신 분들이 있을 것 같습니다. 2개 패턴의 구조는 유사하지만 해결하고자 하는 문제와 방법이 다릅니다. 오늘은 데코레이터 패턴과 프록시 패턴을 비교해보도록 하겠습니다. 데코레이터 패턴과 프록시 패턴 프록시 패턴 먼저 프록시 패턴은 위와 같은 아키텍처로 되어있습니다. Real Object에 대해서 실제로 필요할 때 instance가 생성되고 실제 작업이 진행될 수 있도록 하기 위해 적용되는 패턴입니다. 프록시 패턴에서 Real Object는 Proxy가 감싸고 있으며, Proxy를 통해서 처음 접근 또는 요청이 있을 때 생성이 되어집니다. Proxy는 Clien.. 2020. 1. 31.
[Design Pattern] Java에서 발견한 디자인패턴_Decorator Pattern 안녕하세요. 오늘은 Decorator Pattern에 대해서 알아보도록 하겠습니다. Decorator Design Pattern 데코레이터 패턴에 대해서는 토비의 스프링 3.1 Vol. 1 책에 아래와 같이 서술합니다. 데코레이터 패턴은 Target Class에 부가적인 기능을 런타임 시 다이나믹하게 부여해주기 위해 Proxy를 사용하는 패턴 다이내믹하게 기능을 부가한다는 의미는 컴파일 시점, 즉 코드상에서는 어떤 방법과 순서로 프록시와 타깃이 연결되어 사용되는지 정해져 있지 않다는 뜻 즉, 데코레이터 패턴은 런타임중 다양하게 기능을 추가 할 수 있다라는 뜻입니다. 그럼 바로 한번 예제의 아키텍처와 코드를 확인해보도록 하겠습니다. 예제 윈도우 시스템을 만든다고 가정해보겠습니다. 세로스크롤, 가로스크롤, .. 2020. 1. 30.
[자료구조] 코드로 알아보는 java의 Hashmap HashMap이란 HashMap은 Key, Value를 저장하는 Map의 구현체 중 하나입니다. 자료구조에 Key를 넣으면 Value를 반환하도록 합니다. 그리고 HashMap은 Key를 Hashing을 하여 저장하여 빠르게 처리 그리하여 HashMap이란 입력과 삭제에 대해 시간복잡도가 O(1)인 자료구조라고 합니다. initialize 우리가 Java를 사용할때 HashMap을 사용한다고 한다면 가장먼저 초기화를 해야합니다. (Key, Value는 모두 String이라고 하겠습니다.) 그러면 아래와같이 초기화 할 것입니다. Map map = new HashMap(); 이때 내부에서는 어떤일이 일어나는지 보겠습니다. /** * Constructs an empty HashMap with the defau.. 2020. 1. 25.
[MSA] MSA의 특징과 장단점 오늘은 저번 시간에 이어서 MSA의 특징과 장단점에 대해서 알아보도록 하겠습니다. MSA의 특징 스프링 5.0 마이크로서비스 2/e에서는 아래와 같은 문구가 나옵니다. 마이크로서비스의 특징에 대해서는 구체적이면서 모두가 동의하는 단 하나의 정의는 없다. 하지만 성공적이었던 모든 마이크로서비스 구현체들 사이에는 공통적으로 발견되느 특징들이 몇 가지 있다. 이 책에 서술되어 있는 성공적인 마이크로서비스의 공통적인 특징에 대해서 알아보도록 하겠습니다. 서비스는 일급 시민 API를 통해서만 마이크로서비스와 서비스와 상호작용할 수 있습니다. 즉, 마이크로서비스는 서비스의 end-point(접근점)을 API 형태로 외부에 노출하고, 실질적인 세부 사항은 모두 추상화합니다. 내부의 구현 로직, 아키텍처와 프로그래밍 .. 2020. 1. 2.
[MSA] MSA의 개념과 이해_기존 아키텍처와 MSA 마이크로서비스는 최근 많은 조직에서 고도의 애자일성, 전달 신속성, 확장성을 확보할 수 있는 중요한 수단으로 사용 중인 아키텍처 스타일입니다. 기존의 특정한 물리적인 서버에 서비스를 올리던 on-promise 서버기반의 monolithic architecture에서 이제는 클라우드 환경을 이용하여 서버를 구성하는 MicroService Architecture로 많은 서비스들이 전환되고 있고, 새로 출시되는 서비스들은 이렇게 진행되고 있습니다. 오늘은 기존의 Monolithic Architecture와 MSA(MicroService Architecture)의 변화와 차이에 대해서 알아보도록 하겠습니다. Monolithic Architecture 모놀리식 아키텍처란 서비스의 아키텍처를 구성할 때 모든 서비스.. 2019. 12. 26.
[MSA] 12요소 어플리케이션; 클라우드 네이티브 어플리케이션 많은 조직들이 기존 어플리케이션을 들어내며 클라우드로 옮기고 있습니다. 그리고 처음부터 클라우드로 개발을 하기도합니다. 이런 클라우드의 장점은 비용, 속도, 애자일성, 유연성 ,탄력성 측면에서 많은 장점을 가지고 있습니다. 사실 이런 장점을 모든 개발사들이 누리고 있는 것은 아닙니다. 왜냐하면 기존의 온프레미스 아키텍처가 클라우드 환경과는 맞지 않는 부분이 있기 때문입니다. 어떻게 하면 어플리케이션이나 마이크로서비스를 다른 여러 클라우드 서비스상에서 매끄럽게 운영하고 탄력성 같은 서비스의 장점을 누릴 수 있을까요? 허로쿠(Heroku)가 제시한 12 요소 어플리케이션은 클라우드에서 장점을 살릴 수 있는 특징을 기술하는 방법론입니다. 오늘은 이런 12 요소 어플리케이션에대해서 한번 알아보도록 하겠습니다. .. 2019. 12. 15.
객체지향 설계의 5가지 원칙 S.O.L.I.D 안녕하세요. 오늘은 객체지향의 5가지 원칙, SOLID에 대해서 알아보도록하겠습니다. java의 특징은 많이 들어보셨을 것 같습니다. 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism) 이렇게 있죠. 이런 특징이 있는 JAVA는 객체지향(OOP) 프로그램의 특징을 가지고 있다고 합니다. 즉, 이런 특징을 이용하여 객체지향의 원칙을 구현할 수 있다는 것입니다. 오늘은 저와 객체지향을 목표로 하는 프로그램이 지켜야 할 5가지 원칙(Principle)에 대해서 알아보도록 하겠습니다. S - Single responsibility Principle 단일 책임 원칙(Single responsibility principle)이란 모든 메서드 또는 클래스는 단 하나의 책.. 2019. 11. 4.
[REST API] REST API의 Security With JWT 안녕하세요. 오늘은 REST API에 대해서 아야기하는 마지막 시간입니다. 주제는 security입니다. security는 우리가 개발을 하면서 빼놓을 수 없는요소입니다. 하지만 귀찮아서, 기능 개발이 재밌어서, 시간이 없어서 등등 많은 이유로 많은 개발자들이 접근하지 않는분야기도 합니다.(예전의 저만 그렇게 생각했을 수도 있어요.. ㅎㅎ;) 오늘은 REST API에서의 security에 대해서 알아보도록 하겠습니다. 개요 REST API의 Security를 생각할 때 가장먼저 생각해야할 제약조건은 stateless입니다. stateless란 서버는 client의 로그인과 같은 application state를 기록하지 않는 다는 의미입니다. 우리가 일반적으로 알고 있는 basic, OAuth 등과 같은.. 2019. 11. 1.
[REST API] REST 제약조건_캐싱(Caching) 캐시가 사용 가능해야 한다는 것은 REST의 6가지 제약조건 중 한 가지입니다. 캐싱이 어떤 것인지는 저의 예전 포스터를 참고 부탁드립니다. 캐시관련 http Method GET - 일반적으로 브라우저에서 cache가 사용 가능하게 처리합니다. POST - 일반적으로 cache가 사용 불가능합니다. 하지만 Expires와 Cache-Control header를 이용하여 caching을 구현하여 응답할 수 있습니다. PUT, DELETE - 해당 REQUEST는 Cache를 적용할 수 없습니다. cache관련 http 헤더 Expires 리소스의 cache 만료 시간을 절대값으로 나타낸 것입니다. 해당 헤더의 시간이 지나면 캐시가 아닌 원래 서버에 요청을 하여 리소스를 다시 얻어와야 합니다. Expires.. 2019. 10. 24.