본문 바로가기

분류 전체보기257

[HTTP] HTTP 메시지 분석 하기 안녕하세요. HTTP는 현대 개발에서 가장많이 사용하는 프로토콜 중에 하나입니다. 주로 이 프로토콜을 기본으로하여 유저와 서버간 서버와 서버간의 데이터를 주고 받습니다. 오늘은 이런 HTTP의 구조에 대해서 개괄적으로 분석해보는 시간을 가져보도록 하겠습니다.http 통신의 구성http 통신은 요청과 응답이 하나의 세트로 이루어집니다. 즉, 요청(Request)에 대해서 응답(Resonse)이 오는 구조인데요. 이때 http의 프로토콜 구조는 세부 내용은 다르지만 요청(Request), 응답(Resonse) 모두 동일한 구성을 가집니다. 바로 시작줄(Start Line)과 헤더(Headers)와 바디(Body)로 구성된다는 것입니다.아래 이미지는 제 블로그(sabarada.tistory.com)을 접속했을.. 2021. 1. 28.
[자료구조] 코드로 알아보는 java의 TreeMap 안녕하세요. 오늘은 코드로 알아보는 java의 자료구조 시간입니다. 오늘 알아볼 자료구조는 TreeMap입니다. 바로 그러면 알아보도록 하겠습니다. TreeMap 기본적으로 TreeMap은 내부의 값들을 key 값을 기준으로 정렬하여 가지고 있습니다. 정렬된 순서를 알 수 없는 HashMap과는 차이가 있습니다. 아래 예제 코드를 한번 보도록 하겠습니다. @Test public void treeMapTest() { TreeMap map = new TreeMap(); map.put(3, "val"); map.put(7, "val"); map.put(8, "val"); map.put(9, "val"); map.put(10, "val"); map.put(11, "val"); map.put(12, "val");.. 2021. 1. 20.
[Java] Java의 정렬 알고리즘 - Arrays와 Collections 안녕하세요. 오늘 포스팅은 Java의 Collection에서 사용하고 있는 정렬에 대해서 알아보려고 합니다. Java를 사용하다보면 정렬해서 처리해야할 경우가 생깁니다. 그럴경우 아래와 같이코드를 작성하곤 합니다. 아래 코드를 볼때 결과값이 1, 2, 3, 4, 5로 정렬되게 나온다는 것을 예측할 수 있을것입니다. @Test public void arrayTest() { int[] array = new int[]{1, 3 , 5, 4, 2}; Arrays.sort(array); System.out.println("array = " + Arrays.toString(array)); } @Test public void collectionTest() { List collection = new ArrayList(.. 2021. 1. 19.
[Java] String Pool에 관하여 안녕하세요. 오늘은 여러분들과 String Pool에 대해서 이야기해보고자 합니다. 알고 계셨나요 ? Java에서는 String을 저장하는데 2곳의 메모리를 사용할 수 있습니다. 오늘은 String Pool에 대해서 여러분들과 공유하고자 합니다. String Interning Java에서의 String은 일반적인 Heap에 저장할 수 있고 또한 별도의 String constants Pool이라는 공간을 제공하고 있습니다. String Constants Pool에 저장하고 사용하는 것을 String Interning 이라고 합니다. 이렇게 String Interning에 저장된 String 값은 불변성(Immutability)을 가지게 됩니다. 불변성을 가진다는 의미는 값은 변함이 없으며 동일한 Strin.. 2021. 1. 17.
[spring + 객체 지향 원칙] Spring에서의 의존성 역전의 원칙(Dependency Inversion Principle) 안녕하세요. 오랜만에 포스팅을 올리게 되네요. 새해가 되서 책한권 읽어야지 했는데... 생각보다 오래 걸렸습니다. 그 책을 다 읽고 이제 포스팅을 하려고 합니다. 아쉽지만 책과 관련된 내용은 아닙니다. 책을 읽다가 이거 포스팅하면 좋겠다 싶었던 부분이 있었거든요. 오늘 여러분들께 알려드릴 것은 객체 지향 5가지 원칙 중 하나인 의존성 역전의 원칙(Dependency Inversion Principle)입니다. 사실 객체 지향의 5가지 원칙에 대해서는 2년정도 전에 한번 일괄적으로 포스팅을 했었습니다. 해당 원칙에 대해서 생소하신 분들은 객체지향 설계의 5가지 원칙 S.O.L.I.D 포스터를 참고해주시면 도움이 될 것입니다. 오늘은 java Spring을 사용할 때의 예를 들어 DIP에 대해서 좀 더 이해.. 2021. 1. 10.
[Redis] Hashes을 이용하여 매핑 만들기 ( Strings VS Hashes ) 안녕하세요. 우리는 저번시간에 [Redis] Redis 자료구조 알아보기 포스팅을 통해 Redis가 가지고 있는 유용한 자료구조와 그 사용법 및 활용되는 곳에 대해서 간단히 알아보았습니다. 오늘은 이어서 제가 토이 프로젝트에 사용한 방법에 대해서 여러분들께 공유드리는 포스팅을 한번 진행해보려고 합니다. 오늘 여러분들께 보여드릴 것은 Hashes 자료구조를 이용하여 매칭되는 서로의 Key와 Value를 뒤집어서도 매핑할 수 있게하는 것입니다. 문제 상황 기존에 프로젝트에서 Tag를 저장하고 있는 테이블이 있었습니다. 이 테이블은 primary key인 id 값과 그 이름인 value 값을 가지고 있습니다. id와 value는 1 대 1 대응이되고 있었습니다. 사용하는 곳은 여느 태그들과 마찬가지입니다. 만.. 2020. 12. 31.
[Redis] Redis 자료구조 알아보기 안녕하세요. 이전 [Redis] Redis의 기본 명령어 포스팅에서 Redis의 기본적인 명령어와 이와 연관된 자료구조에 대해서 간단하게 알아본적이 있습니다. Redis는 다양한 자료구조를 기본적으로 제공하고 있는데 상당히 높은 생산성을 제공합니다. Redis 자료구조를 잘 알고 적절하게 사용한다면 생산성 및 퍼포먼스도 얻을 수 있습니다. 따라서 오늘은 여러분들과 Redis의 자료구조에 대해서 알아보는 시간을 여러분들과 가져보려고합니다. redis.io에 소개되고 있는 자료구조 Redis는 아래의 자료구조를 공식적으로 지원하고 있습니다. Strings : Vinary-safe한 기본적인 key-value 구조 Lists : String element의 모음, 순서는 삽입된 순서를 유지하며 기본적인 자료구.. 2020. 12. 24.
[UNIT-TEST] Webflux Reactor 유닛 테스트 하기 안녕하세요. 오늘은 여러분들과 함께 알아볼 내용은 Webflux에서 채택하고 있는 Reactive Stream 프로젝트인 Reactor를 유닛 테스트하는 방법입니다. Reactive Stream의 경우 기존의 일반적인 로직과 다르게 Publisher(생산)와 Subscriber(구독)로 나누어져 있으며 각각이 서로를 의식하지 않은채 약한 결합으로 돌아갑니다. 그렇기 때문에 기존 우리가 짜던 구성으로는 테스트가 쉽지 않습니다. 따라서 테스팅을 용이하게 하기위한 구성 방법 및 테스팅 방법에 대해서 오늘 여러분들과 함께 공유하고자 합니다. 이번 포스팅에서 테스팅 프레임워크로 Spock을 사용하도록 하겠습니다. JUnit 5와 Reactor 테스팅 방법의 차이는 없으므로 동일하게 사용하셔도 좋습니다. 의존성 w.. 2020. 12. 17.
[JPA] 테이블의 한 컬럼 내에서 N개의 값을 가지는 방법 안녕하세요. 오늘은 처음으로 여러분들께 JPA에 관련하여 포스팅을 하려고합니다. 저는 대부분의 프로젝트에서 JPA와 QueryDsl을 사용하고 있습니다. 사용하는 이유는 확실히 간편하기 때문입니다.. 그리고 String이 아닌 메서드 형으로 쿼리를 작성하기 때문에 만약 잘못된 점이 있다면 QueryDsl 덕분에 컴파일 타임에 찾을 수 있고 객체로 DB Table을 관리할 수 있다는 점이 있습니다. 사용하기 위한 러닝커브는 상당히 높은 편이지만 익숙해지기만 한다면 다시 Mybatis로는 돌아갈 수 없는 편함을 제공합니다. 여러분들과 오늘 이야기 나눠보고자 하는 내용은 JPA를 이용할 때 테이블의 컬럼에 내의 N개의 값을 가지는 방법입니다. 요구사항 한 게임에 게임에 대해서 리뷰를 남깁니다. 리뷰를 남길 때.. 2020. 12. 12.
[자료구조] 코드로 알아보는 java의 EnumMap 안녕하세요. 오늘은 코르로 알아보는 java의 자료구조 시간으로 돌아왔습니다. 오늘 여러분들께 소개시켜드리고자 하는 자료구조는 EnumMap입니다. 이름에서 알 수 있듯이 Enum을 Key로 하는 자료구조인데요. HashMap을 평소에 사용하다 Sonar Lint의 정적분석에서 Enum을 Key로 사용한다면 EnumMap을 사용하는 것을 추천하기에 저도 EnumMap의 존재를 알게 되었습니다. 오늘은 제가 EnumMap 자료구조를 사용한 상황과 EnumMap은 HashMap과 어떻게 다른지 알아보는 시간을 가져보도록 하겠습니다. 문제의 상황 아래 소스는 제가 진행하고 있는 프로젝트의 코드 중 일부입니다. Game에 여러 Review를 남길 수 있도록 DB의 구조가 되어있습니다. 여기서 아래 메서드는 Re.. 2020. 12. 6.
[주절주절] 사이드 프로젝트 - DB 사이트(Pika) 회사를 이직하고 8개월 정도 지나고 나서 이제 좀 업무와 도메인에 익숙해지기 시작했다고 느껴질 무렵 저는 전 회사에서 마음이 맞는 사람들과 사이드 프로젝트를 하기 시작하였습니다. 혼자하는게 아닌 팀을 이뤄서 하는 사이드 프로젝트라는게 사실 부담스럽다는 생각도 있었습니다. 왜냐하면 어떤 일을 함에 있어 동기라는게 중요한데 개발에 대한 열정만으로 과연 프로젝트를 계속 이어나갈 수 있을까하는 걱정이 었습니다. 막연하게 개발자 3명과 디자이너 1명이서 사이드 프로젝트를 시작하고 이제 2개월이 지났습니다. 다행히 처음에 막연했던 목표가 지금은 구체적이 되어 적당히 단단한 동기와 지속 할 수 있는 원동력이 생기게 되지 않았나 싶습니다. 우리는 먼저 제 1 목표를 세웠습니다. 제 1 목표 그것은 우리가 만든 사이트로.. 2020. 12. 3.
[java/Design Pattern] 싱글톤의 Early 초기화 안녕하세요. 이전시간에 저희들은 싱글톤의 Lazy 초기화에 대해서 알아보는 시간을 가졌었습니다. 포스팅에서 싱글톤 객체의 초기화 시점에는 Lazy와 Early가 있다고 말씀드렸었는데요. 오늘은 Eager 시점의 초기화에 대해서 알아보는 시간을 가져보도록 하겠습니다. 먼저 저번 포스팅에서 말씀드린 객체 초기화 방법에 대해서 다시한번 보겠습니다. Eager initialization: 클래스 인스턴스 생성을 실제로 사용되기전에 먼저 진행 Static block initialization Enum singleton Lazy initialization: 클래스 인스턴스의 생성을 처음 실제로 사용될 때 진행 Thread safe singleton Bill Pugh singleton Eager initializat.. 2020. 11. 29.