본문 바로가기

분류 전체보기257

[java/Design Pattern] 싱글톤의 Lazy 초기화 안녕하세요. 오랜 만에 여러분들과 Design 패턴에 대해서 알아보는 시간을 가져보려고 합니다. 이전에 저희들은 Singleton 패턴에 대해서 [Spring & Design Pattern] Spring에서 발견한 디자인패턴_Singleton Pattern 시간에 알아본적이 있습니다. 그때 Singleton을 초기화 할때 아래와 같은 코드로 초기화를 진행했습니다. 하지만 사실 이렇게 초기화 하는 것은 문제점을 안고 있습니다. public class Government { private static Government government; private Government() {} public static Government election() { if(government == .. 2020. 11. 28.
[Spring] Spring의 핵심기술 PSA - 개념과 원리 안녕하세요. 오늘은 오랜만에 Spring에 대해서 이야기 해보고자합니다. [Spring] Spring의 정의와 기본 개념 포스팅에서 Spring의 대표적인 핵심가치 3가지로 IoC, AOP, PSA가 있다고 말씀드렸었습니다. 그리고 [Spring] Spring의 핵심 기술 IoC / DI에서 그 중 하나인 IoC/DI에 대해서 알아보는 시간을 가졌습니다. 그리고 이후 AOP에 대해서 3개의 포스팅 ([Spring] Spring AOP - 기본 이론편, [Spring] Spring AOP - 실전편, [Spring] Spring AOP - 원리편)에 걸쳐서 함께 알아보는 시간을 가졌습니다. 오늘은 마지막 남은 핵심가치인 PSA(Portable Service Abstraction)에 대해서 알아보는 시간을 .. 2020. 11. 25.
[java] Generic을 이용한 Box Class 안녕하세요. 오늘 포스팅은 Java Generic의 4번째 시간입니다. 오늘 여러분들과 공유하고자 하는 내용은 다시 기본으로 돌아가서 Generic을 이용한 Box Class라는 내용입니다. Box Class에 란 아래와 같이 어떠한 타입으로든 받을 수 있는 Class를 말합니다. 아래 예제를 보면 Box class 안에 Object 타입의 변수가 하나있으며 getter, setter 메서드가 각각 있습니다. Object Class는 모든 Class의 부모 클래스이기 때문에 setter 메서든에는 모든 Class가 들어올 수 있게되어 Box Class란 이름으로 사용할 수 있는 것입니다. public class Box { private Object object; public void set(Object .. 2020. 11. 22.
[Java] Java의 Super Type Token 안녕하세요. 오늘은 Java Generic의 3번째 시간입니다. 외부 통신을 할 때 가장 많이 사용하는 Spring의 Bean은 restTemplate 일겁니다. restTemplate을 사용할 때 응답값에 대해서 형변환을 할 때 배열로의 형변환을 타입을 new TypeReference() {} 이렇게 사용하곤 합니다. jackson에서도 마찬가지지요. 왜 이렇게 사용할까요? 이상하게 여기고 List으로 바꾸면 제대로 동작하지 않습니다. 위와같은 형태를 Super Type Token이라고 부릅니다. 오늘은 이 Super Type Token은 어떤것이며 왜 사용해야하는지 알아보는 시간을 가져보겠습니다. 제네릭의 Type Erasure jackson이라는 라이브러리가 있습니다. jackson은 json형태의.. 2020. 11. 17.
[Java] Java 제네릭의 형 변환(covariant & contravariant) 안녕하세요. 저희는 저번 포스팅에서 배열과 컬렉션 제네릭의 차이점에 대해서 알아보는 시간을 가졌습니다. 그리고 배열은 기본적으로 형변환이 자유로우며 컬렉션 제네릭은 무공변으로 형변환이 불가능 하다는 차이를 알게 되었습니다. 그렇다면 컬렉션을 이용해서는 다양한 형태의 데이터 처리가 불가능 할까요? 그렇지 않습니다. 오늘은 제네릭의 형 변환(covariant & contravariant)에 대해서 알아보는 시간을 가져보겠습니다. 공변성(covariant) 공변성이란 자신이 상속받은 부모 객체로 타입을 변화시킬 수 있다라는 것을 뜻합니다. 제네릭의 공변성을 사용하기 위해서는 extends 키워드를 사용해야합니다. 아래 예제는 이전 포스팅에서 사용한 예제입니다. 아래 처럼 사용하면 컴파일에러가 발생하는 건 우리.. 2020. 11. 11.
[java] 배열(Array)과 컬렉션 제네릭의 차이 자바의 객체 타입은 고정이 아닙니다. 객체 타입은 런타임에 자신이 상속받고 있는 타입으로 변하는 업 캐스팅(upcasting)과 자신 자신의 아래 클래스의 형태로 변할 수 있는 다운 캐스팅(downcasting)이 있습니다. 이를 자바에서는 객체가 다형성(Polymorphism)을 가지고 있다고 합니다. 상속 매커니즘과 더불어 이런 다형성은 객체의 재사용성을 높여주고 객체지향(OOP)를 잘 달성할 수 있게 도와줍니다. 그리고 ArrayList, HashMap과 같은 Collections을 자바 개발자는 자주 사용하게됩니다. 이때 타입의 안정성을 위해 제네릭(generic)을 사용합니다. 이 제네릭은 다양한 Type을 지원할 수 있도록 타입 파라미터(type paramter) T를 지원합니다. 오늘 여러분.. 2020. 11. 8.
[데이터베이스] MySQL의 Lock과 트랜잭션 모델 안녕하세요. 이전 포스팅, [DataBase] Lock에 대해서 알아보자 - 기본편에서 우리는 Lock이란 어떤 것이고 DBMS에서는 Lock을 어떤 경위로 사용는지에 대해서 자세하게 알아보았습니다. 도움이 되셨을까요? 포스팅에서도 말했다시피 Lock은 DBMS마다 조금씩 구현하는 요소들이 다릅니다. 대표적인 예로 MySQL은 읽는것에 대해서도 Lock(공유 락)을 잡는 반면 Oracle에서는 Lock을 전혀 잡지 않습니다. 오늘은 Mysql의 Lock과 트랜잭션에 대해서 공식문서를 보며 한번 파헤쳐보도록 하겠습니다. 이번 포스팅은 Lock에 대해서 기본적인 지식이 있다라는 것을 전제로 만들어 졌습니다. 혹시 개념이 없으시거나 미흡하다고 생각되시는 분들은 Lock에 대한 포스팅및 트랜잭션 및 격리성에 대.. 2020. 11. 4.
[데이터베이스] Lock에 대해서 알아보자 - 기본편 안녕하세요. 오늘은 DataBase의 Lock에 대해서 알아보고 정리해보는 시간을 가져보도록 하겠습니다. DataBase는 데이터를 영속적으로 저장하고 있는 시스템입니다. 이런 시스템은 같은 자원(데이터)에 대해서 동시에 접근하는 경우가 생길 수 밖에 없습니다. 이럴 경우 데이터가 오염 될 수 있는데 그렇게 되지 않도록 데이터의 일관성과 무결성을 유지해야할 필요가 있습니다. 예를 들어 수강신청 시스템에서 1명만이 정원으로 남게되었습니다. 여기서 2사람이 거의 동시에 버튼을 눌렀습니다. 성공은 1명만 되야합니다. 이런 상황에서 DBMS(DataBase Management System)가 사용하는 공통적인 방법이 Lock이라는 것입니다. Lock Lock이란 트랜잭션 처리의 순차성을 보장하기 위한 방법입니다.. 2020. 10. 29.
[자료구조] 코드로 알아보는 java의 LinkedHashMap 안녕하세요. 오늘은 오랜만에 다시 돌아왔습니다. 코드로 알아보는 java의 자료구조의 5번째 시간입니다. 오늘 알아볼 자료구조는 LinkedHashMap입니다. LinkedHashMap 이란 어떤 자료구조인지 HashMap과는 어떻게 다른지 알아보고 Java에서는 어떻게 구현되어 있는지 코드로 함께 확인하는 시간을 가지도록 하겠습니다. 해당 포스팅을 이해하기위해서는 먼저 HashMap에 대한 이해가 필요합니다. HashMap에 대해서 잘 모르시는 분들은 제가 이전에 포스팅한 HashMap의 자료구조를 한번 보시기바랍니다. HashMap을 순차적으로 읽으면 어떤 순서로 읽는가 ? HashMap은 Node를 꺼낼 때 넣은 순서를 보장하지 않는다고 합니다. 그렇다면 Node 순회에 대해서 읽는 순서는 어떻게 .. 2020. 10. 19.
[AWS] SQS(Simple Queue Service)의 다양한 설정들 안녕하세요. 오늘은 여러분들과 AWS의 SQS에 대해 공유드리고자 합니다. 많은 분들이 AWS의 SQS 서비스를 사용하고 있으실 거라고 생각합니다. SQS는 AWS의 서비스 중 하나로 Queue를 구현하고 있는 서비스입니다. 이 서비스는 UI로 매니징 할 수 있도록 되어있고 Java에서도 사용하기 쉽게 SDK를 제공합니다. 오늘은 가볍게 SQS 사용에 필요한 간단한 동작 원리 및 설정에 대해서 알아보는 시간을 가져보도록 하겠습니다. SQS(Simple Queue Service)란 SQS는 AWS(Amazon Web Service)에서 제공하는 Simple Queue Service의 약자로 분산 큐(Distributed Queues) Saas 서비스입니다. SQS의 요소에는 3가지가 있습니다. 사용하는 서.. 2020. 10. 15.
[MSA] Spring Cloud Feign - With Hystrix 안녕하세요. 오늘은 Spring Cloud Feign의 마지막 시간입니다. 오늘 알아볼 내용은 Feign에서 Hystrix와 연동은 어떻게 이루어지고 어떻게 동작하는지, 그리고 이를 실습해보는 시간을 가져보도록하겠습니다. Hystrix에 대한 개념이 없으시거나 부족하신 분들은 제가 포스팅한 예전 포스트가 있으므로 참조해주시면 좋을 것 같습니다. [MSA] Spring Cloud Hystrix - 개념편 의존성 저는 현재 시점의 Spring Cloud의 최신버전인 Hoxton.SR8를 사용하고 있습니다. 해당 mavenBom으로 OpenFeign의 의존성을 가져오면 최신버전인 2.2.5.RELEASE를 사용할 수 있습니니다.있습니다. 다른 많은 포스팅을 보시면 hystrix의 의존성을 추가해야한다고 합니다.. 2020. 10. 10.
[데이터베이스] 트랜잭션과 격리성 안녕하세요. 평소에 포스팅하던 내용과는 조금 떨어진 이론적인 내용을 포스팅하고자 합니다. DB는 트랜잭션 단위로 처리된다고 합니다. 유명한 All Or Nothing이 DB의 트랜잭션에서 나온 이야기입니다. 오늘은 여러분들께 DB를 이용할 때의 트랜잭션과 그리고 한발 더 나아가 격리성(Isolation)에 대해서 알아보는 시간을 가지도록 하겠습니다. 트랜잭션(Transaction) 만들고 있는 프로젝트의 로직중에 DB table에 정보를 insert하는 로직이 있습니다. table은 정규화 되어있으며 A, B, C 테이블에 차례대로 테이터를 insert한다고 하겠습니다. 테이블이 쪼개져 있으므로 테이블간의 데이터 정합성을 유지하는게 중요합니다. 만약 A, B에는 insert하고 C에 insert 하기전 .. 2020. 10. 4.